1- import { fakeAsync } from '@angular/core/testing' ;
21import { cold } from 'jasmine-marbles' ;
32import { EMPTY } from 'rxjs' ;
43
54import { PAGE_NOT_FOUND_PATH } from '../app-routing-paths' ;
65import { BitstreamDataService } from '../core/data/bitstream-data.service' ;
76import { RemoteData } from '../core/data/remote-data' ;
87import { RequestEntryState } from '../core/data/request-entry-state.model' ;
8+ import { BrowserHardRedirectService } from '../core/services/browser-hard-redirect.service' ;
9+ import { HardRedirectService } from '../core/services/hard-redirect.service' ;
910import { Bitstream } from '../core/shared/bitstream.model' ;
1011import { RouterStub } from '../shared/testing/router.stub' ;
11- import { ServerResponseServiceStub } from '../shared/testing/server-response-service.stub' ;
1212import { legacyBitstreamURLRedirectGuard } from './legacy-bitstream-url-redirect.guard' ;
1313
1414describe ( 'legacyBitstreamURLRedirectGuard' , ( ) => {
@@ -17,21 +17,26 @@ describe('legacyBitstreamURLRedirectGuard', () => {
1717 let remoteDataMocks : { [ type : string ] : RemoteData < Bitstream > } ;
1818 let route ;
1919 let state ;
20- let serverResponseService : ServerResponseServiceStub ;
20+ let hardRedirectService : HardRedirectService ;
2121 let router : RouterStub ;
2222
23+ let bitstream : Bitstream ;
24+
2325 beforeEach ( ( ) => {
2426 route = {
2527 params : { } ,
2628 queryParams : { } ,
2729 } ;
2830 router = new RouterStub ( ) ;
29- serverResponseService = new ServerResponseServiceStub ( ) ;
31+ hardRedirectService = new BrowserHardRedirectService ( window . location ) ;
3032 state = { } ;
33+ bitstream = Object . assign ( new Bitstream ( ) , {
34+ uuid : 'bitstream-id' ,
35+ } ) ;
3136 remoteDataMocks = {
3237 RequestPending : new RemoteData ( undefined , 0 , 0 , RequestEntryState . RequestPending , undefined , undefined , undefined ) ,
3338 ResponsePending : new RemoteData ( undefined , 0 , 0 , RequestEntryState . ResponsePending , undefined , undefined , undefined ) ,
34- Success : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Success , undefined , new Bitstream ( ) , 200 ) ,
39+ Success : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Success , undefined , bitstream , 200 ) ,
3540 NoContent : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Success , undefined , undefined , 204 ) ,
3641 Error : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Error , 'Internal server error' , undefined , 500 ) ,
3742 } ;
@@ -55,7 +60,7 @@ describe('legacyBitstreamURLRedirectGuard', () => {
5560 } ) ;
5661 } ) ;
5762 it ( `should call findByItemHandle with the handle, sequence id, and filename from the route` , ( ) => {
58- resolver ( route , state , bitstreamDataService , serverResponseService , router ) ;
63+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) ;
5964 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalledWith (
6065 `${ route . params . prefix } /${ route . params . suffix } ` ,
6166 route . params . sequence_id ,
@@ -80,7 +85,7 @@ describe('legacyBitstreamURLRedirectGuard', () => {
8085 } ) ;
8186 } ) ;
8287 it ( `should call findByItemHandle with the handle and filename from the route, and the sequence ID from the queryParams` , ( ) => {
83- resolver ( route , state , bitstreamDataService , serverResponseService , router ) ;
88+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) ;
8489 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalledWith (
8590 `${ route . params . prefix } /${ route . params . suffix } ` ,
8691 route . queryParams . sequenceId ,
@@ -100,7 +105,7 @@ describe('legacyBitstreamURLRedirectGuard', () => {
100105 } ) ;
101106 } ) ;
102107 it ( `should call findByItemHandle with the handle, and filename from the route` , ( ) => {
103- resolver ( route , state , bitstreamDataService , serverResponseService , router ) ;
108+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) ;
104109 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalledWith (
105110 `${ route . params . prefix } /${ route . params . suffix } ` ,
106111 undefined ,
@@ -110,45 +115,44 @@ describe('legacyBitstreamURLRedirectGuard', () => {
110115 } ) ;
111116 } ) ;
112117 describe ( 'should return and complete after the RemoteData has...' , ( ) => {
113- it ( '...failed' , fakeAsync ( ( ) => {
118+ it ( '...failed' , ( ) => {
114119 spyOn ( router , 'createUrlTree' ) . and . callThrough ( ) ;
115120 spyOn ( bitstreamDataService , 'findByItemHandle' ) . and . returnValue ( cold ( 'a-b-c' , {
116121 a : remoteDataMocks . RequestPending ,
117122 b : remoteDataMocks . ResponsePending ,
118123 c : remoteDataMocks . Error ,
119124 } ) ) ;
120- resolver ( route , state , bitstreamDataService , serverResponseService , router ) . subscribe ( ( ) => {
125+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) . subscribe ( ( ) => {
121126 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalled ( ) ;
122127 expect ( router . createUrlTree ) . toHaveBeenCalledWith ( [ PAGE_NOT_FOUND_PATH ] ) ;
123128 } ) ;
124- } ) ) ;
129+ } ) ;
125130
126- it ( '...succeeded without content' , fakeAsync ( ( ) => {
131+ it ( '...succeeded without content' , ( ) => {
127132 spyOn ( router , 'createUrlTree' ) . and . callThrough ( ) ;
128133 spyOn ( bitstreamDataService , 'findByItemHandle' ) . and . returnValue ( cold ( 'a-b-c' , {
129134 a : remoteDataMocks . RequestPending ,
130135 b : remoteDataMocks . ResponsePending ,
131136 c : remoteDataMocks . NoContent ,
132137 } ) ) ;
133- resolver ( route , state , bitstreamDataService , serverResponseService , router ) . subscribe ( ( ) => {
138+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) . subscribe ( ( ) => {
134139 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalled ( ) ;
135140 expect ( router . createUrlTree ) . toHaveBeenCalledWith ( [ PAGE_NOT_FOUND_PATH ] ) ;
136141 } ) ;
137- } ) ) ;
142+ } ) ;
138143
139- it ( '...succeeded' , fakeAsync ( ( ) => {
140- spyOn ( serverResponseService , 'setStatus' ) . and . callThrough ( ) ;
144+ it ( '...succeeded' , ( ) => {
145+ spyOn ( hardRedirectService , 'redirect' ) ;
141146 spyOn ( bitstreamDataService , 'findByItemHandle' ) . and . returnValue ( cold ( 'a-b-c' , {
142147 a : remoteDataMocks . RequestPending ,
143148 b : remoteDataMocks . ResponsePending ,
144149 c : remoteDataMocks . Success ,
145150 } ) ) ;
146- resolver ( route , state , bitstreamDataService , serverResponseService , router ) . subscribe ( ( ) => {
151+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) . subscribe ( ( ) => {
147152 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalled ( ) ;
148- expect ( serverResponseService . setStatus ) . toHaveBeenCalledWith ( 301 ) ;
149- expect ( router . parseUrl ) . toHaveBeenCalled ( ) ;
153+ expect ( hardRedirectService . redirect ) . toHaveBeenCalledWith ( new URL ( `/bitstreams/${ bitstream . uuid } /download` , window . location . origin ) . href , 301 ) ;
150154 } ) ;
151- } ) ) ;
155+ } ) ;
152156 } ) ;
153157 } ) ;
154158} ) ;
0 commit comments