Files
dspace-angular/src/app/submission/sections/sherpa-policies/section-sherpa-policies.component.spec.ts
2024-01-19 17:59:49 +01:00

130 lines
4.9 KiB
TypeScript

import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap';
import { SubmissionServiceStub } from '../../../shared/testing/submission-service.stub';
import { SherpaDataResponse } from '../../../shared/mocks/section-sherpa-policies.service.mock';
import { ComponentFixture, inject, TestBed } from '@angular/core/testing';
import { SectionsService } from '../sections.service';
import { SectionsServiceStub } from '../../../shared/testing/sections-service.stub';
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { BrowserModule, By } from '@angular/platform-browser';
import { Store } from '@ngrx/store';
import { AppState } from '../../../app.reducer';
import { SubmissionSectionSherpaPoliciesComponent } from './section-sherpa-policies.component';
import { SubmissionService } from '../../submission.service';
import { DebugElement } from '@angular/core';
import { TranslateLoaderMock } from '../../../shared/mocks/translate-loader.mock';
import { of as observableOf } from 'rxjs';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { MetadataInformationComponent } from './metadata-information/metadata-information.component';
import { AlertComponent } from '../../../shared/alert/alert.component';
import { PublisherPolicyComponent } from './publisher-policy/publisher-policy.component';
import { PublicationInformationComponent } from './publication-information/publication-information.component';
import { APP_DATA_SERVICES_MAP } from '../../../../config/app-config.interface';
describe('SubmissionSectionSherpaPoliciesComponent', () => {
let component: SubmissionSectionSherpaPoliciesComponent;
let fixture: ComponentFixture<SubmissionSectionSherpaPoliciesComponent>;
let de: DebugElement;
const sectionsServiceStub = new SectionsServiceStub();
const operationsBuilder = jasmine.createSpyObj('operationsBuilder', {
add: undefined,
remove: undefined,
replace: undefined,
});
const storeStub = jasmine.createSpyObj('store', ['dispatch']);
const sectionData = {
header: 'submit.progressbar.sherpaPolicies',
config: 'http://localhost:8080/server/api/config/submissionaccessoptions/SherpaPoliciesDefaultConfiguration',
mandatory: true,
sectionType: 'sherpaPolicies',
collapsed: false,
enabled: true,
data: SherpaDataResponse,
errorsToShow: [],
serverValidationErrors: [],
isLoading: false,
isValid: true
};
describe('SubmissionSectionSherpaPoliciesComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
BrowserModule,
NoopAnimationsModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderMock
}
}),
NgbCollapseModule,
SubmissionSectionSherpaPoliciesComponent
],
providers: [
{ provide: SectionsService, useValue: sectionsServiceStub },
{ provide: JsonPatchOperationsBuilder, useValue: operationsBuilder },
{ provide: SubmissionService, useValue: SubmissionServiceStub },
{ provide: Store, useValue: storeStub },
{ provide: 'sectionDataProvider', useValue: sectionData },
{ provide: 'submissionIdProvider', useValue: '1508' },
{ provide: APP_DATA_SERVICES_MAP, useValue: {} },
]
})
.overrideComponent(SubmissionSectionSherpaPoliciesComponent, {
remove: { imports: [
MetadataInformationComponent,
AlertComponent,
PublisherPolicyComponent,
PublicationInformationComponent,
]}
})
.compileComponents();
});
beforeEach(inject([Store], (store: Store<AppState>) => {
fixture = TestBed.createComponent(SubmissionSectionSherpaPoliciesComponent);
component = fixture.componentInstance;
de = fixture.debugElement;
sectionsServiceStub.getSectionData.and.returnValue(observableOf(SherpaDataResponse));
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
it('should show refresh button', () => {
expect(de.query(By.css('[data-test="refresh-btn"]'))).toBeTruthy();
});
it('should show publisher information', () => {
expect(de.query(By.css('ds-publication-information'))).toBeTruthy();
});
it('should show publisher policy', () => {
expect(de.query(By.css('ds-publisher-policy'))).toBeTruthy();
});
it('should show metadata information', () => {
expect(de.query(By.css('ds-metadata-information'))).toBeTruthy();
});
it('when refresh button click operationsBuilder.remove should have been called', () => {
de.query(By.css('[data-test="refresh-btn"]')).nativeElement.click();
expect(operationsBuilder.remove).toHaveBeenCalled();
});
});
});