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; 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) => { 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(); }); }); });