[TLC-249] Larger refactor to field, item components for browse links

This commit is contained in:
Kim Shepherd
2023-01-26 14:47:35 +13:00
parent 2b1b2ef4cb
commit bdda84f884
18 changed files with 139 additions and 177 deletions

View File

@@ -50,7 +50,7 @@ export class BrowseDefinitionDataService extends IdentifiableDataService<BrowseD
protected halService: HALEndpointService,
) {
super('browses', requestService, rdbService, objectCache, halService);
this.searchData = new SearchDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive);
this.findAllData = new FindAllDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive);
}
@@ -126,34 +126,52 @@ export class BrowseDefinitionDataService extends IdentifiableDataService<BrowseD
);
}
findAllLinked(
useCachedVersionIfAvailable = true,
reRequestOnStale = true,
...linksToFollow: FollowLinkConfig<BrowseDefinition>[]
): Observable<RemoteData<BrowseDefinition>> {
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<BrowseDefinition> {
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<BrowseDefinition>[]
): Observable<RemoteData<BrowseDefinition>> {
const searchParams = [];
searchParams.push(new RequestParam('fields', fields));
const hrefObs = this.getSearchByHref(
'byFields',
{ searchParams },
...linksToFollow
);
return this.findByHref(
hrefObs,
useCachedVersionIfAvailable,
reRequestOnStale,
...linksToFollow,
);
}

View File

@@ -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 });
});
});
});

View File

@@ -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.<n>)
*/
@Injectable()
export class BrowseLinkDataService extends IdentifiableDataService<BrowseDefinition> {
private findAllData: FindAllDataImpl<BrowseDefinition>;
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<RemoteData<PaginatedList<BrowseDefinition>>> {
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<BrowseDefinition> {
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()
);
}
}

View File

@@ -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,

View File

@@ -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<JournalComponent>;
@@ -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]

View File

@@ -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<ItemPageAbstractFieldComponent>;
@@ -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]

View File

@@ -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<ItemPageAuthorFieldComponent>;
@@ -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]

View File

@@ -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<ItemPageDateFieldComponent>;
@@ -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]

View File

@@ -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<GenericItemPageFieldComponent>;
@@ -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]

View File

@@ -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<ItemPageFieldComponent>;
@@ -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]

View File

@@ -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.<n>)
*/
get browseDefinition(): Observable<BrowseDefinition> {
return this.browseLinkDataService.getBrowseLinkFor(this.fields).pipe(
map((def) => def));
return this.browseDefinitionDataService.findByFields(this.fields).pipe(
getRemoteDataPayload(),
map((def) => def)
);
}
}

View File

@@ -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<ItemPageUriFieldComponent>;
@@ -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]

View File

@@ -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]

View File

@@ -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<RemoteData<PaginatedList<BrowseDefinition>>> {
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, {

View File

@@ -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, {

View File

@@ -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);

View File

@@ -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

View File

@@ -36,25 +36,39 @@ export const mockData: BrowseDefinition[] = [
})
];
export const browseServiceStub = {
getBrowseDefinitions(): Observable<RemoteData<PaginatedList<BrowseDefinition>>> {
return observableOf(createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), mockData)));
},
}
export const BrowseDefinitionDataServiceStub: any = {
export const browseLinkDataServiceStub: any = {
/**
* Get all BrowseDefinitions
*/
getBrowseLinks(): Observable<RemoteData<PaginatedList<BrowseDefinition>>> {
findAll(): Observable<RemoteData<PaginatedList<BrowseDefinition>>> {
return observableOf(createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), mockData)));
},
/**
* Get all BrowseDefinitions with any link configuration
*/
findAllLinked(): Observable<RemoteData<PaginatedList<BrowseDefinition>>> {
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<BrowseDefinition> {
findByFields(metadataKeys: string[]): Observable<BrowseDefinition> {
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