From bdda84f884c08de07d7c38a0cf7fc145fd4892ce Mon Sep 17 00:00:00 2001 From: Kim Shepherd Date: Thu, 26 Jan 2023 14:47:35 +1300 Subject: [PATCH] [TLC-249] Larger refactor to field, item components for browse links --- .../browse/browse-definition-data.service.ts | 66 +++++++++------ .../browse/browse-link-data.service.spec.ts | 28 ------- .../core/browse/browse-link-data.service.ts | 82 ------------------- src/app/core/core.module.ts | 2 - .../journal/journal.component.spec.ts | 10 ++- ...item-page-abstract-field.component.spec.ts | 6 +- .../item-page-author-field.component.spec.ts | 6 +- .../item-page-date-field.component.spec.ts | 6 +- .../generic-item-page-field.component.spec.ts | 6 +- .../item-page-field.component.spec.ts | 6 +- .../item-page-field.component.ts | 11 ++- .../uri/item-page-uri-field.component.spec.ts | 6 +- .../publication/publication.component.spec.ts | 11 ++- .../item-types/shared/item.component.spec.ts | 28 +++++-- .../untyped-item.component.spec.ts | 11 ++- .../versioned-item.component.spec.ts | 7 +- ...xt-metadata-list-element.component.spec.ts | 2 +- ...=> browse-definition-data-service.stub.ts} | 22 ++++- 18 files changed, 139 insertions(+), 177 deletions(-) delete mode 100644 src/app/core/browse/browse-link-data.service.spec.ts delete mode 100644 src/app/core/browse/browse-link-data.service.ts rename src/app/shared/testing/{browse-link-data-service.stub.ts => browse-definition-data-service.stub.ts} (77%) diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index e4d3718806..aa3e095608 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -50,7 +50,7 @@ export class BrowseDefinitionDataService extends IdentifiableDataService[] + ): Observable> { + const searchParams = []; + + const hrefObs = this.getSearchByHref( + 'allLinked', + { searchParams }, + ...linksToFollow + ); + + return this.findByHref( + hrefObs, + useCachedVersionIfAvailable, + reRequestOnStale, + ...linksToFollow, + ); + } + /** * Get the browse URL by providing a list of metadata keys * @param metadatumKey * @param linkPath */ - findByFields(metadataKeys: string[]): Observable { - let searchKeyArray: string[] = []; - metadataKeys.forEach((metadataKey) => { - searchKeyArray = searchKeyArray.concat(BrowseDefinitionDataService.toSearchKeyArray(metadataKey)); - }); - return this.findAll().pipe( - getRemoteDataPayload(), - getPaginatedListPayload(), - map((browseDefinitions: BrowseDefinition[]) => browseDefinitions - .find((def: BrowseDefinition) => { - const matchingKeys = def.metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); - return isNotEmpty(matchingKeys); - }) - ), - map((def: BrowseDefinition) => { - if (isEmpty(def) || isEmpty(def.id)) { - //throw new Error(`A browse definition for field ${metadataKey} isn't configured`); - } else { - return def; - } - }), - startWith(undefined), - distinctUntilChanged() + findByFields( + fields: string[], + useCachedVersionIfAvailable = true, + reRequestOnStale = true, + ...linksToFollow: FollowLinkConfig[] + ): Observable> { + const searchParams = []; + searchParams.push(new RequestParam('fields', fields)); + + const hrefObs = this.getSearchByHref( + 'byFields', + { searchParams }, + ...linksToFollow + ); + + return this.findByHref( + hrefObs, + useCachedVersionIfAvailable, + reRequestOnStale, + ...linksToFollow, ); } diff --git a/src/app/core/browse/browse-link-data.service.spec.ts b/src/app/core/browse/browse-link-data.service.spec.ts deleted file mode 100644 index bb34c24900..0000000000 --- a/src/app/core/browse/browse-link-data.service.spec.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { followLink } from '../../shared/utils/follow-link-config.model'; -import { EMPTY } from 'rxjs'; -import { FindListOptions } from '../data/find-list-options.model'; -import { BrowseLinkDataService } from './browse-link-data.service'; - -describe(`BrowseLinkDataService`, () => { - let service: BrowseLinkDataService; - const findAllDataSpy = jasmine.createSpyObj('findAllData', { - findAll: EMPTY, - }); - const options = new FindListOptions(); - const linksToFollow = [ - followLink('entries'), - followLink('items') - ]; - - beforeEach(() => { - service = new BrowseLinkDataService(null, null, null, null, null); - (service as any).findAllData = findAllDataSpy; - }); - - describe(`getBrowseLinkFor`, () => { - it(`should call findAll on findAllData`, () => { - service.getBrowseLinkFor(['dc.test']); - expect(findAllDataSpy.findAll).toHaveBeenCalledWith({ elementsPerPage: 9999 }); - }); - }); -}); diff --git a/src/app/core/browse/browse-link-data.service.ts b/src/app/core/browse/browse-link-data.service.ts deleted file mode 100644 index c7dd31e4d3..0000000000 --- a/src/app/core/browse/browse-link-data.service.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Injectable } from '@angular/core'; -import { BrowseDefinition } from '../shared/browse-definition.model'; -import { RequestService } from '../data/request.service'; -import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../cache/object-cache.service'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { Observable } from 'rxjs'; -import { RemoteData } from '../data/remote-data'; -import { PaginatedList } from '../data/paginated-list.model'; -import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { FindAllDataImpl } from '../data/base/find-all-data'; -import { BrowseDefinitionDataService } from './browse-definition-data.service'; -import { - getFirstSucceededRemoteData, getPaginatedListPayload, getRemoteDataPayload -} from '../shared/operators'; -import { distinctUntilChanged, map, startWith } from 'rxjs/operators'; -import { isEmpty, isNotEmpty } from '../../shared/empty.util'; -import { BrowseService } from './browse.service'; - -/** - * Data service responsible for retrieving browse definitions from the REST server, IF AND ONLY IF - * they are configured as browse links (webui.browse.link.) - */ -@Injectable() -export class BrowseLinkDataService extends IdentifiableDataService { - private findAllData: FindAllDataImpl; - - constructor( - protected requestService: RequestService, - protected rdbService: RemoteDataBuildService, - protected objectCache: ObjectCacheService, - protected halService: HALEndpointService, - protected browseDefinitionDataService: BrowseDefinitionDataService - ) { - super('browselinks', requestService, rdbService, objectCache, halService); - this.findAllData = new FindAllDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive); - } - - - /** - * Get all BrowseDefinitions - */ - getBrowseLinks(): Observable>> { - return this.findAllData.findAll({ elementsPerPage: 9999 }).pipe( - getFirstSucceededRemoteData(), - ); - } - - - /** - * Get the browse URL by providing a list of metadata keys - * @param metadatumKey - * @param linkPath - */ - getBrowseLinkFor(metadataKeys: string[]): Observable { - let searchKeyArray: string[] = []; - metadataKeys.forEach((metadataKey) => { - searchKeyArray = searchKeyArray.concat(BrowseService.toSearchKeyArray(metadataKey)); - }); - return this.getBrowseLinks().pipe( - getRemoteDataPayload(), - getPaginatedListPayload(), - map((browseDefinitions: BrowseDefinition[]) => browseDefinitions - .find((def: BrowseDefinition) => { - const matchingKeys = def.metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); - return isNotEmpty(matchingKeys); - }) - ), - map((def: BrowseDefinition) => { - if (isEmpty(def) || isEmpty(def.id)) { - //throw new Error(`A browse definition for field ${metadataKey} isn't configured`); - } else { - return def; - } - }), - startWith(undefined), - distinctUntilChanged() - ); - } - -} - diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index d90ad8da77..ede23ba43b 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -24,7 +24,6 @@ import { SidebarService } from '../shared/sidebar/sidebar.service'; import { AuthenticatedGuard } from './auth/authenticated.guard'; import { AuthStatus } from './auth/models/auth-status.model'; import { BrowseService } from './browse/browse.service'; -import { BrowseLinkDataService } from './browse/browse-link-data.service'; import { RemoteDataBuildService } from './cache/builders/remote-data-build.service'; import { ObjectCacheService } from './cache/object-cache.service'; import { SubmissionDefinitionsModel } from './config/models/config-submission-definitions.model'; @@ -222,7 +221,6 @@ const PROVIDERS = [ MyDSpaceResponseParsingService, ServerResponseService, BrowseService, - BrowseLinkDataService, AccessStatusDataService, SubmissionCcLicenseDataService, SubmissionCcLicenseUrlDataService, diff --git a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts index 7e20edca6b..c4afdcb850 100644 --- a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.spec.ts @@ -35,6 +35,12 @@ import { VersionDataService } from '../../../../core/data/version-data.service'; import { WorkspaceitemDataService } from '../../../../core/submission/workspaceitem-data.service'; import { SearchService } from '../../../../core/shared/search/search.service'; import { mockRouteService } from '../../../../item-page/simple/item-types/shared/item.component.spec'; +import { + BrowseDefinitionDataServiceStub, + browseServiceStub, +} from '../../../../shared/testing/browse-definition-data-service.stub'; +import { BrowseService } from '../../../../core/browse/browse.service'; +import { BrowseDefinitionDataService } from '../../../../core/browse/browse-definition-data.service'; let comp: JournalComponent; let fixture: ComponentFixture; @@ -100,7 +106,9 @@ describe('JournalComponent', () => { { provide: BitstreamDataService, useValue: mockBitstreamDataService }, { provide: WorkspaceitemDataService, useValue: {} }, { provide: SearchService, useValue: {} }, - { provide: RouteService, useValue: mockRouteService } + { provide: RouteService, useValue: mockRouteService }, + { provide: BrowseService, useValue: browseServiceStub }, + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } ], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component.spec.ts index c98ea09079..bfed3847c5 100644 --- a/src/app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component.spec.ts @@ -7,8 +7,8 @@ import { SharedModule } from '../../../../../shared/shared.module'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; import { By } from '@angular/platform-browser'; -import { BrowseLinkDataService } from '../../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../../shared/testing/browse-link-data-service.stub'; +import { BrowseDefinitionDataService } from '../../../../../core/browse/browse-definition-data.service'; +import { BrowseDefinitionDataServiceStub } from '../../../../../shared/testing/browse-definition-data-service.stub'; let comp: ItemPageAbstractFieldComponent; let fixture: ComponentFixture; @@ -27,7 +27,7 @@ describe('ItemPageAbstractFieldComponent', () => { ], providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } ], declarations: [ItemPageAbstractFieldComponent], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/field-components/specific-field/author/item-page-author-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/author/item-page-author-field.component.spec.ts index d85754438c..855a995142 100644 --- a/src/app/item-page/simple/field-components/specific-field/author/item-page-author-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/author/item-page-author-field.component.spec.ts @@ -7,8 +7,8 @@ import { mockItemWithMetadataFieldsAndValue } from '../item-page-field.component import { ItemPageAuthorFieldComponent } from './item-page-author-field.component'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; -import { BrowseLinkDataService } from '../../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../../shared/testing/browse-link-data-service.stub'; +import { BrowseDefinitionDataService } from '../../../../../core/browse/browse-definition-data.service'; +import { BrowseDefinitionDataServiceStub } from '../../../../../shared/testing/browse-definition-data-service.stub'; let comp: ItemPageAuthorFieldComponent; let fixture: ComponentFixture; @@ -27,7 +27,7 @@ describe('ItemPageAuthorFieldComponent', () => { })], providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } ], declarations: [ItemPageAuthorFieldComponent, MetadataValuesComponent], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts index f4b491dd22..be124dab82 100644 --- a/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/date/item-page-date-field.component.spec.ts @@ -7,8 +7,8 @@ import { mockItemWithMetadataFieldsAndValue } from '../item-page-field.component import { ItemPageDateFieldComponent } from './item-page-date-field.component'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; -import { BrowseLinkDataService } from '../../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../../shared/testing/browse-link-data-service.stub'; +import { BrowseDefinitionDataService } from '../../../../../core/browse/browse-definition-data.service'; +import { BrowseDefinitionDataServiceStub } from '../../../../../shared/testing/browse-definition-data-service.stub'; let comp: ItemPageDateFieldComponent; let fixture: ComponentFixture; @@ -27,7 +27,7 @@ describe('ItemPageDateFieldComponent', () => { })], providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } ], declarations: [ItemPageDateFieldComponent, MetadataValuesComponent], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts index 69fc84957d..fdf5ac1bb5 100644 --- a/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component.spec.ts @@ -7,8 +7,8 @@ import { mockItemWithMetadataFieldsAndValue } from '../item-page-field.component import { GenericItemPageFieldComponent } from './generic-item-page-field.component'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; -import { BrowseLinkDataService } from '../../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../../shared/testing/browse-link-data-service.stub'; +import { BrowseDefinitionDataService } from '../../../../../core/browse/browse-definition-data.service'; +import { BrowseDefinitionDataServiceStub } from '../../../../../shared/testing/browse-definition-data-service.stub'; let comp: GenericItemPageFieldComponent; let fixture: ComponentFixture; @@ -29,7 +29,7 @@ describe('GenericItemPageFieldComponent', () => { })], providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } ], declarations: [GenericItemPageFieldComponent, MetadataValuesComponent], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/field-components/specific-field/item-page-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/item-page-field.component.spec.ts index 2a4e60b393..b1579b1cda 100644 --- a/src/app/item-page/simple/field-components/specific-field/item-page-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/item-page-field.component.spec.ts @@ -12,9 +12,9 @@ import { environment } from '../../../../../environments/environment'; import { MarkdownPipe } from '../../../../shared/utils/markdown.pipe'; import { SharedModule } from '../../../../shared/shared.module'; import { APP_CONFIG } from '../../../../../config/app-config.interface'; -import { BrowseLinkDataService } from '../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../shared/testing/browse-link-data-service.stub'; import { By } from '@angular/platform-browser'; +import { BrowseDefinitionDataService } from '../../../../core/browse/browse-definition-data.service'; +import { BrowseDefinitionDataServiceStub } from '../../../../shared/testing/browse-definition-data-service.stub'; let comp: ItemPageFieldComponent; let fixture: ComponentFixture; @@ -49,7 +49,7 @@ describe('ItemPageFieldComponent', () => { ], providers: [ { provide: APP_CONFIG, useValue: appConfig }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } ], declarations: [ItemPageFieldComponent, MetadataValuesComponent], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/field-components/specific-field/item-page-field.component.ts b/src/app/item-page/simple/field-components/specific-field/item-page-field.component.ts index 0b6805d857..5d835f97dd 100644 --- a/src/app/item-page/simple/field-components/specific-field/item-page-field.component.ts +++ b/src/app/item-page/simple/field-components/specific-field/item-page-field.component.ts @@ -3,7 +3,8 @@ import { Item } from '../../../../core/shared/item.model'; import { map } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { BrowseDefinition } from '../../../../core/shared/browse-definition.model'; -import { BrowseLinkDataService } from '../../../../core/browse/browse-link-data.service'; +import { BrowseDefinitionDataService } from '../../../../core/browse/browse-definition-data.service'; +import { getPaginatedListPayload, getRemoteDataPayload } from '../../../../core/shared/operators'; /** * This component can be used to represent metadata on a simple item page. @@ -16,7 +17,7 @@ import { BrowseLinkDataService } from '../../../../core/browse/browse-link-data. }) export class ItemPageFieldComponent { - constructor(protected browseLinkDataService: BrowseLinkDataService) { + constructor(protected browseDefinitionDataService: BrowseDefinitionDataService) { } /** @@ -55,7 +56,9 @@ export class ItemPageFieldComponent { * link in dspace.cfg (webui.browse.link.) */ get browseDefinition(): Observable { - return this.browseLinkDataService.getBrowseLinkFor(this.fields).pipe( - map((def) => def)); + return this.browseDefinitionDataService.findByFields(this.fields).pipe( + getRemoteDataPayload(), + map((def) => def) + ); } } diff --git a/src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.spec.ts b/src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.spec.ts index 50d697fb70..cc55b76e3e 100644 --- a/src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.spec.ts +++ b/src/app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component.spec.ts @@ -7,8 +7,8 @@ import { ItemPageUriFieldComponent } from './item-page-uri-field.component'; import { MetadataUriValuesComponent } from '../../../../field-components/metadata-uri-values/metadata-uri-values.component'; import { environment } from '../../../../../../environments/environment'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; -import { BrowseLinkDataService } from '../../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../../shared/testing/browse-link-data-service.stub'; +import { BrowseDefinitionDataService } from '../../../../../core/browse/browse-definition-data.service'; +import { BrowseDefinitionDataServiceStub } from '../../../../../shared/testing/browse-definition-data-service.stub'; let comp: ItemPageUriFieldComponent; let fixture: ComponentFixture; @@ -28,7 +28,7 @@ describe('ItemPageUriFieldComponent', () => { })], providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub } ], declarations: [ItemPageUriFieldComponent, MetadataUriValuesComponent], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/item-types/publication/publication.component.spec.ts b/src/app/item-page/simple/item-types/publication/publication.component.spec.ts index d1ea4fbe56..b56471fbb9 100644 --- a/src/app/item-page/simple/item-types/publication/publication.component.spec.ts +++ b/src/app/item-page/simple/item-types/publication/publication.component.spec.ts @@ -36,8 +36,12 @@ import { VersionDataService } from '../../../../core/data/version-data.service'; import { RouterTestingModule } from '@angular/router/testing'; import { WorkspaceitemDataService } from '../../../../core/submission/workspaceitem-data.service'; import { SearchService } from '../../../../core/shared/search/search.service'; -import { BrowseLinkDataService } from '../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../shared/testing/browse-link-data-service.stub'; +import { BrowseDefinitionDataService } from '../../../../core/browse/browse-definition-data.service'; +import { + BrowseDefinitionDataServiceStub, + browseServiceStub, +} from '../../../../shared/testing/browse-definition-data-service.stub'; +import { BrowseService } from '../../../../core/browse/browse.service'; const noMetadata = new MetadataMap(); @@ -90,7 +94,8 @@ describe('PublicationComponent', () => { { provide: WorkspaceitemDataService, useValue: {} }, { provide: SearchService, useValue: {} }, { provide: RouteService, useValue: mockRouteService }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub }, + { provide: BrowseService, useValue: browseServiceStub }, ], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/item-page/simple/item-types/shared/item.component.spec.ts b/src/app/item-page/simple/item-types/shared/item.component.spec.ts index 40666a4d33..5849053c0b 100644 --- a/src/app/item-page/simple/item-types/shared/item.component.spec.ts +++ b/src/app/item-page/simple/item-types/shared/item.component.spec.ts @@ -23,7 +23,10 @@ import { UUIDService } from '../../../../core/shared/uuid.service'; import { isNotEmpty } from '../../../../shared/empty.util'; import { TranslateLoaderMock } from '../../../../shared/mocks/translate-loader.mock'; import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$ +} from '../../../../shared/remote-data.utils'; import { TruncatableService } from '../../../../shared/truncatable/truncatable.service'; import { TruncatePipe } from '../../../../shared/utils/truncate.pipe'; import { GenericItemPageFieldComponent } from '../../field-components/specific-field/generic/generic-item-page-field.component'; @@ -38,13 +41,18 @@ import { VersionHistoryDataService } from '../../../../core/data/version-history import { RouterTestingModule } from '@angular/router/testing'; import { AuthorizationDataService } from '../../../../core/data/feature-authorization/authorization-data.service'; import { ResearcherProfileDataService } from '../../../../core/profile/researcher-profile-data.service'; -import { BrowseLinkDataService } from '../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../shared/testing/browse-link-data-service.stub'; +import { BrowseService } from '../../../../core/browse/browse.service'; +import { BrowseDefinitionDataService } from '../../../../core/browse/browse-definition-data.service'; +import { + BrowseDefinitionDataServiceStub, + browseServiceStub, +} from '../../../../shared/testing/browse-definition-data-service.stub'; -import { buildPaginatedList } from '../../../../core/data/paginated-list.model'; +import { buildPaginatedList, PaginatedList } from '../../../../core/data/paginated-list.model'; import { PageInfo } from '../../../../core/shared/page-info.model'; import { Router } from '@angular/router'; import { ItemComponent } from './item.component'; +import { BrowseDefinition } from '../../../../core/shared/browse-definition.model'; export function getIIIFSearchEnabled(enabled: boolean): MetadataValue { return Object.assign(new MetadataValue(), { @@ -72,6 +80,12 @@ export const mockRouteService = { } }; +export const mockBrowseService = { + getBrowseDefinitions(): Observable>> { + return observableOf(createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), []))); + }, +} + /** * Create a generic test for an item-page-fields component using a mockItem and the type of component * @param {Item} mockItem The item to use for testing. The item needs to contain just the metadata necessary to @@ -128,7 +142,8 @@ export function getItemPageFieldsTest(mockItem: Item, component) { { provide: RouteService, useValue: mockRouteService }, { provide: AuthorizationDataService, useValue: authorizationService }, { provide: ResearcherProfileDataService, useValue: {} }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub }, + { provide: BrowseService, useValue: browseServiceStub } ], schemas: [NO_ERRORS_SCHEMA] @@ -447,7 +462,8 @@ describe('ItemComponent', () => { { provide: SearchService, useValue: {} }, { provide: RouteService, useValue: mockRouteService }, { provide: AuthorizationDataService, useValue: {} }, - { provide: ResearcherProfileDataService, useValue: {} } + { provide: ResearcherProfileDataService, useValue: {} }, + { provide: BrowseService, useValue: browseServiceStub } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ItemComponent, { diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.spec.ts b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.spec.ts index 4b8d581d75..f085400cb9 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.spec.ts +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.spec.ts @@ -36,9 +36,13 @@ import { VersionDataService } from '../../../../core/data/version-data.service'; import { RouterTestingModule } from '@angular/router/testing'; import { WorkspaceitemDataService } from '../../../../core/submission/workspaceitem-data.service'; import { SearchService } from '../../../../core/shared/search/search.service'; -import { BrowseLinkDataService } from '../../../../core/browse/browse-link-data.service'; -import { browseLinkDataServiceStub } from '../../../../shared/testing/browse-link-data-service.stub'; import { ItemVersionsSharedService } from '../../../versions/item-versions-shared.service'; +import { BrowseDefinitionDataService } from '../../../../core/browse/browse-definition-data.service'; +import { + BrowseDefinitionDataServiceStub, + browseServiceStub, +} from '../../../../shared/testing/browse-definition-data-service.stub'; +import { BrowseService } from '../../../../core/browse/browse.service'; const noMetadata = new MetadataMap(); @@ -93,7 +97,8 @@ describe('UntypedItemComponent', () => { { provide: ItemDataService, useValue: {} }, { provide: ItemVersionsSharedService, useValue: {} }, { provide: RouteService, useValue: mockRouteService }, - { provide: BrowseLinkDataService, useValue: browseLinkDataServiceStub } + { provide: BrowseDefinitionDataService, useValue: BrowseDefinitionDataServiceStub }, + { provide: BrowseService, useValue: browseServiceStub }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(UntypedItemComponent, { diff --git a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts b/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts index fcd82ce678..5b4c5171fc 100644 --- a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts +++ b/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts @@ -21,6 +21,10 @@ import { Version } from '../../../../core/shared/version.model'; import { RouteService } from '../../../../core/services/route.service'; import { TranslateLoaderMock } from '../../../../shared/testing/translate-loader.mock'; import { ItemSharedModule } from '../../../item-shared.module'; +import { + browseServiceStub, +} from '../../../../shared/testing/browse-definition-data-service.stub'; +import { BrowseService } from '../../../../core/browse/browse.service'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), @@ -77,7 +81,8 @@ describe('VersionedItemComponent', () => { { provide: WorkspaceitemDataService, useValue: {} }, { provide: SearchService, useValue: {} }, { provide: ItemDataService, useValue: {} }, - { provide: RouteService, useValue: mockRouteService } + { provide: RouteService, useValue: mockRouteService }, + { provide: BrowseService, useValue: browseServiceStub }, ] }).compileComponents(); versionService = TestBed.inject(VersionDataService); diff --git a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts index f05f7bb566..cfb812a475 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts @@ -3,7 +3,7 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { PlainTextMetadataListElementComponent } from './plain-text-metadata-list-element.component'; import { MetadatumRepresentation } from '../../../../core/shared/metadata-representation/metadatum/metadatum-representation.model'; import { By } from '@angular/platform-browser'; -import { mockData } from '../../../testing/browse-link-data-service.stub'; +import { mockData } from '../../../testing/browse-definition-data-service.stub'; // Render the mock representation with the default mock author browse definition so it is also rendered as a link // without affecting other tests diff --git a/src/app/shared/testing/browse-link-data-service.stub.ts b/src/app/shared/testing/browse-definition-data-service.stub.ts similarity index 77% rename from src/app/shared/testing/browse-link-data-service.stub.ts rename to src/app/shared/testing/browse-definition-data-service.stub.ts index 4deff2bf05..5428947c35 100644 --- a/src/app/shared/testing/browse-link-data-service.stub.ts +++ b/src/app/shared/testing/browse-definition-data-service.stub.ts @@ -36,25 +36,39 @@ export const mockData: BrowseDefinition[] = [ }) ]; +export const browseServiceStub = { + getBrowseDefinitions(): Observable>> { + return observableOf(createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), mockData))); + }, +} + +export const BrowseDefinitionDataServiceStub: any = { -export const browseLinkDataServiceStub: any = { /** * Get all BrowseDefinitions */ - getBrowseLinks(): Observable>> { + findAll(): Observable>> { return observableOf(createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), mockData))); }, + + /** + * Get all BrowseDefinitions with any link configuration + */ + findAllLinked(): Observable>> { + return observableOf(createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), mockData))); + }, + /** * Get the browse URL by providing a list of metadata keys * @param metadatumKey * @param linkPath */ - getBrowseLinkFor(metadataKeys: string[]): Observable { + findByFields(metadataKeys: string[]): Observable { let searchKeyArray: string[] = []; metadataKeys.forEach((metadataKey) => { searchKeyArray = searchKeyArray.concat(BrowseService.toSearchKeyArray(metadataKey)); }); - return this.getBrowseLinks().pipe( + return this.findAllLinked().pipe( getRemoteDataPayload(), getPaginatedListPayload(), map((browseDefinitions: BrowseDefinition[]) => browseDefinitions