Commits

Tim Donohue authored and GitHub committed ce096496eb6 Merge
Merge pull request #2065 from atmire/single-page-of-bitstreams-for-citation-pdf-url-tag

Only check 1 page of bitstreams when generating the citation_pdf_url tag
No tags
gidlmaster

src/app/core/metadata/metadata.service.spec.ts

Modified
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();

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut