From 202c84c4840a9a569030fdd7528f0f7c35b8f628 Mon Sep 17 00:00:00 2001 From: "Gantner, Florian Klaus" Date: Wed, 17 Apr 2024 17:59:10 +0200 Subject: [PATCH] extend eperson render type for display of dso name https://github.com/DSpace/dspace-angular/issues/2947 (cherry picked from commit 97fade00a47eb0e1bc5e1d8b8d264878d808654d) --- .../core/breadcrumbs/dso-name.service.spec.ts | 62 +++++++++++++++++++ src/app/core/eperson/models/eperson.model.ts | 2 +- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/app/core/breadcrumbs/dso-name.service.spec.ts b/src/app/core/breadcrumbs/dso-name.service.spec.ts index 9f2f76599a..81c7591334 100644 --- a/src/app/core/breadcrumbs/dso-name.service.spec.ts +++ b/src/app/core/breadcrumbs/dso-name.service.spec.ts @@ -9,6 +9,10 @@ describe(`DSONameService`, () => { let service: DSONameService; let mockPersonName: string; let mockPerson: DSpaceObject; + let mockEPersonNameFirst: string; + let mockEPersonFirst: DSpaceObject; + let mockEPersonName: string; + let mockEPerson: DSpaceObject; let mockOrgUnitName: string; let mockOrgUnit: DSpaceObject; let mockDSOName: string; @@ -25,6 +29,26 @@ describe(`DSONameService`, () => { } }); + mockEPersonName = 'John Doe'; + mockEPerson = Object.assign(new DSpaceObject(), { + firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { + return mockEPersonName; + }, + getRenderTypes(): (string | GenericConstructor)[] { + return ['EPerson', Item, DSpaceObject]; + }, + }); + + mockEPersonNameFirst = 'John'; + mockEPersonFirst = Object.assign(new DSpaceObject(), { + firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { + return mockEPersonNameFirst; + }, + getRenderTypes(): (string | GenericConstructor)[] { + return ['EPerson', Item, DSpaceObject]; + }, + }); + mockOrgUnitName = 'Molecular Spectroscopy'; mockOrgUnit = Object.assign(new DSpaceObject(), { firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { @@ -67,6 +91,15 @@ describe(`DSONameService`, () => { expect(result).toBe('Bingo!'); }); + it(`should use the EPerson factory for EPerson objects`, () => { + spyOn((service as any).factories, 'EPerson').and.returnValue('Bingo!'); + + const result = service.getName(mockEPerson); + + expect((service as any).factories.EPerson).toHaveBeenCalledWith(mockEPerson); + expect(result).toBe('Bingo!'); + }); + it(`should use the Default factory for regular DSpaceObjects`, () => { spyOn((service as any).factories, 'Default').and.returnValue('Bingo!'); @@ -107,6 +140,35 @@ describe(`DSONameService`, () => { }); }); + describe(`factories.EPerson`, () => { + describe(`with eperson.firstname and without eperson.lastname`, () => { + beforeEach(() => { + spyOn(mockEPerson, 'firstMetadataValue').and.returnValues(...mockEPersonName.split(' ')); + }); + + it(`should return 'eperson.firstname' and 'eperson.lastname'`, () => { + const result = (service as any).factories.EPerson(mockEPerson); + expect(result).toBe(mockEPersonName); + expect(mockEPerson.firstMetadataValue).toHaveBeenCalledWith('eperson.firstname'); + expect(mockEPerson.firstMetadataValue).toHaveBeenCalledWith('eperson.lastname'); + }); + }); + + describe(` with eperson.firstname and without eperson.lastname`, () => { + beforeEach(() => { + spyOn(mockEPersonFirst, 'firstMetadataValue').and.returnValues(mockEPersonNameFirst, undefined); + }); + + it(`should return 'eperson.firstname'`, () => { + const result = (service as any).factories.EPerson(mockEPersonFirst); + expect(result).toBe(mockEPersonNameFirst); + expect(mockEPersonFirst.firstMetadataValue).toHaveBeenCalledWith('eperson.firstname'); + expect(mockEPersonFirst.firstMetadataValue).toHaveBeenCalledWith('eperson.lastname'); + }); + }); + }); + + describe(`factories.OrgUnit`, () => { beforeEach(() => { spyOn(mockOrgUnit, 'firstMetadataValue').and.callThrough(); diff --git a/src/app/core/eperson/models/eperson.model.ts b/src/app/core/eperson/models/eperson.model.ts index 08b36dd78d..c985812411 100644 --- a/src/app/core/eperson/models/eperson.model.ts +++ b/src/app/core/eperson/models/eperson.model.ts @@ -85,7 +85,7 @@ export class EPerson extends DSpaceObject { public groups?: Observable>>; getRenderTypes(): (string | GenericConstructor)[] { - return [this.constructor.name, ...super.getRenderTypes()]; + return ['EPerson', this.constructor.name, ...super.getRenderTypes()]; } }