Commits
Tim Donohue authored and GitHub committed ce096496eb6 Merge
1 1 | import { fakeAsync, tick } from '@angular/core/testing'; |
2 2 | import { Meta, Title } from '@angular/platform-browser'; |
3 3 | import { NavigationEnd, Router } from '@angular/router'; |
4 4 | |
5 5 | import { TranslateService } from '@ngx-translate/core'; |
6 6 | import { Observable, of as observableOf, of } from 'rxjs'; |
7 7 | |
8 8 | import { RemoteData } from '../data/remote-data'; |
9 9 | import { Item } from '../shared/item.model'; |
10 10 | |
11 - | import { ItemMock, MockBitstream1, MockBitstream3 } from '../../shared/mocks/item.mock'; |
11 + | import { |
12 + | ItemMock, |
13 + | MockBitstream1, |
14 + | MockBitstream3, |
15 + | MockBitstream2 |
16 + | } from '../../shared/mocks/item.mock'; |
12 17 | import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; |
13 18 | import { PaginatedList } from '../data/paginated-list.model'; |
14 19 | import { Bitstream } from '../shared/bitstream.model'; |
15 20 | import { MetadataValue } from '../shared/metadata.models'; |
16 21 | |
17 22 | import { MetadataService } from './metadata.service'; |
18 23 | import { RootDataService } from '../data/root-data.service'; |
19 24 | import { Bundle } from '../shared/bundle.model'; |
20 25 | import { createPaginatedList } from '../../shared/testing/utils.test'; |
21 26 | import { getMockTranslateService } from '../../shared/mocks/translate.service.mock'; |
22 27 | import { DSONameService } from '../breadcrumbs/dso-name.service'; |
23 28 | import { HardRedirectService } from '../services/hard-redirect.service'; |
24 29 | import { getMockStore } from '@ngrx/store/testing'; |
25 30 | import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions'; |
26 31 | import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; |
32 + | import { AppConfig } from '../../../config/app-config.interface'; |
27 33 | |
28 34 | describe('MetadataService', () => { |
29 35 | let metadataService: MetadataService; |
30 36 | |
31 37 | let meta: Meta; |
32 38 | |
33 39 | let title: Title; |
34 40 | |
35 41 | let dsoNameService: DSONameService; |
36 42 | |
37 43 | let bundleDataService; |
38 44 | let bitstreamDataService; |
39 45 | let rootService: RootDataService; |
40 46 | let translateService: TranslateService; |
41 47 | let hardRedirectService: HardRedirectService; |
42 48 | let authorizationService: AuthorizationDataService; |
43 49 | |
44 50 | let router: Router; |
45 51 | let store; |
46 52 | |
53 + | let appConfig: AppConfig; |
54 + | |
47 55 | const initialState = { 'core': { metaTag: { tagsInUse: ['title', 'description'] }}}; |
48 56 | |
49 57 | |
50 58 | beforeEach(() => { |
51 59 | rootService = jasmine.createSpyObj({ |
52 60 | findRoot: createSuccessfulRemoteDataObject$({ dspaceVersion: 'mock-dspace-version' }) |
53 61 | }); |
54 62 | bitstreamDataService = jasmine.createSpyObj({ |
55 63 | findListByHref: createSuccessfulRemoteDataObject$(createPaginatedList([MockBitstream3])), |
56 64 | }); |
79 87 | getCurrentOrigin: 'https://request.org', |
80 88 | }); |
81 89 | authorizationService = jasmine.createSpyObj('authorizationService', { |
82 90 | isAuthorized: observableOf(true) |
83 91 | }); |
84 92 | |
85 93 | // @ts-ignore |
86 94 | store = getMockStore({ initialState }); |
87 95 | spyOn(store, 'dispatch'); |
88 96 | |
97 + | appConfig = { |
98 + | item: { |
99 + | bitstream: { |
100 + | pageSize: 5 |
101 + | } |
102 + | } |
103 + | } as any; |
104 + | |
89 105 | metadataService = new MetadataService( |
90 106 | router, |
91 107 | translateService, |
92 108 | meta, |
93 109 | title, |
94 110 | dsoNameService, |
95 111 | bundleDataService, |
96 112 | bitstreamDataService, |
97 113 | undefined, |
98 114 | rootService, |
99 115 | store, |
100 116 | hardRedirectService, |
117 + | appConfig, |
101 118 | authorizationService |
102 119 | ); |
103 120 | }); |
104 121 | |
105 122 | it('items page should set meta tags', fakeAsync(() => { |
106 123 | (metadataService as any).processRouteChange({ |
107 124 | data: { |
108 125 | value: { |
109 126 | dso: createSuccessfulRemoteDataObject(ItemMock), |
110 127 | } |
351 368 | } |
352 369 | } |
353 370 | }); |
354 371 | tick(); |
355 372 | expect(meta.addTag).toHaveBeenCalledWith({ |
356 373 | name: 'citation_pdf_url', |
357 374 | content: 'https://request.org/bitstreams/4db100c1-e1f5-4055-9404-9bc3e2d15f29/download' |
358 375 | }); |
359 376 | })); |
360 377 | |
361 - | it('should link to first Bitstream with allowed format', fakeAsync(() => { |
362 - | const bitstreams = [MockBitstream3, MockBitstream3, MockBitstream1]; |
363 - | (bundleDataService.findByItemAndName as jasmine.Spy).and.returnValue(mockBundleRD$(bitstreams)); |
364 - | (bitstreamDataService.findListByHref as jasmine.Spy).and.returnValues( |
365 - | mockBitstreamPages$(bitstreams).map(bp => createSuccessfulRemoteDataObject$(bp)), |
366 - | ); |
378 + | describe(`when there's a bitstream with an allowed format on the first page`, () => { |
379 + | let bitstreams; |
367 380 | |
368 - | (metadataService as any).processRouteChange({ |
369 - | data: { |
370 - | value: { |
371 - | dso: createSuccessfulRemoteDataObject(ItemMock), |
372 - | } |
373 - | } |
381 + | beforeEach(() => { |
382 + | bitstreams = [MockBitstream2, MockBitstream3, MockBitstream1]; |
383 + | (bundleDataService.findByItemAndName as jasmine.Spy).and.returnValue(mockBundleRD$(bitstreams)); |
384 + | (bitstreamDataService.findListByHref as jasmine.Spy).and.returnValues( |
385 + | mockBitstreamPages$(bitstreams).map(bp => createSuccessfulRemoteDataObject$(bp)), |
386 + | ); |
374 387 | }); |
375 - | tick(); |
376 - | expect(meta.addTag).toHaveBeenCalledWith({ |
377 - | name: 'citation_pdf_url', |
378 - | content: 'https://request.org/bitstreams/cf9b0c8e-a1eb-4b65-afd0-567366448713/download' |
379 - | }); |
380 - | })); |
388 + | |
389 + | it('should link to first Bitstream with allowed format', fakeAsync(() => { |
390 + | (metadataService as any).processRouteChange({ |
391 + | data: { |
392 + | value: { |
393 + | dso: createSuccessfulRemoteDataObject(ItemMock), |
394 + | } |
395 + | } |
396 + | }); |
397 + | tick(); |
398 + | expect(meta.addTag).toHaveBeenCalledWith({ |
399 + | name: 'citation_pdf_url', |
400 + | content: 'https://request.org/bitstreams/99b00f3c-1cc6-4689-8158-91965bee6b28/download' |
401 + | }); |
402 + | })); |
403 + | |
404 + | }); |
405 + | |
381 406 | }); |
382 407 | }); |
383 408 | |
409 + | describe(`when there's no bitstream with an allowed format on the first page`, () => { |
410 + | let bitstreams; |
411 + | |
412 + | beforeEach(() => { |
413 + | bitstreams = [MockBitstream1, MockBitstream3, MockBitstream2]; |
414 + | (bundleDataService.findByItemAndName as jasmine.Spy).and.returnValue(mockBundleRD$(bitstreams)); |
415 + | (bitstreamDataService.findListByHref as jasmine.Spy).and.returnValues( |
416 + | mockBitstreamPages$(bitstreams).map(bp => createSuccessfulRemoteDataObject$(bp)), |
417 + | ); |
418 + | }); |
419 + | |
420 + | it(`shouldn't add a citation_pdf_url meta tag`, fakeAsync(() => { |
421 + | (metadataService as any).processRouteChange({ |
422 + | data: { |
423 + | value: { |
424 + | dso: createSuccessfulRemoteDataObject(ItemMock), |
425 + | } |
426 + | } |
427 + | }); |
428 + | tick(); |
429 + | expect(meta.addTag).not.toHaveBeenCalledWith({ |
430 + | name: 'citation_pdf_url', |
431 + | content: 'https://request.org/bitstreams/99b00f3c-1cc6-4689-8158-91965bee6b28/download' |
432 + | }); |
433 + | })); |
434 + | |
435 + | }); |
436 + | |
437 + | |
384 438 | describe('tagstore', () => { |
385 439 | beforeEach(fakeAsync(() => { |
386 440 | (metadataService as any).processRouteChange({ |
387 441 | data: { |
388 442 | value: { |
389 443 | dso: createSuccessfulRemoteDataObject(ItemMock), |
390 444 | } |
391 445 | } |
392 446 | }); |
393 447 | tick(); |