Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing ResourcePolicyService #427

Merged
merged 5 commits into from Jul 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/app/core/core.module.ts
Expand Up @@ -60,6 +60,7 @@ import { HALEndpointService } from './shared/hal-endpoint.service';
import { FacetValueResponseParsingService } from './data/facet-value-response-parsing.service';
import { FacetValueMapResponseParsingService } from './data/facet-value-map-response-parsing.service';
import { FacetConfigResponseParsingService } from './data/facet-config-response-parsing.service';
import { ResourcePolicyService } from './data/resource-policy.service';
import { RegistryService } from './registry/registry.service';
import { RegistryMetadataschemasResponseParsingService } from './data/registry-metadataschemas-response-parsing.service';
import { RegistryMetadatafieldsResponseParsingService } from './data/registry-metadatafields-response-parsing.service';
Expand Down Expand Up @@ -125,6 +126,7 @@ const PROVIDERS = [
MetadataService,
ObjectCacheService,
PaginationComponentOptions,
ResourcePolicyService,
RegistryService,
NormalizedObjectBuildService,
RemoteDataBuildService,
Expand Down
42 changes: 27 additions & 15 deletions src/app/core/data/metadata-schema-data.service.ts
Expand Up @@ -13,15 +13,38 @@ import { MetadataSchema } from '../metadata/metadataschema.model';
import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';
import { HttpClient } from '@angular/common/http';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { ChangeAnalyzer } from './change-analyzer';
import { DefaultChangeAnalyzer } from './default-change-analyzer.service';

/* tslint:disable:max-classes-per-file */
class DataServiceImpl extends DataService<MetadataSchema> {
protected linkPath = 'metadataschemas';
protected forceBypassCache = false;

constructor(
protected requestService: RequestService,
protected rdbService: RemoteDataBuildService,
protected dataBuildService: NormalizedObjectBuildService,
protected store: Store<CoreState>,
protected objectCache: ObjectCacheService,
protected halService: HALEndpointService,
protected notificationsService: NotificationsService,
protected http: HttpClient,
protected comparator: ChangeAnalyzer<MetadataSchema>) {
super();
}

getBrowseEndpoint(options: FindAllOptions = {}, linkPath: string = this.linkPath): Observable<string> {
return this.halService.getEndpoint(linkPath);
}
}

/**
* A service responsible for fetching/sending data from/to the REST API on the metadataschemas endpoint
*/
@Injectable()
export class MetadataSchemaDataService extends DataService<MetadataSchema> {
protected linkPath = 'metadataschemas';
protected forceBypassCache = false;
export class MetadataSchemaDataService {
private dataService: DataServiceImpl;

constructor(
protected requestService: RequestService,
Expand All @@ -33,17 +56,6 @@ export class MetadataSchemaDataService extends DataService<MetadataSchema> {
protected dataBuildService: NormalizedObjectBuildService,
protected http: HttpClient,
protected notificationsService: NotificationsService) {
super();
}

/**
* Get the endpoint for browsing metadataschemas
* @param {FindAllOptions} options
* @returns {Observable<string>}
*/
public getBrowseEndpoint(options: FindAllOptions = {}, linkPath: string = this.linkPath): Observable<string> {

return null;
this.dataService = new DataServiceImpl(requestService, rdbService, dataBuildService, null, objectCache, halService, notificationsService, http, comparator);
}

}
77 changes: 77 additions & 0 deletions src/app/core/data/resource-policy.service.spec.ts
@@ -0,0 +1,77 @@
import { cold, getTestScheduler } from 'jasmine-marbles';
import { TestScheduler } from 'rxjs/testing';
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { ResourcePolicy } from '../shared/resource-policy.model';
import { HALEndpointService } from '../shared/hal-endpoint.service';
import { GetRequest } from './request.models';
import { RequestService } from './request.service';
import { ResourcePolicyService } from './resource-policy.service';
import { ObjectCacheService } from '../cache/object-cache.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { HttpClient } from '@angular/common/http';
import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';

describe('ResourcePolicyService', () => {
let scheduler: TestScheduler;
let service: ResourcePolicyService;
let requestService: RequestService;
let rdbService: RemoteDataBuildService;
let objectCache: ObjectCacheService;
const testObject = {
uuid: '664184ee-b254-45e8-970d-220e5ccc060b'
} as ResourcePolicy;
const requestURL = `https://rest.api/rest/api/resourcepolicies/${testObject.uuid}`;
const requestUUID = '8b3c613a-5a4b-438b-9686-be1d5b4a1c5a';

beforeEach(() => {
scheduler = getTestScheduler();

requestService = jasmine.createSpyObj('requestService', {
generateRequestId: requestUUID,
configure: true
});
rdbService = jasmine.createSpyObj('rdbService', {
buildSingle: cold('a', {
a: {
payload: testObject
}
})
});
objectCache = {} as ObjectCacheService;
const halService = {} as HALEndpointService;
const notificationsService = {} as NotificationsService;
const http = {} as HttpClient;
const comparator = {} as any;
const dataBuildService = {} as NormalizedObjectBuildService;

service = new ResourcePolicyService(
requestService,
rdbService,
dataBuildService,
objectCache,
halService,
notificationsService,
http,
comparator
)
});

describe('findByHref', () => {
it('should configure the proper GetRequest', () => {
scheduler.schedule(() => service.findByHref(requestURL));
scheduler.flush();

expect(requestService.configure).toHaveBeenCalledWith(new GetRequest(requestUUID, requestURL, null), false);
});

it('should return a RemoteData<ResourcePolicy> for the object with the given URL', () => {
const result = service.findByHref(requestURL);
const expected = cold('a', {
a: {
payload: testObject
}
});
expect(result).toBeObservable(expected);
});
});
});
67 changes: 67 additions & 0 deletions src/app/core/data/resource-policy.service.ts
@@ -0,0 +1,67 @@
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';

import { DataService } from '../data/data.service';
import { RequestService } from '../data/request.service';
import { FindAllOptions } from '../data/request.models';
import { HALEndpointService } from '../shared/hal-endpoint.service';
import { ResourcePolicy } from '../shared/resource-policy.model';
import { RemoteData } from '../data/remote-data';
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
import { CoreState } from '../core.reducers';
import { ObjectCacheService } from '../cache/object-cache.service';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { NormalizedObjectBuildService } from '../cache/builders/normalized-object-build.service';
import { ChangeAnalyzer } from './change-analyzer';
import { DefaultChangeAnalyzer } from '../data/default-change-analyzer.service';
import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service';

/* tslint:disable:max-classes-per-file */
class DataServiceImpl extends DataService<ResourcePolicy> {
protected linkPath = 'resourcepolicies';
protected forceBypassCache = false;

constructor(
protected requestService: RequestService,
protected rdbService: RemoteDataBuildService,
protected dataBuildService: NormalizedObjectBuildService,
protected store: Store<CoreState>,
protected objectCache: ObjectCacheService,
protected halService: HALEndpointService,
protected notificationsService: NotificationsService,
protected http: HttpClient,
protected comparator: ChangeAnalyzer<ResourcePolicy>) {
super();
}

getBrowseEndpoint(options: FindAllOptions = {}, linkPath: string = this.linkPath): Observable<string> {
return this.halService.getEndpoint(linkPath);
}
}

/**
* A service responsible for fetching/sending data from/to the REST API on the resourcepolicies endpoint
*/
@Injectable()
export class ResourcePolicyService {
private dataService: DataServiceImpl;

constructor(
protected requestService: RequestService,
protected rdbService: RemoteDataBuildService,
protected dataBuildService: NormalizedObjectBuildService,
protected objectCache: ObjectCacheService,
protected halService: HALEndpointService,
protected notificationsService: NotificationsService,
protected http: HttpClient,
protected comparator: DefaultChangeAnalyzer<ResourcePolicy>) {
this.dataService = new DataServiceImpl(requestService, rdbService, dataBuildService, null, objectCache, halService, notificationsService, http, comparator);
}

findByHref(href: string, options?: HttpOptions): Observable<RemoteData<ResourcePolicy>> {
return this.dataService.findByHref(href, options);
}
}
Expand Up @@ -30,6 +30,7 @@ import { GroupEpersonService } from '../../../core/eperson/group-eperson.service
import { cold, hot } from 'jasmine-marbles';
import { Collection } from '../../../core/shared/collection.model';
import { ResourcePolicy } from '../../../core/shared/resource-policy.model';
import { ResourcePolicyService } from '../../../core/data/resource-policy.service';
import { RemoteData } from '../../../core/data/remote-data';
import { ConfigData } from '../../../core/config/config-data';
import { PageInfo } from '../../../core/shared/page-info.model';
Expand All @@ -47,8 +48,7 @@ function getMockSubmissionUploadsConfigService(): SubmissionFormsConfigService {

function getMockCollectionDataService(): CollectionDataService {
return jasmine.createSpyObj('CollectionDataService', {
findById: jasmine.createSpy('findById'),
findByHref: jasmine.createSpy('findByHref')
findById: jasmine.createSpy('findById')
});
}

Expand All @@ -59,6 +59,12 @@ function getMockGroupEpersonService(): GroupEpersonService {
});
}

function getMockResourcePolicyService(): ResourcePolicyService {
return jasmine.createSpyObj('ResourcePolicyService', {
findByHref: jasmine.createSpy('findByHref')
});
}

const sectionObject: SectionDataObject = {
config: 'https://dspace7.4science.it/or2018/api/config/submissionforms/upload',
mandatory: true,
Expand All @@ -80,6 +86,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
let sectionsServiceStub: SectionsServiceStub;
let collectionDataService: any;
let groupService: any;
let resourcePolicyService: any;
let uploadsConfigService: any;
let bitstreamService: any;

Expand Down Expand Up @@ -120,6 +127,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
providers: [
{ provide: CollectionDataService, useValue: getMockCollectionDataService() },
{ provide: GroupEpersonService, useValue: getMockGroupEpersonService() },
{ provide: ResourcePolicyService, useValue: getMockResourcePolicyService() },
{ provide: SubmissionUploadsConfigService, useValue: getMockSubmissionUploadsConfigService() },
{ provide: SectionsService, useClass: SectionsServiceStub },
{ provide: SubmissionService, useClass: SubmissionServiceStub },
Expand Down Expand Up @@ -166,6 +174,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
sectionsServiceStub = TestBed.get(SectionsService);
collectionDataService = TestBed.get(CollectionDataService);
groupService = TestBed.get(GroupEpersonService);
resourcePolicyService = TestBed.get(ResourcePolicyService);
uploadsConfigService = TestBed.get(SubmissionUploadsConfigService);
bitstreamService = TestBed.get(SectionUploadService);
});
Expand All @@ -184,7 +193,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
new RemoteData(false, false, true,
undefined, mockCollection)));

collectionDataService.findByHref.and.returnValue(observableOf(
resourcePolicyService.findByHref.and.returnValue(observableOf(
new RemoteData(false, false, true,
undefined, mockDefaultAccessCondition)
));
Expand Down Expand Up @@ -230,7 +239,7 @@ describe('SubmissionSectionUploadComponent test suite', () => {
new RemoteData(false, false, true,
undefined, mockCollection)));

collectionDataService.findByHref.and.returnValue(observableOf(
resourcePolicyService.findByHref.and.returnValue(observableOf(
new RemoteData(false, false, true,
undefined, mockDefaultAccessCondition)
));
Expand Down
Expand Up @@ -8,6 +8,7 @@ import { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shar
import { SectionUploadService } from './section-upload.service';
import { CollectionDataService } from '../../../core/data/collection-data.service';
import { GroupEpersonService } from '../../../core/eperson/group-eperson.service';
import { ResourcePolicyService } from '../../../core/data/resource-policy.service';
import { SubmissionUploadsConfigService } from '../../../core/config/submission-uploads-config.service';
import { SubmissionUploadsModel } from '../../../core/config/models/config-submission-uploads.model';
import { SubmissionFormsModel } from '../../../core/config/models/config-submission-forms.model';
Expand Down Expand Up @@ -116,6 +117,7 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
* @param {ChangeDetectorRef} changeDetectorRef
* @param {CollectionDataService} collectionDataService
* @param {GroupEpersonService} groupService
* @param {ResourcePolicyService} resourcePolicyService
* @param {SectionsService} sectionService
* @param {SubmissionService} submissionService
* @param {SubmissionUploadsConfigService} uploadsConfigService
Expand All @@ -126,6 +128,7 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
private changeDetectorRef: ChangeDetectorRef,
private collectionDataService: CollectionDataService,
private groupService: GroupEpersonService,
private resourcePolicyService: ResourcePolicyService,
protected sectionService: SectionsService,
private submissionService: SubmissionService,
private uploadsConfigService: SubmissionUploadsConfigService,
Expand Down Expand Up @@ -155,7 +158,7 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
find((rd: RemoteData<Collection>) => isNotUndefined((rd.payload))),
tap((collectionRemoteData: RemoteData<Collection>) => this.collectionName = collectionRemoteData.payload.name),
flatMap((collectionRemoteData: RemoteData<Collection>) => {
return this.collectionDataService.findByHref(
return this.resourcePolicyService.findByHref(
(collectionRemoteData.payload as any)._links.defaultAccessConditions
);
}),
Expand Down