1 import { HarnessLoader } from '@angular/cdk/testing';
2 import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
3 import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
4 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
5 import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
6 import { MatInputHarness } from '@angular/material/input/testing';
7 import { MatTableModule } from '@angular/material/table';
8 import { MatTableHarness } from '@angular/material/table/testing';
9 import { of } from 'rxjs/observable/of';
10 import { EIProducer } from 'src/app/interfaces/ei.types';
11 import { UiService } from 'src/app/services/ui/ui.service';
12 import { EIProducerDataSource } from '../ei-producer.datasource';
14 import { ProducersListComponent } from './producers-list.component';
16 describe('ProducersListComponent', () => {
17 let component: ProducersListComponent;
18 let fixture: ComponentFixture<ProducersListComponent>;
19 let loader: HarnessLoader;
20 let producerDataSourceSpy: jasmine.SpyObj<EIProducerDataSource>;
23 ei_producer_id: 'producer1',
24 ei_producer_types: ['type1', 'type2'],
28 ei_producer_id: 'producer2',
29 ei_producer_types: ['type2', 'type3'],
33 beforeEach(async(() => {
34 producerDataSourceSpy = jasmine.createSpyObj('EIProducerDataSource', ['loadProducers', 'eiProducers', 'eiProducersSubject']);
36 const producers: EIProducer[] = [producer1, producer2];
37 producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
39 TestBed.configureTestingModule({
45 CUSTOM_ELEMENTS_SCHEMA
48 ProducersListComponent
51 { provide: EIProducerDataSource, useValue: producerDataSourceSpy },
59 const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' };
61 fixture = TestBed.createComponent(ProducersListComponent);
62 component = fixture.componentInstance;
63 fixture.detectChanges();
64 loader = TestbedHarnessEnvironment.loader(fixture);
67 it('should create', () => {
68 expect(component).toBeTruthy();
71 it('should contain producers table with correct columns', async () => {
72 let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
73 let headerRow = (await producersTable.getHeaderRows())[0];
74 let headers = await headerRow.getCellTextByColumnName();
76 expect(headers).toEqual({ id: 'Producer ID', types: 'Producer types', status: 'Producer status' });
80 it('should contain data after initialization', async () => {
82 const expectedProducerRows = [
84 { id: 'producer2', types: 'type2,type3', status: 'DISABLED' }
86 let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
87 let producerRows = await producersTable.getRows();
88 expect(producerRows.length).toEqual(2);
89 producerRows.forEach(row => {
90 row.getCellTextByColumnName().then(values => {
91 expect(expectedProducerRows).toContain(jasmine.objectContaining(values));
96 describe('should display default values for non required properties', () => {
97 it('producer defaults', async () => {
98 const producerMissingProperties = {
99 ei_producer_id: 'producer1'
101 const producers: EIProducer[] = [producerMissingProperties];
102 producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
103 component.ngOnInit();
105 const expectedProducerRow = { id: 'producer1', types: '< No types >', status: '< No status >' };
106 let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
107 let producerRows = await producersTable.getRows();
108 expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducerRow);
112 it('filtering', async () => {
113 const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' };
114 component.ngOnInit();
115 let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
117 let idFilterInput = await loader.getHarness(MatInputHarness.with({ selector: '#producerIdFilter' }));
118 await idFilterInput.setValue("1");
119 let producerRows = await producersTable.getRows();
120 expect(producerRows.length).toEqual(1);
121 expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row);
123 idFilterInput.setValue('');
124 let typesFilterInput = await loader.getHarness(MatInputHarness.with({ selector: '#producerTypesFilter' }));
125 await typesFilterInput.setValue("1");
126 producerRows = await producersTable.getRows();
127 expect(producerRows.length).toEqual(1);
128 expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row);
129 await typesFilterInput.setValue("2");
130 producerRows = await producersTable.getRows();
131 expect(producerRows.length).toEqual(2);
133 typesFilterInput.setValue('');
134 let statusFilterInput = await loader.getHarness(MatInputHarness.with({ selector: '#producerStatusFilter' }));
135 await statusFilterInput.setValue("enabled");
136 producerRows = await producersTable.getRows();
137 expect(producerRows.length).toEqual(1);
138 expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row);