X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fei-coordinator%2Fei-coordinator.component.spec.ts;h=38e3fa53c7c8d9d635e4bd8ce1747fdf4aed2afa;hb=18a21c8796772fab295df182763f59700333e9ab;hp=d516b14b06580a9449b55cb15f86fb3e359896a6;hpb=923a26d056fd5b613aa1342fff7d7f0f74d9267e;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/ei-coordinator/ei-coordinator.component.spec.ts b/webapp-frontend/src/app/ei-coordinator/ei-coordinator.component.spec.ts index d516b14..38e3fa5 100644 --- a/webapp-frontend/src/app/ei-coordinator/ei-coordinator.component.spec.ts +++ b/webapp-frontend/src/app/ei-coordinator/ei-coordinator.component.spec.ts @@ -20,83 +20,51 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations' import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; import { HarnessLoader } from '@angular/cdk/testing'; +import { MatButtonModule } from '@angular/material/button'; +import { MatButtonHarness } from '@angular/material/button/testing'; import { MatIconModule } from '@angular/material/icon'; -import { MatInputHarness } from '@angular/material/input/testing' import { MatTableModule } from '@angular/material/table'; -import { MatTableHarness } from '@angular/material/table/testing'; -import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed'; -import { of } from 'rxjs'; +import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed'; import { EICoordinatorComponent } from './ei-coordinator.component'; -import { EIJobDataSource } from './ei-job.datasource'; -import { EIProducerDataSource } from './ei-producer.datasource'; -import { UiService } from '../services/ui/ui.service'; -import { EIJob, EIProducer } from '../interfaces/ei.types'; +import { UiService } from '@services/ui/ui.service'; +import { ProducersListComponent } from '@ei-coordinator/producers-list/producers-list.component'; +import { JobsListComponent } from '@ei-coordinator/jobs-list/jobs-list.component'; +import { MockComponent } from 'ng-mocks'; +import { By } from '@angular/platform-browser'; describe('EICoordinatorComponent', () => { let component: EICoordinatorComponent; let fixture: ComponentFixture; let loader: HarnessLoader; - let producerDataSourceSpy: jasmine.SpyObj; - let jobDataSourceSpy: jasmine.SpyObj; - - const producer1 = { - ei_producer_id: 'producer1', - ei_producer_types: [ 'type1', 'type2' ], - status: 'ENABLED' - } as EIProducer; - const producer2 = { - ei_producer_id: 'producer2', - ei_producer_types: [ 'type2', 'type3' ], - status: 'DISABLED' - } as EIProducer; - - const job1 = { - ei_job_identity: 'job1', - ei_type_identity: 'type1', - owner: 'owner1', - target_uri: 'http://one' - } as EIJob; - const job2 = { - ei_job_identity: 'job2', - ei_type_identity: 'type2', - owner: 'owner2', - target_uri: 'http://two' - } as EIJob; beforeEach(async () => { - producerDataSourceSpy = jasmine.createSpyObj('EIProducerDataSource', [ 'loadProducers', 'eiProducers', 'eiProducersSubject' ]); - jobDataSourceSpy = jasmine.createSpyObj('EIJobDataSource', [ 'loadJobs', 'eiJobs', 'eiJobsSubject' ]); - - producerDataSourceSpy.eiProducersSubject.and.returnValue(of({ producers: [producer1, producer2] })); - jobDataSourceSpy.eiJobsSubject.and.returnValue(of({ jobs: [job1, job2] })); await TestBed.configureTestingModule({ imports: [ + MatButtonModule, MatIconModule, MatTableModule, - BrowserAnimationsModule, - ReactiveFormsModule + BrowserAnimationsModule ], schemas: [ CUSTOM_ELEMENTS_SCHEMA ], declarations: [ - EICoordinatorComponent + EICoordinatorComponent, + MockComponent(JobsListComponent), + MockComponent(ProducersListComponent), ], providers: [ - { provide: EIJobDataSource, useValue: jobDataSourceSpy }, - { provide: EIProducerDataSource, useValue: producerDataSourceSpy }, - UiService, - FormBuilder, + UiService ] }) - .compileComponents(); + .compileComponents(); fixture = TestBed.createComponent(EICoordinatorComponent); component = fixture.componentInstance; + fixture.detectChanges(); loader = TestbedHarnessEnvironment.loader(fixture); }); @@ -106,26 +74,20 @@ describe('EICoordinatorComponent', () => { }); describe('#content', () => { - it('should contain refresh button with correct icon', () => { - const button = fixture.debugElement.nativeElement.querySelector('#refreshButton'); - expect(button).toBeTruthy(); - expect(button.innerHTML).toContain('refresh'); + it('should contain refresh button with correct icon', async () => { + let refreshButton = await loader.getHarness(MatButtonHarness.with({ selector: '#refreshButton' })); + expect(refreshButton).toBeTruthy(); + expect(await refreshButton.getText()).toEqual('refresh'); }); - it('should contain producers table with correct columns', async () => { - let producersTable = await loader.getHarness(MatTableHarness.with({selector: '#producersTable'})); - let headerRow = (await producersTable.getHeaderRows())[0]; - let headers = await headerRow.getCellTextByColumnName(); - - expect(headers).toEqual({id: 'Producer ID', types: 'Producer types', status: 'Producer status'}); + it('should contain producers table', async () => { + const producersTableComponent = fixture.debugElement.nativeElement.querySelector('nrcp-producers-list'); + expect(producersTableComponent).toBeTruthy(); }); - it('should contain jobs table with correct columns', async () => { - let producersTable = await loader.getHarness(MatTableHarness.with({selector: '#jobsTable'})); - let headerRow = (await producersTable.getHeaderRows())[0]; - let headers = await headerRow.getCellTextByColumnName(); - - expect(headers).toEqual({id: 'Job ID', typeId: 'Type ID', owner: 'Owner', targetUri: 'Target URI'}); + it('should contain jobs table', async () => { + const jobsComponent = fixture.debugElement.nativeElement.querySelector('nrcp-jobs-list'); + expect(jobsComponent).toBeTruthy(); }); it('should set correct dark mode from UIService', () => { @@ -137,143 +99,25 @@ describe('EICoordinatorComponent', () => { expect(component.darkMode).toBeFalsy(); }); - }); - - describe('#producersTable', () => { - const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' }; - beforeEach(() => { - const producers: EIProducer[] =[ producer1, producer2 ]; - producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers)); - }); - - it('should contain data after initialization', async () => { - component.ngOnInit(); - const expectedProducerRows = [ - expectedProducer1Row, - {id: 'producer2', types: 'type2,type3', status: 'DISABLED'} - ]; - let producersTable = await loader.getHarness(MatTableHarness.with({selector: '#producersTable'})); - let producerRows = await producersTable.getRows(); - expect(producerRows.length).toEqual(2); - producerRows.forEach(row => { - row.getCellTextByColumnName().then(values => { - expect(expectedProducerRows).toContain(jasmine.objectContaining(values)); - }); - }); - }); - - describe('should display default values for non required properties', () => { - it('producer defaults', async () => { - const producerMissingProperties = { - ei_producer_id: 'producer1' - } as EIProducer; - const producers: EIProducer[] =[ producerMissingProperties ]; - producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers)); - component.ngOnInit(); - - const expectedProducerRow = { id: 'producer1', types: '< No types >', status: '< No status >' }; - let producersTable = await loader.getHarness(MatTableHarness.with({selector: '#producersTable'})); - let producerRows = await producersTable.getRows(); - expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducerRow); - }); - - it('job defaults', async () => { - const jobMissingProperties = { - ei_job_identity: 'job1', - target_uri: 'http://one' - } as EIJob; - const jobs: EIJob[] =[ jobMissingProperties ]; - jobDataSourceSpy.eiJobsSubject.and.returnValue(of(jobs)); - component.ngOnInit(); - - const expectedJobRow = { id: 'job1', typeId: '< No type >', owner: '< No owner >', targetUri: 'http://one' }; - let jobsTable = await loader.getHarness(MatTableHarness.with({selector: '#jobsTable'})); - let jobRows = await jobsTable.getRows(); - expect(await jobRows[0].getCellTextByColumnName()).toEqual(expectedJobRow); - }); - }); - - it('filtering', async () => { - component.ngOnInit(); - let producersTable = await loader.getHarness(MatTableHarness.with({selector: '#producersTable'})); - - let idFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#producerIdFilter'})); - await idFilterInput.setValue("1"); - let producerRows = await producersTable.getRows(); - expect(producerRows.length).toEqual(1); - expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row); - - idFilterInput.setValue(''); - let typesFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#producerTypesFilter'})); - await typesFilterInput.setValue("1"); - producerRows = await producersTable.getRows(); - expect(producerRows.length).toEqual(1); - expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row); - await typesFilterInput.setValue("2"); - producerRows = await producersTable.getRows(); - expect(producerRows.length).toEqual(2); - - typesFilterInput.setValue(''); - let statusFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#producerStatusFilter'})); - await statusFilterInput.setValue("enabled"); - producerRows = await producersTable.getRows(); - expect(producerRows.length).toEqual(1); - expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row); - }); - }); - - describe('#jobsTable', () => { - const expectedJob1Row = { id: 'job1', typeId: 'type1', owner: 'owner1', targetUri: 'http://one' }; - beforeEach(() => { - const jobs: EIJob[] =[ job1, job2 ]; - jobDataSourceSpy.eiJobsSubject.and.returnValue(of(jobs)); - }); - it('should contain data after initialization', async () => { - component.ngOnInit(); - const expectedJobRows = [ - expectedJob1Row, - { id: 'job2', typeId: 'type2', owner: 'owner2', targetUri: 'http://two' } - ]; - let jobsTable = await loader.getHarness(MatTableHarness.with({selector: '#jobsTable'})); - let jobRows = await jobsTable.getRows(); - expect(jobRows.length).toEqual(2); - jobRows.forEach(row => { - row.getCellTextByColumnName().then(values => { - expect(expectedJobRows).toContain(jasmine.objectContaining(values)); - }); - }); - }); + it('should refresh tables', async () => { + let refreshButton = await loader.getHarness(MatButtonHarness.with({ selector: '#refreshButton' })); - it('filtering', async () => { - component.ngOnInit(); - let jobsTable = await loader.getHarness(MatTableHarness.with({selector: '#jobsTable'})); + const jobsComponent: JobsListComponent = fixture.debugElement.query(By.directive(JobsListComponent)).componentInstance; + spyOn(jobsComponent, 'refreshDataClick'); + spyOn(jobsComponent, 'clearFilter'); - let idFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#jobIdFilter'})); - await idFilterInput.setValue("1"); - let jobRows = await jobsTable.getRows(); - expect(jobRows.length).toEqual(1); - expect(await jobRows[0].getCellTextByColumnName()).toEqual(expectedJob1Row); + const prodsComponent: ProducersListComponent = fixture.debugElement.query(By.directive(ProducersListComponent)).componentInstance; + spyOn(prodsComponent, 'loadProducers'); + spyOn(prodsComponent, 'clearFilter'); - idFilterInput.setValue(''); - let typeIdFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#jobTypeIdFilter'})); - await typeIdFilterInput.setValue("1"); - jobRows = await jobsTable.getRows(); - expect(jobRows.length).toEqual(1); + await refreshButton.click(); - typeIdFilterInput.setValue(''); - let ownerFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#jobOwnerFilter'})); - await ownerFilterInput.setValue("1"); - jobRows = await jobsTable.getRows(); - expect(jobRows.length).toEqual(1); - expect(await jobRows[0].getCellTextByColumnName()).toEqual(expectedJob1Row); + expect(jobsComponent.refreshDataClick).toHaveBeenCalled(); + expect(jobsComponent.clearFilter).toHaveBeenCalled(); + expect(prodsComponent.loadProducers).toHaveBeenCalled(); + expect(prodsComponent.clearFilter).toHaveBeenCalled(); - ownerFilterInput.setValue(''); - let targetUriFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#jobTargetUriFilter'})); - await targetUriFilterInput.setValue("one"); - jobRows = await jobsTable.getRows(); - expect(jobRows.length).toEqual(1); - expect(await jobRows[0].getCellTextByColumnName()).toEqual(expectedJob1Row); }); }); });