Files
dspace-angular/src/app/submission/import-external/import-external-preview/submission-import-external-preview.component.spec.ts
2020-06-26 11:19:44 +02:00

155 lines
6.0 KiB
TypeScript

import { Component, NO_ERRORS_SCHEMA } from '@angular/core';
import { async, TestBed, ComponentFixture, inject } from '@angular/core/testing';
import { TranslateModule } from '@ngx-translate/core';
import { Router } from '@angular/router';
import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { of as observableOf, of } from 'rxjs/internal/observable/of';
import { SubmissionImportExternalPreviewComponent } from './submission-import-external-preview.component';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { RouterStub } from '../../../shared/testing/router.stub';
import { SubmissionService } from '../../submission.service';
import { createTestComponent } from '../../../shared/testing/utils.test';
import { SubmissionServiceStub } from '../../../shared/testing/submission-service.stub';
import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
import { ExternalSourceEntry } from '../../../core/shared/external-source-entry.model';
import { Metadata } from '../../../core/shared/metadata.utils';
import { SubmissionImportExternalCollectionComponent } from '../import-external-collection/submission-import-external-collection.component';
import { CollectionListEntry } from '../../../shared/collection-dropdown/collection-dropdown.component';
describe('SubmissionImportExternalPreviewComponent test suite', () => {
let comp: SubmissionImportExternalPreviewComponent;
let compAsAny: any;
let fixture: ComponentFixture<SubmissionImportExternalPreviewComponent>;
let submissionServiceStub: SubmissionServiceStub;
const ngbActiveModal = jasmine.createSpyObj('modal', ['close', 'dismiss']);
const ngbModal = jasmine.createSpyObj('modal', ['open']);
const externalEntry = Object.assign(new ExternalSourceEntry(), {
id: '0001-0001-0001-0001',
display: 'John Doe',
value: 'John, Doe',
metadata: {
'dc.identifier.uri': [
{
value: 'https://orcid.org/0001-0001-0001-0001'
}
]
},
_links: { self: { href: 'http://test-rest.com/server/api/integration/externalSources/orcidV2/entryValues/0000-0003-4851-8004' } }
});
beforeEach(async (() => {
TestBed.configureTestingModule({
imports: [
TranslateModule.forRoot()
],
declarations: [
SubmissionImportExternalPreviewComponent,
TestComponent
],
providers: [
{ provide: Router, useValue: new RouterStub() },
{ provide: SubmissionService, useValue: new SubmissionServiceStub() },
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
{ provide: NgbModal, useValue: ngbModal },
{ provide: NgbActiveModal, useValue: ngbActiveModal },
SubmissionImportExternalPreviewComponent
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents().then();
}));
// First test to check the correct component creation
describe('', () => {
let testComp: TestComponent;
let testFixture: ComponentFixture<TestComponent>;
// synchronous beforeEach
beforeEach(() => {
const html = `
<ds-submission-import-external-preview></ds-submission-import-external-preview>`;
testFixture = createTestComponent(html, TestComponent) as ComponentFixture<TestComponent>;
testComp = testFixture.componentInstance;
});
afterEach(() => {
testFixture.destroy();
});
it('should create SubmissionImportExternalComponent', inject([SubmissionImportExternalPreviewComponent], (app: SubmissionImportExternalPreviewComponent) => {
expect(app).toBeDefined();
}));
});
describe('', () => {
beforeEach(() => {
fixture = TestBed.createComponent(SubmissionImportExternalPreviewComponent);
comp = fixture.componentInstance;
compAsAny = comp;
submissionServiceStub = TestBed.get(SubmissionService);
});
afterEach(() => {
fixture.destroy();
comp = null;
compAsAny = null;
});
it('Should init component properly', () => {
comp.externalSourceEntry = externalEntry;
const expected = [
{ key: 'dc.identifier.uri', value: Metadata.first(comp.externalSourceEntry.metadata, 'dc.identifier.uri') }
];
fixture.detectChanges();
expect(comp.metadataList).toEqual(expected);
});
it('Should close the modal calling \'activeModal.dismiss\'', () => {
comp.modalRef = jasmine.createSpyObj('modal', ['close', 'dismiss']);
comp.closeMetadataModal();
expect(compAsAny.activeModal.dismiss).toHaveBeenCalled();
});
it('Should start the import process opening a modal', () => {
const emittedEvent: CollectionListEntry = {
communities: [
{
id: 'dummy',
uuid: 'dummy',
name: 'dummy',
}
],
collection: {
id: 'ce64f48e-2c9b-411a-ac36-ee429c0e6a88',
uuid: 'ce64f48e-2c9b-411a-ac36-ee429c0e6a88',
name: 'Collection 1',
}
};
const submissionObjects = [
{ id: 'jk11k13o-9v4z-632i-sr88-wq071n0h1d47' }
];
comp.externalSourceEntry = externalEntry;
ngbModal.open.and.returnValue({componentInstance: { selectedEvent: observableOf(emittedEvent)}});
spyOn(comp, 'closeMetadataModal');
submissionServiceStub.createSubmissionFromExternalSource.and.returnValue(observableOf(submissionObjects));
spyOn(compAsAny.router, 'navigateByUrl');
comp.import();
expect(compAsAny.modalService.open).toHaveBeenCalledWith(SubmissionImportExternalCollectionComponent, { size: 'lg' });
expect(comp.closeMetadataModal).toHaveBeenCalled();
expect(compAsAny.submissionService.createSubmissionFromExternalSource).toHaveBeenCalledWith(externalEntry._links.self.href, emittedEvent.collection.id);
expect(compAsAny.router.navigateByUrl).toHaveBeenCalledWith('/workspaceitems/' + submissionObjects[0].id + '/edit');
});
});
});
// declare a test component
@Component({
selector: 'ds-test-cmp',
template: ``
})
class TestComponent {
}