* limitations under the License.
* ========================LICENSE_END===================================
*/
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+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 { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+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 { 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 { ProducersListComponent } from './producers-list/producers-list.component';
+import { JobsListComponent } from './jobs-list/jobs-list.component';
describe('EICoordinatorComponent', () => {
let component: EICoordinatorComponent;
let fixture: ComponentFixture<EICoordinatorComponent>;
let loader: HarnessLoader;
- let producerDataSourceSpy: jasmine.SpyObj<EIProducerDataSource>;
- let jobDataSourceSpy: jasmine.SpyObj<EIJobDataSource>;
-
- 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' ]);
- jobDataSourceSpy = jasmine.createSpyObj('EIJobDataSource', [ 'loadJobs', 'eiJobs' ]);
await TestBed.configureTestingModule({
imports: [
+ MatButtonModule,
MatIconModule,
MatTableModule,
- BrowserAnimationsModule,
- ReactiveFormsModule
+ BrowserAnimationsModule
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
declarations: [
- EICoordinatorComponent
+ EICoordinatorComponent,
+ JobsListStubComponent,
+ ProducerListStubComponent,
],
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);
});
});
describe('#content', () => {
- it('should contain refresh button with coorect 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', () => {
expect(component.darkMode).toBeFalsy();
});
- });
-
- describe('#producersTable', () => {
- const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' };
- beforeEach(() => {
- const producers: EIProducer[] =[ producer1, producer2 ];
- producerDataSourceSpy.eiProducers.and.returnValue(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.eiProducers.and.returnValue(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.eiJobs.and.returnValue(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);
+ it('should refresh tables', async () => {
+ let refreshButton = await loader.getHarness(MatButtonHarness.with({ selector: '#refreshButton' }));
+ spyOn(component.producersList, 'refresh');
+ spyOn(component.jobComponent, 'refresh');
+ await refreshButton.click();
- 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);
+ expect(component.jobComponent.refresh).toHaveBeenCalled();
+ expect(component.producersList.refresh).toHaveBeenCalled();
});
});
- describe('#jobsTable', () => {
- const expectedJob1Row = { id: 'job1', typeId: 'type1', owner: 'owner1', targetUri: 'http://one' };
- beforeEach(() => {
- const jobs: EIJob[] =[ job1, job2 ];
- jobDataSourceSpy.eiJobs.and.returnValue(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));
- });
- });
- });
+ @Component({
+ selector: 'nrcp-jobs-list',
+ template: '',
+ providers: [
+ {
+ provide: JobsListComponent,
+ useClass: JobsListStubComponent
+ }
+ ]
+ })
+ class JobsListStubComponent {
+ refresh() { }
+ }
+
+ @Component({
+ selector: 'nrcp-producers-list',
+ template: '',
+ providers: [
+ {
+ provide: ProducersListComponent,
+ useClass: ProducerListStubComponent
+ }
+ ]
+ })
+ class ProducerListStubComponent {
+ refresh() { }
+ }
- it('filtering', async () => {
- component.ngOnInit();
- let jobsTable = await loader.getHarness(MatTableHarness.with({selector: '#jobsTable'}));
-
- 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);
-
- idFilterInput.setValue('');
- let typeIdFilterInput = await loader.getHarness(MatInputHarness.with({selector: '#jobTypeIdFilter'}));
- await typeIdFilterInput.setValue("1");
- jobRows = await jobsTable.getRows();
- expect(jobRows.length).toEqual(1);
-
- 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);
-
- 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);
- });
- });
});