From 304d8f73862fd577d687813bdaad07d6f7d32b3d Mon Sep 17 00:00:00 2001 From: Yura Bondarenko Date: Fri, 4 Jun 2021 14:08:20 +0200 Subject: [PATCH] 79768: Fix tag: citation_abstract_html_url --- .../core/metadata/metadata.service.spec.ts | 23 ++++++++++++++++++- src/app/core/metadata/metadata.service.ts | 7 ++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/app/core/metadata/metadata.service.spec.ts b/src/app/core/metadata/metadata.service.spec.ts index 749074d0a7..30ee7f99ea 100644 --- a/src/app/core/metadata/metadata.service.spec.ts +++ b/src/app/core/metadata/metadata.service.spec.ts @@ -230,7 +230,6 @@ describe('MetadataService', () => { tick(); expect(tagStore.get('citation_dissertation_name')[0].content).toEqual('Test PowerPoint Document'); expect(tagStore.get('citation_dissertation_institution')[0].content).toEqual('Mock Publisher'); - expect(tagStore.get('citation_abstract_html_url')[0].content).toEqual([environment.ui.baseUrl, router.url].join('')); expect(tagStore.get('citation_pdf_url')[0].content).toEqual('/bitstreams/99b00f3c-1cc6-4689-8158-91965bee6b28/download'); })); @@ -273,6 +272,22 @@ describe('MetadataService', () => { }); + describe('citation_abstract_html_url', () => { + it('should use dc.identifier.uri if available', fakeAsync(() => { + spyOn(itemDataService, 'findById').and.returnValue(mockRemoteData(mockUri(ItemMock, 'https://ddg.gg'))); + router.navigate(['/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357']); + tick(); + expect(tagStore.get('citation_abstract_html_url')[0].content).toEqual('https://ddg.gg'); + })); + + it('should use current route as fallback', fakeAsync(() => { + spyOn(itemDataService, 'findById').and.returnValue(mockRemoteData(mockUri(ItemMock))); + router.navigate(['/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357']); + tick(); + expect(tagStore.get('citation_abstract_html_url')[0].content).toEqual('/items/0ec7ff22-f211-40ab-a69e-c819b0b1f357'); + })); + }); + describe('citation_pdf_url', () => { it('should link to primary Bitstream URL regardless of format', fakeAsync(() => { spyOn(itemDataService, 'findById').and.returnValue(mockRemoteData(ItemMock)); @@ -328,6 +343,12 @@ describe('MetadataService', () => { return publishedMockItem; }; + const mockUri = (mockItem: Item, uri?: string): Item => { + const publishedMockItem = Object.assign(new Item(), mockItem) as Item; + publishedMockItem.metadata['dc.identifier.uri'] = [{ value: uri }] as MetadataValue[]; + return publishedMockItem; + }; + const mockBundleRD$ = (bitstreams: Bitstream[], primary?: Bitstream): Observable> => { return createSuccessfulRemoteDataObject$( Object.assign(new Bundle(), { diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index 3ccc9e5f09..bc26f36fd1 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -274,8 +274,11 @@ export class MetadataService { */ private setCitationAbstractUrlTag(): void { if (this.currentObject.value instanceof Item) { - const value = [environment.ui.baseUrl, this.router.url].join(''); - this.addMetaTag('citation_abstract_html_url', value); + let url = this.getMetaTagValue('dc.identifier.uri'); + if (hasNoValue(url)) { + url = this.router.url; // Google should handle relative URL + } + this.addMetaTag('citation_abstract_html_url', url); } }