1+ import { cold } from 'jasmine-marbles' ;
12import { EMPTY } from 'rxjs' ;
3+
4+ import { PAGE_NOT_FOUND_PATH } from '../app-routing-paths' ;
25import { BitstreamDataService } from '../core/data/bitstream-data.service' ;
36import { RemoteData } from '../core/data/remote-data' ;
47import { RequestEntryState } from '../core/data/request-entry-state.model' ;
5- import { legacyBitstreamURLRedirectGuard } from './legacy-bitstream-url-redirect.guard' ;
6- import { RouterStub } from '../shared/testing/router.stub' ;
7- import { ServerResponseServiceStub } from '../shared/testing/server-response-service.stub' ;
8- import { fakeAsync } from '@angular/core/testing' ;
9- import { cold } from 'jasmine-marbles' ;
10- import { PAGE_NOT_FOUND_PATH } from '../app-routing-paths' ;
8+ import { BrowserHardRedirectService } from '../core/services/browser-hard-redirect.service' ;
9+ import { HardRedirectService } from '../core/services/hard-redirect.service' ;
1110import { Bitstream } from '../core/shared/bitstream.model' ;
11+ import { RouterStub } from '../shared/testing/router.stub' ;
12+ import { legacyBitstreamURLRedirectGuard } from './legacy-bitstream-url-redirect.guard' ;
1213
1314describe ( 'legacyBitstreamURLRedirectGuard' , ( ) => {
1415 let resolver : any ;
1516 let bitstreamDataService : BitstreamDataService ;
1617 let remoteDataMocks : { [ type : string ] : RemoteData < any > } ;
1718 let route ;
1819 let state ;
19- let serverResponseService : ServerResponseServiceStub ;
20+ let hardRedirectService : HardRedirectService ;
2021 let router : RouterStub ;
2122
23+ let bitstream : Bitstream ;
24+
2225 beforeEach ( ( ) => {
2326 route = {
2427 params : { } ,
2528 queryParams : { }
2629 } ;
2730 router = new RouterStub ( ) ;
28- serverResponseService = new ServerResponseServiceStub ( ) ;
31+ hardRedirectService = new BrowserHardRedirectService ( window . location ) ;
2932 state = { } ;
33+ bitstream = Object . assign ( new Bitstream ( ) , {
34+ uuid : 'bitstream-id' ,
35+ } ) ;
3036 remoteDataMocks = {
3137 RequestPending : new RemoteData ( undefined , 0 , 0 , RequestEntryState . RequestPending , undefined , undefined , undefined ) ,
3238 ResponsePending : new RemoteData ( undefined , 0 , 0 , RequestEntryState . ResponsePending , undefined , undefined , undefined ) ,
33- Success : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Success , undefined , new Bitstream ( ) , 200 ) ,
39+ Success : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Success , undefined , bitstream , 200 ) ,
3440 NoContent : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Success , undefined , undefined , 204 ) ,
3541 Error : new RemoteData ( 0 , 0 , 0 , RequestEntryState . Error , 'Internal server error' , undefined , 500 ) ,
3642 } ;
@@ -54,7 +60,7 @@ describe('legacyBitstreamURLRedirectGuard', () => {
5460 } ) ;
5561 } ) ;
5662 it ( `should call findByItemHandle with the handle, sequence id, and filename from the route` , ( ) => {
57- resolver ( route , state , bitstreamDataService , serverResponseService , router ) ;
63+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) ;
5864 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalledWith (
5965 `${ route . params . prefix } /${ route . params . suffix } ` ,
6066 route . params . sequence_id ,
@@ -79,7 +85,7 @@ describe('legacyBitstreamURLRedirectGuard', () => {
7985 } ) ;
8086 } ) ;
8187 it ( `should call findByItemHandle with the handle and filename from the route, and the sequence ID from the queryParams` , ( ) => {
82- resolver ( route , state , bitstreamDataService , serverResponseService , router ) ;
88+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) ;
8389 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalledWith (
8490 `${ route . params . prefix } /${ route . params . suffix } ` ,
8591 route . queryParams . sequenceId ,
@@ -99,7 +105,7 @@ describe('legacyBitstreamURLRedirectGuard', () => {
99105 } ) ;
100106 } ) ;
101107 it ( `should call findByItemHandle with the handle, and filename from the route` , ( ) => {
102- resolver ( route , state , bitstreamDataService , serverResponseService , router ) ;
108+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) ;
103109 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalledWith (
104110 `${ route . params . prefix } /${ route . params . suffix } ` ,
105111 undefined ,
@@ -109,45 +115,44 @@ describe('legacyBitstreamURLRedirectGuard', () => {
109115 } ) ;
110116 } ) ;
111117 describe ( 'should return and complete after the RemoteData has...' , ( ) => {
112- it ( '...failed' , fakeAsync ( ( ) => {
118+ it ( '...failed' , ( ) => {
113119 spyOn ( router , 'createUrlTree' ) . and . callThrough ( ) ;
114120 spyOn ( bitstreamDataService , 'findByItemHandle' ) . and . returnValue ( cold ( 'a-b-c' , {
115121 a : remoteDataMocks . RequestPending ,
116122 b : remoteDataMocks . ResponsePending ,
117123 c : remoteDataMocks . Error ,
118124 } ) ) ;
119- resolver ( route , state , bitstreamDataService , serverResponseService , router ) . subscribe ( ( ) => {
125+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) . subscribe ( ( ) => {
120126 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalled ( ) ;
121127 expect ( router . createUrlTree ) . toHaveBeenCalledWith ( [ PAGE_NOT_FOUND_PATH ] ) ;
122128 } ) ;
123- } ) ) ;
129+ } ) ;
124130
125- it ( '...succeeded without content' , fakeAsync ( ( ) => {
131+ it ( '...succeeded without content' , ( ) => {
126132 spyOn ( router , 'createUrlTree' ) . and . callThrough ( ) ;
127133 spyOn ( bitstreamDataService , 'findByItemHandle' ) . and . returnValue ( cold ( 'a-b-c' , {
128134 a : remoteDataMocks . RequestPending ,
129135 b : remoteDataMocks . ResponsePending ,
130136 c : remoteDataMocks . NoContent ,
131137 } ) ) ;
132- resolver ( route , state , bitstreamDataService , serverResponseService , router ) . subscribe ( ( ) => {
138+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) . subscribe ( ( ) => {
133139 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalled ( ) ;
134140 expect ( router . createUrlTree ) . toHaveBeenCalledWith ( [ PAGE_NOT_FOUND_PATH ] ) ;
135141 } ) ;
136- } ) ) ;
142+ } ) ;
137143
138- it ( '...succeeded' , fakeAsync ( ( ) => {
139- spyOn ( serverResponseService , 'setStatus' ) . and . callThrough ( ) ;
144+ it ( '...succeeded' , ( ) => {
145+ spyOn ( hardRedirectService , 'redirect' ) ;
140146 spyOn ( bitstreamDataService , 'findByItemHandle' ) . and . returnValue ( cold ( 'a-b-c' , {
141147 a : remoteDataMocks . RequestPending ,
142148 b : remoteDataMocks . ResponsePending ,
143149 c : remoteDataMocks . Success ,
144150 } ) ) ;
145- resolver ( route , state , bitstreamDataService , serverResponseService , router ) . subscribe ( ( ) => {
151+ resolver ( route , state , bitstreamDataService , hardRedirectService , router ) . subscribe ( ( ) => {
146152 expect ( bitstreamDataService . findByItemHandle ) . toHaveBeenCalled ( ) ;
147- expect ( serverResponseService . setStatus ) . toHaveBeenCalledWith ( 301 ) ;
148- expect ( router . parseUrl ) . toHaveBeenCalled ( ) ;
153+ expect ( hardRedirectService . redirect ) . toHaveBeenCalledWith ( new URL ( `/bitstreams/${ bitstream . uuid } /download` , window . location . origin ) . href , 301 ) ;
149154 } ) ;
150- } ) ) ;
155+ } ) ;
151156 } ) ;
152157 } ) ;
153158} ) ;
0 commit comments