mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-08 18:44:14 +00:00
CC License Submission Step 2 - Storing the results - add SubmissionCcLicenceUrl model
This commit is contained in:
15
src/app/core/cache/response.models.ts
vendored
15
src/app/core/cache/response.models.ts
vendored
@@ -29,21 +29,6 @@ export class RestResponse {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A response containing a string.
|
|
||||||
*/
|
|
||||||
export class StringResponse extends RestResponse {
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
public isSuccessful: boolean,
|
|
||||||
public statusCode: number,
|
|
||||||
public statusText: string,
|
|
||||||
public content: string,
|
|
||||||
) {
|
|
||||||
super(isSuccessful, statusCode, statusText);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DSOSuccessResponse extends RestResponse {
|
export class DSOSuccessResponse extends RestResponse {
|
||||||
constructor(
|
constructor(
|
||||||
public resourceSelfLinks: string[],
|
public resourceSelfLinks: string[],
|
||||||
|
@@ -145,9 +145,10 @@ import { Version } from './shared/version.model';
|
|||||||
import { VersionHistory } from './shared/version-history.model';
|
import { VersionHistory } from './shared/version-history.model';
|
||||||
import { WorkflowActionDataService } from './data/workflow-action-data.service';
|
import { WorkflowActionDataService } from './data/workflow-action-data.service';
|
||||||
import { WorkflowAction } from './tasks/models/workflow-action-object.model';
|
import { WorkflowAction } from './tasks/models/workflow-action-object.model';
|
||||||
import { SubmissionCcLicensesDataService } from './data/submission-cc-licenses-data.service';
|
import { SubmissionCcLicenseDataService } from './data/submission-cc-license-data.service';
|
||||||
import { SubmissionCcLicence } from './shared/submission-cc-license.model';
|
import { SubmissionCcLicence } from './shared/submission-cc-license.model';
|
||||||
import { StringResponseParsingService } from './data/string-response-parsing.service';
|
import { SubmissionCcLicenceUrl } from './shared/submission-cc-license-url.model';
|
||||||
|
import { SubmissionCcLicenseUrlDataService } from './data/submission-cc-license-url-data.service';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When not in production, endpoint responses can be mocked for testing purposes
|
* When not in production, endpoint responses can be mocked for testing purposes
|
||||||
@@ -215,10 +216,10 @@ const PROVIDERS = [
|
|||||||
BrowseResponseParsingService,
|
BrowseResponseParsingService,
|
||||||
BrowseEntriesResponseParsingService,
|
BrowseEntriesResponseParsingService,
|
||||||
BrowseItemsResponseParsingService,
|
BrowseItemsResponseParsingService,
|
||||||
StringResponseParsingService,
|
|
||||||
BrowseService,
|
BrowseService,
|
||||||
ConfigResponseParsingService,
|
ConfigResponseParsingService,
|
||||||
SubmissionCcLicensesDataService,
|
SubmissionCcLicenseDataService,
|
||||||
|
SubmissionCcLicenseUrlDataService,
|
||||||
SubmissionDefinitionsConfigService,
|
SubmissionDefinitionsConfigService,
|
||||||
SubmissionFormsConfigService,
|
SubmissionFormsConfigService,
|
||||||
SubmissionRestService,
|
SubmissionRestService,
|
||||||
@@ -302,6 +303,7 @@ export const models =
|
|||||||
WorkflowItem,
|
WorkflowItem,
|
||||||
WorkspaceItem,
|
WorkspaceItem,
|
||||||
SubmissionCcLicence,
|
SubmissionCcLicence,
|
||||||
|
SubmissionCcLicenceUrl,
|
||||||
SubmissionDefinitionsModel,
|
SubmissionDefinitionsModel,
|
||||||
SubmissionFormsModel,
|
SubmissionFormsModel,
|
||||||
SubmissionSectionModel,
|
SubmissionSectionModel,
|
||||||
|
@@ -1,23 +0,0 @@
|
|||||||
import { Injectable } from '@angular/core';
|
|
||||||
import {RestResponse, StringResponse} from '../cache/response.models';
|
|
||||||
import { DSpaceRESTV2Response } from '../dspace-rest-v2/dspace-rest-v2-response.model';
|
|
||||||
import { ResponseParsingService } from './parsing.service';
|
|
||||||
import { RestRequest } from './request.models';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A responseparser that will parse the response body to a string.
|
|
||||||
*/
|
|
||||||
@Injectable()
|
|
||||||
export class StringResponseParsingService implements ResponseParsingService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse the response to a string.
|
|
||||||
*
|
|
||||||
* @param request The request that was sent to the server
|
|
||||||
* @param data The response to parse
|
|
||||||
*/
|
|
||||||
parse(request: RestRequest, data: DSpaceRESTV2Response): RestResponse {
|
|
||||||
const isSuccessful = data.statusCode >= 200 && data.statusCode < 300;
|
|
||||||
return new StringResponse(isSuccessful, data.statusCode, data.statusText, data.payload as undefined as string);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -9,19 +9,20 @@ import { CoreState } from '../core.reducers';
|
|||||||
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
||||||
import { DataService } from './data.service';
|
import { DataService } from './data.service';
|
||||||
import { RequestService } from './request.service';
|
import { RequestService } from './request.service';
|
||||||
import { SUBMISSION_CC_LICENSE } from '../shared/submission-cc-licences.resource-type';
|
import { SUBMISSION_CC_LICENSE } from '../shared/submission-cc-licence.resource-type';
|
||||||
import { Field, Option, SubmissionCcLicence } from '../shared/submission-cc-license.model';
|
import { Field, Option, SubmissionCcLicence } from '../shared/submission-cc-license.model';
|
||||||
import { DefaultChangeAnalyzer } from './default-change-analyzer.service';
|
import { DefaultChangeAnalyzer } from './default-change-analyzer.service';
|
||||||
import { GetRequest } from './request.models';
|
import {
|
||||||
import { configureRequest, getResponseFromEntry } from '../shared/operators';
|
getRemoteDataPayload,
|
||||||
import { map, switchMap, tap } from 'rxjs/operators';
|
getSucceededRemoteData,
|
||||||
|
} from '../shared/operators';
|
||||||
|
import { map, switchMap } from 'rxjs/operators';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { StringResponse } from '../cache/response.models';
|
import { SubmissionCcLicenseUrlDataService } from './submission-cc-license-url-data.service';
|
||||||
import { StringResponseParsingService } from './string-response-parsing.service';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@dataService(SUBMISSION_CC_LICENSE)
|
@dataService(SUBMISSION_CC_LICENSE)
|
||||||
export class SubmissionCcLicensesDataService extends DataService<SubmissionCcLicence> {
|
export class SubmissionCcLicenseDataService extends DataService<SubmissionCcLicence> {
|
||||||
|
|
||||||
protected linkPath = 'submissioncclicenses';
|
protected linkPath = 'submissioncclicenses';
|
||||||
|
|
||||||
@@ -34,6 +35,7 @@ export class SubmissionCcLicensesDataService extends DataService<SubmissionCcLic
|
|||||||
protected rdbService: RemoteDataBuildService,
|
protected rdbService: RemoteDataBuildService,
|
||||||
protected requestService: RequestService,
|
protected requestService: RequestService,
|
||||||
protected store: Store<CoreState>,
|
protected store: Store<CoreState>,
|
||||||
|
protected submissionCcLicenseUrlDataService: SubmissionCcLicenseUrlDataService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
@@ -43,9 +45,7 @@ export class SubmissionCcLicensesDataService extends DataService<SubmissionCcLic
|
|||||||
* @param ccLicense the Creative Commons license type
|
* @param ccLicense the Creative Commons license type
|
||||||
* @param options the selected options of the license fields
|
* @param options the selected options of the license fields
|
||||||
*/
|
*/
|
||||||
getCcLicenseLink(ccLicense: SubmissionCcLicence, options: Map<Field, Option>): Observable<StringResponse> {
|
getCcLicenseLink(ccLicense: SubmissionCcLicence, options: Map<Field, Option>): Observable<string> {
|
||||||
|
|
||||||
const requestId = this.requestService.generateRequestId();
|
|
||||||
|
|
||||||
return this.getSearchByHref(
|
return this.getSearchByHref(
|
||||||
'rightsByQuestions',{
|
'rightsByQuestions',{
|
||||||
@@ -64,18 +64,10 @@ export class SubmissionCcLicensesDataService extends DataService<SubmissionCcLic
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
).pipe(
|
).pipe(
|
||||||
map((endpoint) => new GetRequest(
|
switchMap((href) => this.submissionCcLicenseUrlDataService.findByHref(href)),
|
||||||
requestId,
|
getSucceededRemoteData(),
|
||||||
endpoint,
|
getRemoteDataPayload(),
|
||||||
undefined, {
|
map((response) => response.url),
|
||||||
responseType: 'text',
|
|
||||||
},
|
|
||||||
)),
|
|
||||||
tap((request) => request.getResponseParser = () => StringResponseParsingService),
|
|
||||||
configureRequest(this.requestService),
|
|
||||||
switchMap(() => this.requestService.getByUUID(requestId)),
|
|
||||||
getResponseFromEntry(),
|
|
||||||
map((response) => response as StringResponse),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
34
src/app/core/data/submission-cc-license-url-data.service.ts
Normal file
34
src/app/core/data/submission-cc-license-url-data.service.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Store } from '@ngrx/store';
|
||||||
|
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||||
|
import { dataService } from '../cache/builders/build-decorators';
|
||||||
|
import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service';
|
||||||
|
import { ObjectCacheService } from '../cache/object-cache.service';
|
||||||
|
import { CoreState } from '../core.reducers';
|
||||||
|
import { HALEndpointService } from '../shared/hal-endpoint.service';
|
||||||
|
import { DataService } from './data.service';
|
||||||
|
import { RequestService } from './request.service';
|
||||||
|
import { DefaultChangeAnalyzer } from './default-change-analyzer.service';
|
||||||
|
import { SubmissionCcLicenceUrl } from '../shared/submission-cc-license-url.model';
|
||||||
|
import { SUBMISSION_CC_LICENSE_URL } from '../shared/submission-cc-licence-link.resource-type';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
@dataService(SUBMISSION_CC_LICENSE_URL)
|
||||||
|
export class SubmissionCcLicenseUrlDataService extends DataService<SubmissionCcLicenceUrl> {
|
||||||
|
|
||||||
|
protected linkPath = 'submissioncclicenses';
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
protected comparator: DefaultChangeAnalyzer<SubmissionCcLicenceUrl>,
|
||||||
|
protected halService: HALEndpointService,
|
||||||
|
protected http: HttpClient,
|
||||||
|
protected notificationsService: NotificationsService,
|
||||||
|
protected objectCache: ObjectCacheService,
|
||||||
|
protected rdbService: RemoteDataBuildService,
|
||||||
|
protected requestService: RequestService,
|
||||||
|
protected store: Store<CoreState>,
|
||||||
|
) {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
import { ResourceType } from './resource-type';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The resource type for License
|
||||||
|
*
|
||||||
|
* Needs to be in a separate file to prevent circular
|
||||||
|
* dependencies in webpack.
|
||||||
|
*/
|
||||||
|
export const SUBMISSION_CC_LICENSE_URL = new ResourceType('submissioncclicenseUrl');
|
23
src/app/core/shared/submission-cc-license-url.model.ts
Normal file
23
src/app/core/shared/submission-cc-license-url.model.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { autoserialize, inheritSerialization } from 'cerialize';
|
||||||
|
import { typedObject } from '../cache/builders/build-decorators';
|
||||||
|
import { excludeFromEquals } from '../utilities/equals.decorators';
|
||||||
|
import { ResourceType } from './resource-type';
|
||||||
|
import { HALResource } from './hal-resource.model';
|
||||||
|
import { SUBMISSION_CC_LICENSE_URL } from './submission-cc-licence-link.resource-type';
|
||||||
|
|
||||||
|
@typedObject
|
||||||
|
@inheritSerialization(HALResource)
|
||||||
|
export class SubmissionCcLicenceUrl extends HALResource {
|
||||||
|
|
||||||
|
static type = SUBMISSION_CC_LICENSE_URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The object type
|
||||||
|
*/
|
||||||
|
@excludeFromEquals
|
||||||
|
@autoserialize
|
||||||
|
type: ResourceType;
|
||||||
|
|
||||||
|
@autoserialize
|
||||||
|
url: string;
|
||||||
|
}
|
@@ -3,7 +3,7 @@ import { typedObject } from '../cache/builders/build-decorators';
|
|||||||
import { excludeFromEquals } from '../utilities/equals.decorators';
|
import { excludeFromEquals } from '../utilities/equals.decorators';
|
||||||
import { ResourceType } from './resource-type';
|
import { ResourceType } from './resource-type';
|
||||||
import { HALResource } from './hal-resource.model';
|
import { HALResource } from './hal-resource.model';
|
||||||
import { SUBMISSION_CC_LICENSE } from './submission-cc-licences.resource-type';
|
import { SUBMISSION_CC_LICENSE } from './submission-cc-licence.resource-type';
|
||||||
|
|
||||||
@typedObject
|
@typedObject
|
||||||
@inheritSerialization(HALResource)
|
@inheritSerialization(HALResource)
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { SubmissionSectionCcLicensesComponent } from './submission-section-cc-licenses.component';
|
import { SubmissionSectionCcLicensesComponent } from './submission-section-cc-licenses.component';
|
||||||
import { SUBMISSION_CC_LICENSE } from '../../core/shared/submission-cc-licences.resource-type';
|
import { SUBMISSION_CC_LICENSE } from '../../core/shared/submission-cc-licence.resource-type';
|
||||||
import { of as observableOf } from 'rxjs';
|
import { of as observableOf } from 'rxjs';
|
||||||
import { SubmissionCcLicensesDataService } from '../../core/data/submission-cc-licenses-data.service';
|
import { SubmissionCcLicenseDataService } from '../../core/data/submission-cc-license-data.service';
|
||||||
import { DebugElement } from '@angular/core';
|
import { DebugElement } from '@angular/core';
|
||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { SharedModule } from '../shared.module';
|
import { SharedModule } from '../shared.module';
|
||||||
@@ -16,7 +16,7 @@ import { PaginatedList } from '../../core/data/paginated-list';
|
|||||||
import { SubmissionCcLicence } from '../../core/shared/submission-cc-license.model';
|
import { SubmissionCcLicence } from '../../core/shared/submission-cc-license.model';
|
||||||
import { cold } from 'jasmine-marbles';
|
import { cold } from 'jasmine-marbles';
|
||||||
import { JsonPatchOperationsBuilder } from '../../core/json-patch/builder/json-patch-operations-builder';
|
import { JsonPatchOperationsBuilder } from '../../core/json-patch/builder/json-patch-operations-builder';
|
||||||
import { StringResponse } from '../../core/cache/response.models';
|
import { SubmissionCcLicenseUrlDataService } from '../../core/data/submission-cc-license-url-data.service';
|
||||||
|
|
||||||
describe('SubmissionSectionCcLicensesComponent', () => {
|
describe('SubmissionSectionCcLicensesComponent', () => {
|
||||||
|
|
||||||
@@ -130,7 +130,15 @@ describe('SubmissionSectionCcLicensesComponent', () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const submissionCcLicensesDataService = jasmine.createSpyObj('submissionCcLicensesDataService', {
|
const submissionCcLicensesDataService = jasmine.createSpyObj('submissionCcLicensesDataService', {
|
||||||
getCcLicenseLink: observableOf(new StringResponse(true, 200, '200', 'test cc license link')),
|
getCcLicenseLink: observableOf(new RemoteData(
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
undefined,
|
||||||
|
{
|
||||||
|
url: 'test cc license link',
|
||||||
|
}
|
||||||
|
)),
|
||||||
findAll: observableOf(new RemoteData(
|
findAll: observableOf(new RemoteData(
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
@@ -141,11 +149,13 @@ describe('SubmissionSectionCcLicensesComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const sectionService = {
|
const sectionService = {
|
||||||
getSectionState: () => observableOf({
|
getSectionState: () => {
|
||||||
data: {}
|
return observableOf({});
|
||||||
}),
|
},
|
||||||
setSectionStatus: () => undefined,
|
setSectionStatus: () => undefined,
|
||||||
updateSectionData: () => undefined,
|
updateSectionData: (submissionId, sectionId, updatedData) => {
|
||||||
|
component.sectionData.data = updatedData;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const operationsBuilder = jasmine.createSpyObj('operationsBuilder', {
|
const operationsBuilder = jasmine.createSpyObj('operationsBuilder', {
|
||||||
@@ -163,7 +173,8 @@ describe('SubmissionSectionCcLicensesComponent', () => {
|
|||||||
SubmissionSectionCcLicensesComponent,
|
SubmissionSectionCcLicensesComponent,
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: SubmissionCcLicensesDataService, useValue: submissionCcLicensesDataService },
|
{ provide: SubmissionCcLicenseDataService, useValue: submissionCcLicensesDataService },
|
||||||
|
{ provide: SubmissionCcLicenseUrlDataService, useValue: {} },
|
||||||
{ provide: SectionsService, useValue: sectionService },
|
{ provide: SectionsService, useValue: sectionService },
|
||||||
{ provide: JsonPatchOperationsBuilder, useValue: operationsBuilder },
|
{ provide: JsonPatchOperationsBuilder, useValue: operationsBuilder },
|
||||||
{ provide: 'collectionIdProvider', useValue: 'test collection id' },
|
{ provide: 'collectionIdProvider', useValue: 'test collection id' },
|
||||||
@@ -212,7 +223,7 @@ describe('SubmissionSectionCcLicensesComponent', () => {
|
|||||||
expect(de.query(By.css('div.test-field-id-2b'))).toBeTruthy();
|
expect(de.query(By.css('div.test-field-id-2b'))).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not display a license link', () => {
|
it('should not display a cc license link', () => {
|
||||||
expect(de.query(By.css('.license-link'))).toBeNull();
|
expect(de.query(By.css('.license-link'))).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -257,10 +268,6 @@ describe('SubmissionSectionCcLicensesComponent', () => {
|
|||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should call the operations builder add method', () => {
|
|
||||||
expect(operationsBuilder.add).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should have section status complete', () => {
|
it('should have section status complete', () => {
|
||||||
expect(component.getSectionStatus()).toBeObservable(cold('(a|)', { a: true }));
|
expect(component.getSectionStatus()).toBeObservable(cold('(a|)', { a: true }));
|
||||||
});
|
});
|
||||||
|
@@ -3,7 +3,7 @@ import { Observable, of as observableOf, Subscription } from 'rxjs';
|
|||||||
import { Field, Option, SubmissionCcLicence } from '../../core/shared/submission-cc-license.model';
|
import { Field, Option, SubmissionCcLicence } from '../../core/shared/submission-cc-license.model';
|
||||||
import { getRemoteDataPayload, getSucceededRemoteData } from '../../core/shared/operators';
|
import { getRemoteDataPayload, getSucceededRemoteData } from '../../core/shared/operators';
|
||||||
import { distinctUntilChanged, filter, map } from 'rxjs/operators';
|
import { distinctUntilChanged, filter, map } from 'rxjs/operators';
|
||||||
import { SubmissionCcLicensesDataService } from '../../core/data/submission-cc-licenses-data.service';
|
import { SubmissionCcLicenseDataService } from '../../core/data/submission-cc-license-data.service';
|
||||||
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { renderSectionFor } from '../../submission/sections/sections-decorator';
|
import { renderSectionFor } from '../../submission/sections/sections-decorator';
|
||||||
import { SectionsType } from '../../submission/sections/sections-type';
|
import { SectionsType } from '../../submission/sections/sections-type';
|
||||||
@@ -79,7 +79,7 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent
|
|||||||
constructor(
|
constructor(
|
||||||
protected modalService: NgbModal,
|
protected modalService: NgbModal,
|
||||||
protected sectionService: SectionsService,
|
protected sectionService: SectionsService,
|
||||||
protected submissionCcLicensesDataService: SubmissionCcLicensesDataService,
|
protected submissionCcLicensesDataService: SubmissionCcLicenseDataService,
|
||||||
protected operationsBuilder: JsonPatchOperationsBuilder,
|
protected operationsBuilder: JsonPatchOperationsBuilder,
|
||||||
@Inject('collectionIdProvider') public injectedCollectionId: string,
|
@Inject('collectionIdProvider') public injectedCollectionId: string,
|
||||||
@Inject('sectionDataProvider') public injectedSectionData: SectionDataObject,
|
@Inject('sectionDataProvider') public injectedSectionData: SectionDataObject,
|
||||||
@@ -185,8 +185,6 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent
|
|||||||
new Map(selectedCcLicense.fields.map(
|
new Map(selectedCcLicense.fields.map(
|
||||||
(field) => [field, this.getSelectedOption(selectedCcLicense, field)]
|
(field) => [field, this.getSelectedOption(selectedCcLicense, field)]
|
||||||
)),
|
)),
|
||||||
).pipe(
|
|
||||||
map((response) => response.content),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user