Skip to content

Commit ceca3bf

Browse files
authored
Merge pull request DSpace#2875 from alexandrevryghem/created-metadata-service-for-metadata-operations_contribute-main
Moved MetadataValue methods to separate service
2 parents b406e71 + 36e5617 commit ceca3bf

22 files changed

Lines changed: 1148 additions & 1171 deletions

src/app/app.component.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { BreadcrumbsService } from './breadcrumbs/breadcrumbs.service';
2929
import { authReducer } from './core/auth/auth.reducer';
3030
import { AuthService } from './core/auth/auth.service';
3131
import { LocaleService } from './core/locale/locale.service';
32-
import { MetadataService } from './core/metadata/metadata.service';
32+
import { HeadTagService } from './core/metadata/head-tag.service';
3333
import { RouteService } from './core/services/route.service';
3434
import {
3535
NativeWindowRef,
@@ -42,7 +42,7 @@ import { MenuService } from './shared/menu/menu.service';
4242
import { MockActivatedRoute } from './shared/mocks/active-router.mock';
4343
import { AngularticsProviderMock } from './shared/mocks/angulartics-provider.service.mock';
4444
import { AuthServiceMock } from './shared/mocks/auth.service.mock';
45-
import { MetadataServiceMock } from './shared/mocks/metadata-service.mock';
45+
import { HeadTagServiceMock } from './shared/mocks/head-tag-service.mock';
4646
import { RouterMock } from './shared/mocks/router.mock';
4747
import { getMockThemeService } from './shared/mocks/theme-service.mock';
4848
import { TranslateLoaderMock } from './shared/mocks/translate-loader.mock';
@@ -87,7 +87,7 @@ describe('App component', () => {
8787
],
8888
providers: [
8989
{ provide: NativeWindowService, useValue: new NativeWindowRef() },
90-
{ provide: MetadataService, useValue: new MetadataServiceMock() },
90+
{ provide: HeadTagService, useValue: new HeadTagServiceMock() },
9191
{ provide: Angulartics2DSpace, useValue: new AngularticsProviderMock() },
9292
{ provide: AuthService, useValue: new AuthServiceMock() },
9393
{ provide: Router, useValue: new RouterMock() },

src/app/core/data/relationship-data.service.spec.ts

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
import { TestBed } from '@angular/core/testing';
2+
import { Store } from '@ngrx/store';
3+
import { provideMockStore } from '@ngrx/store/testing';
14
import { of as observableOf } from 'rxjs';
25

6+
import { PAGINATED_RELATIONS_TO_ITEMS_OPERATOR } from '../../item-page/simple/item-types/shared/item-relationships-utils';
37
import { getMockRemoteDataBuildServiceHrefMap } from '../../shared/mocks/remote-data-build.service.mock';
48
import { getMockRequestService } from '../../shared/mocks/request.service.mock';
59
import {
@@ -11,7 +15,9 @@ import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-servic
1115
import { ObjectCacheServiceStub } from '../../shared/testing/object-cache-service.stub';
1216
import { createPaginatedList } from '../../shared/testing/utils.test';
1317
import { followLink } from '../../shared/utils/follow-link-config.model';
18+
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
1419
import { ObjectCacheService } from '../cache/object-cache.service';
20+
import { HALEndpointService } from '../shared/hal-endpoint.service';
1521
import { Item } from '../shared/item.model';
1622
import { Relationship } from '../shared/item-relationships/relationship.model';
1723
import { RelationshipType } from '../shared/item-relationships/relationship-type.model';
@@ -20,6 +26,7 @@ import { MetadataRepresentationType } from '../shared/metadata-representation/me
2026
import { PageInfo } from '../shared/page-info.model';
2127
import { testSearchDataImplementation } from './base/search-data.spec';
2228
import { FindListOptions } from './find-list-options.model';
29+
import { ItemDataService } from './item-data.service';
2330
import { buildPaginatedList } from './paginated-list.model';
2431
import { RelationshipDataService } from './relationship-data.service';
2532
import { DeleteRequest } from './request.models';
@@ -123,18 +130,6 @@ describe('RelationshipDataService', () => {
123130
findByHref: createSuccessfulRemoteDataObject$(relatedItems[0]),
124131
});
125132

126-
function initTestService() {
127-
return new RelationshipDataService(
128-
requestService,
129-
rdbService,
130-
halService,
131-
objectCache as ObjectCacheService,
132-
itemService,
133-
null,
134-
jasmine.createSpy('paginatedRelationsToItems').and.returnValue((v) => v),
135-
);
136-
}
137-
138133
const getRequestEntry$ = (successful: boolean) => {
139134
return observableOf({
140135
response: { isSuccessful: successful, payload: relationships } as any,
@@ -143,11 +138,25 @@ describe('RelationshipDataService', () => {
143138

144139
beforeEach(() => {
145140
requestService = getMockRequestService(getRequestEntry$(true));
146-
service = initTestService();
141+
142+
TestBed.configureTestingModule({
143+
providers: [
144+
{ provide: RequestService, useValue: requestService },
145+
{ provide: RemoteDataBuildService, useValue: rdbService },
146+
{ provide: HALEndpointService, useValue: halService },
147+
{ provide: ObjectCacheService, useValue: objectCache },
148+
{ provide: ItemDataService, useValue: itemService },
149+
{ provide: RequestService, useValue: requestService },
150+
{ provide: PAGINATED_RELATIONS_TO_ITEMS_OPERATOR, useValue: jasmine.createSpy('paginatedRelationsToItems').and.returnValue((v) => v) },
151+
{ provide: Store, useValue: provideMockStore() },
152+
RelationshipDataService,
153+
],
154+
});
155+
service = TestBed.inject(RelationshipDataService);
147156
});
148157

149158
describe('composition', () => {
150-
const initService = () => new RelationshipDataService(null, null, null, null, null, null, null);
159+
const initService = () => new RelationshipDataService(null, null, null, null, null, null, null, null);
151160

152161
testSearchDataImplementation(initService);
153162
});

src/app/core/data/relationship-data.service.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv
5454
import { RequestParam } from '../cache/models/request-param.model';
5555
import { ObjectCacheService } from '../cache/object-cache.service';
5656
import { HttpOptions } from '../dspace-rest/dspace-rest.service';
57+
import { MetadataService } from '../metadata/metadata.service';
5758
import { DSpaceObject } from '../shared/dspace-object.model';
5859
import { HALEndpointService } from '../shared/hal-endpoint.service';
5960
import { Item } from '../shared/item.model';
@@ -128,6 +129,7 @@ export class RelationshipDataService extends IdentifiableDataService<Relationshi
128129
protected rdbService: RemoteDataBuildService,
129130
protected halService: HALEndpointService,
130131
protected objectCache: ObjectCacheService,
132+
protected metadataService: MetadataService,
131133
protected itemService: ItemDataService,
132134
protected appStore: Store<AppState>,
133135
@Inject(PAGINATED_RELATIONS_TO_ITEMS_OPERATOR) private paginatedRelationsToItems: (thisId: string) => (source: Observable<RemoteData<PaginatedList<Relationship>>>) => Observable<RemoteData<PaginatedList<Item>>>,
@@ -602,8 +604,8 @@ export class RelationshipDataService extends IdentifiableDataService<Relationshi
602604
* @param itemType The type of item this metadata value represents (will only be used when no related item can be found, as a fallback)
603605
*/
604606
resolveMetadataRepresentation(metadatum: MetadataValue, parentItem: DSpaceObject, itemType: string): Observable<MetadataRepresentation> {
605-
if (metadatum.isVirtual) {
606-
return this.findById(metadatum.virtualValue, true, false, followLink('leftItem'), followLink('rightItem')).pipe(
607+
if (this.metadataService.isVirtual(metadatum)) {
608+
return this.findById(this.metadataService.virtualValue(metadatum), true, false, followLink('leftItem'), followLink('rightItem')).pipe(
607609
getFirstSucceededRemoteData(),
608610
switchMap((relRD: RemoteData<Relationship>) =>
609611
observableCombineLatest(relRD.payload.leftItem, relRD.payload.rightItem).pipe(

0 commit comments

Comments
 (0)