Skip to content

Commit

Permalink
migration2clarin7/notice-step-is-missing (#159)
Browse files Browse the repository at this point in the history
* Added a new empty notice step.

* Set up Notice Step body.

* Created a test for the new step

* Beautify code

* Added integration tests for the Notice Step

* Changed dump for test environment.

---------

Co-authored-by: MilanMajchrák <milan.majchak@dataquest.sk>
  • Loading branch information
milanmajchrak and MilanMajchrák committed Jun 19, 2024
1 parent 5781829 commit e85a2b9
Show file tree
Hide file tree
Showing 8 changed files with 220 additions and 2 deletions.
2 changes: 2 additions & 0 deletions cypress/support/e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ export const TEST_SEARCH_TERM = Cypress.env('DSPACE_TEST_SEARCH_TERM') || 'test'
// Collection used for submission tests
export const TEST_SUBMIT_COLLECTION_NAME = Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_NAME') || 'Sample Collection';
export const TEST_SUBMIT_COLLECTION_UUID = Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID') || '9d8334e9-25d3-4a67-9cea-3dffdef80144';

export const TEST_SUBMIT_CLARIAH_COLLECTION_UUID = Cypress.env('DSPACE_TEST_SUBMIT_CLARIAH_COLLECTION_UUID') || '7eb3562b-27f5-445f-8303-db771969cbff';
export const TEST_SUBMIT_USER = Cypress.env('DSPACE_TEST_SUBMIT_USER') || 'dspacedemo+submit@gmail.com';
export const TEST_SUBMIT_USER_PASSWORD = Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD') || 'dspace';

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div class="container-fluid">
<span>
{{'submission.sections.clarin-notice.message.0' | translate}}{{collectionName | async}}{{'submission.sections.clarin-notice.message.1' | translate}}
<a class="helpdesk-tolink" [href]="'mailto:'+(helpDesk$ | async)?.payload?.values[0]">
{{'submission.sections.clarin-notice.message.2' | translate}}.
</a>
</span>
</div>
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { SubmissionSectionClarinNoticeComponent } from './clarin-notice.component';
import { mockSubmissionCollectionId, mockSubmissionId } from '../../../shared/mocks/submission.mock';
import { Collection } from '../../../core/shared/collection.model';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
import { License } from '../../../core/shared/license.model';
import { SectionDataObject } from '../models/section-data.model';
import { SectionsType } from '../sections-type';
import { SectionsServiceStub } from '../../../shared/testing/sections-service.stub';
import { BrowserModule } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { TranslateModule } from '@ngx-translate/core';
import { FormComponent } from '../../../shared/form/form.component';
import { CollectionDataService } from '../../../core/data/collection-data.service';
import { SectionsService } from '../sections.service';
import { ConfigurationDataService } from '../../../core/data/configuration-data.service';
import { ChangeDetectorRef, Component, NO_ERRORS_SCHEMA } from '@angular/core';
import { FormBuilderService } from '../../../shared/form/builder/form-builder.service';
import { SubmissionSectionLicenseComponent } from '../license/section-license.component';
import { of } from 'rxjs';
import { DSONameService } from '../../../core/breadcrumbs/dso-name.service';
import { DSONameServiceMock } from '../../../shared/mocks/dso-name.service.mock';

const collectionId = mockSubmissionCollectionId;
const licenseText = 'License text';
const helpDeskMail = 'test@mail.com';
const mockCollection = Object.assign(new Collection(), {
name: 'Community 1-Collection 1',
id: collectionId,
metadata: [
{
key: 'dc.title',
language: 'en_US',
value: 'Community 1-Collection 1'
}],
license: createSuccessfulRemoteDataObject$(Object.assign(new License(), { text: licenseText }))
});

const sectionObject: SectionDataObject = {
config: 'https://dspace7.4science.it/or2018/api/config/submissionforms/clarin-notice',
mandatory: true,
data: {
url: null,
acceptanceDate: null,
granted: false
},
errorsToShow: [],
serverValidationErrors: [],
header: 'submit.progressbar.describe.clarin-notice',
id: 'license',
sectionType: SectionsType.clarinNotice
};
describe('SubmissionSectionClarinNoticeComponent', () => {
let component: SubmissionSectionClarinNoticeComponent;
let fixture: ComponentFixture<SubmissionSectionClarinNoticeComponent>;

const sectionsServiceStub: any = new SectionsServiceStub();
const submissionId = mockSubmissionId;

const mockCollectionDataService = jasmine.createSpyObj('CollectionDataService', {
findById: createSuccessfulRemoteDataObject$(mockCollection),
findByHref: jasmine.createSpy('findByHref')
});

const configurationServiceSpy = jasmine.createSpyObj('configurationService', {
findByPropertyName: of(helpDeskMail),
});


beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
BrowserModule,
CommonModule,
FormsModule,
ReactiveFormsModule,
TranslateModule.forRoot()
],
declarations: [
FormComponent,
SubmissionSectionClarinNoticeComponent,
TestComponent
],
providers: [
{ provide: CollectionDataService, useValue: mockCollectionDataService },
{ provide: SectionsService, useValue: sectionsServiceStub },
{ provide: DSONameService, useClass: DSONameServiceMock },
{ provide: ConfigurationDataService, useValue: configurationServiceSpy },
{ provide: 'collectionIdProvider', useValue: collectionId },
{ provide: 'sectionDataProvider', useValue: Object.assign({}, sectionObject) },
{ provide: 'submissionIdProvider', useValue: submissionId },
ChangeDetectorRef,
FormBuilderService,
SubmissionSectionLicenseComponent
],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(SubmissionSectionClarinNoticeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

// declare a test component
@Component({
selector: 'ds-test-cmp',
template: ``
})
class TestComponent {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { Component, Inject } from '@angular/core';
import { renderSectionFor } from '../sections-decorator';
import { SectionsType } from '../sections-type';
import { SectionModelComponent } from '../models/section.model';
import { SectionsService } from '../sections.service';
import { BehaviorSubject, Observable, of, Subscription } from 'rxjs';
import { SectionDataObject } from '../models/section-data.model';
import { hasValue } from '../../../shared/empty.util';
import { RemoteData } from '../../../core/data/remote-data';
import { ConfigurationProperty } from '../../../core/shared/configuration-property.model';
import { HELP_DESK_PROPERTY } from '../../../item-page/tombstone/tombstone.component';
import { ConfigurationDataService } from '../../../core/data/configuration-data.service';
import { Collection } from '../../../core/shared/collection.model';
import { CollectionDataService } from '../../../core/data/collection-data.service';
import { getRemoteDataPayload } from '../../../core/shared/operators';
import { DSONameService } from '../../../core/breadcrumbs/dso-name.service';

@Component({
selector: 'ds-clarin-notice',
templateUrl: './clarin-notice.component.html',
styleUrls: ['./clarin-notice.component.scss']
})
@renderSectionFor(SectionsType.clarinNotice)
export class SubmissionSectionClarinNoticeComponent extends SectionModelComponent {

constructor(
protected sectionService: SectionsService,
private configurationDataService: ConfigurationDataService,
private collectionDataService: CollectionDataService,
private dsoNameService: DSONameService,
@Inject('collectionIdProvider') public injectedCollectionId: string,
@Inject('sectionDataProvider') public injectedSectionData: SectionDataObject,
@Inject('submissionIdProvider') public injectedSubmissionId: string) {
super(injectedCollectionId, injectedSectionData, injectedSubmissionId);
}

/**
* Array to track all subscriptions and unsubscribe them onDestroy
* @type {Array}
*/
protected subs: Subscription[] = [];

/**
* The mail for the help desk is loaded from the server.
*/
helpDesk$: Observable<RemoteData<ConfigurationProperty>>;

/**
* The name of the current collection.
*/
collectionName: BehaviorSubject<string> = new BehaviorSubject<string>('');

ngOnInit(): void {
super.ngOnInit();
}

protected getSectionStatus(): Observable<boolean> {
return of(true);
}

/**
* Unsubscribe from all subscriptions
*/
onSectionDestroy() {
this.subs
.filter((subscription) => hasValue(subscription))
.forEach((subscription) => subscription.unsubscribe());
}

protected onSectionInit(): void {
this.helpDesk$ = this.configurationDataService.findByPropertyName(HELP_DESK_PROPERTY);

this.collectionDataService.findById(this.collectionId)
.pipe(getRemoteDataPayload())
.subscribe((collection: Collection) => {
this.collectionName.next(this.dsoNameService.getName(collection));
});
}
}
2 changes: 2 additions & 0 deletions src/app/submission/sections/sections-type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ export enum SectionsType {
collection = 'collection',
AccessesCondition = 'accessCondition',
clarinLicense = 'clarin-license',

clarinNotice = 'clarin-notice',
}
4 changes: 3 additions & 1 deletion src/app/submission/submission.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import { SubmissionSectionAccessesComponent } from './sections/accesses/section-
import { SubmissionAccessesConfigDataService } from '../core/config/submission-accesses-config-data.service';
import { SectionAccessesService } from './sections/accesses/section-accesses.service';
import {SubmissionSectionClarinLicenseDistributionComponent} from './sections/clarin-license-distribution/clarin-license-distribution.component';
import {SubmissionSectionClarinNoticeComponent} from './sections/clarin-notice/clarin-notice.component';

const ENTRY_COMPONENTS = [
// put only entry components that use custom decorator
Expand All @@ -68,7 +69,8 @@ const ENTRY_COMPONENTS = [
SubmissionSectionCcLicensesComponent,
SubmissionSectionAccessesComponent,
SubmissionSectionUploadFileEditComponent,
SubmissionSectionClarinLicenseDistributionComponent
SubmissionSectionClarinLicenseDistributionComponent,
SubmissionSectionClarinNoticeComponent
];

const DECLARATIONS = [
Expand Down
7 changes: 6 additions & 1 deletion src/assets/i18n/en.json5
Original file line number Diff line number Diff line change
Expand Up @@ -4726,7 +4726,8 @@

"submission.sections.submit.progressbar.upload": "Upload files",

"submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information",
"submission.sections.submit.progressbar.clarin-notice": "Notice",


"submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.",

Expand Down Expand Up @@ -4892,6 +4893,10 @@



"submission.sections.clarin-notice.message": ["The submission process for this collection (\"","\") is still being fine-tuned. If you find yourself unable to continue the submission because you can't provide the required information, because the required format for a field is too strict, because there's no appropriate field for your information, or for any other reason", "let us know"],



"submission.submit.breadcrumbs": "New submission",

"submission.sections.license.notgranted": "You must accept the license",
Expand Down

0 comments on commit e85a2b9

Please sign in to comment.