mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-10 19:43:04 +00:00
[TLC-249] Larger refactor to field, item components for browse links
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -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 });
|
||||
});
|
||||
});
|
||||
});
|
@@ -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()
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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]
|
||||
|
@@ -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]
|
||||
|
@@ -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]
|
||||
|
@@ -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]
|
||||
|
@@ -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]
|
||||
|
@@ -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]
|
||||
|
@@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -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]
|
||||
|
@@ -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]
|
||||
|
@@ -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, {
|
||||
|
@@ -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, {
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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
|
Reference in New Issue
Block a user