First version of policy editor components
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / ei-coordinator / producers-list / producers-list.component.spec.ts
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';
13
14 import { ProducersListComponent } from './producers-list.component';
15
16 describe('ProducersListComponent', () => {
17   let component: ProducersListComponent;
18   let fixture: ComponentFixture<ProducersListComponent>;
19   let loader: HarnessLoader;
20   let producerDataSourceSpy: jasmine.SpyObj<EIProducerDataSource>;
21
22   const producer1 = {
23     ei_producer_id: 'producer1',
24     ei_producer_types: ['type1', 'type2'],
25     status: 'ENABLED'
26   } as EIProducer;
27   const producer2 = {
28     ei_producer_id: 'producer2',
29     ei_producer_types: ['type2', 'type3'],
30     status: 'DISABLED'
31   } as EIProducer;
32
33   beforeEach(async(() => {
34     producerDataSourceSpy = jasmine.createSpyObj('EIProducerDataSource', ['loadProducers', 'eiProducers', 'eiProducersSubject']);
35
36     const producers: EIProducer[] = [producer1, producer2];
37     producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
38
39     TestBed.configureTestingModule({
40       imports: [
41         MatTableModule,
42         ReactiveFormsModule
43       ],
44       schemas: [
45         CUSTOM_ELEMENTS_SCHEMA
46       ],
47       declarations: [
48         ProducersListComponent
49       ],
50       providers: [
51         { provide: EIProducerDataSource, useValue: producerDataSourceSpy },
52         UiService,
53         FormBuilder,
54       ]
55     })
56       .compileComponents();
57   }));
58
59   const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' };
60   beforeEach(() => {
61     fixture = TestBed.createComponent(ProducersListComponent);
62     component = fixture.componentInstance;
63     fixture.detectChanges();
64     loader = TestbedHarnessEnvironment.loader(fixture);
65   });
66
67   it('should create', () => {
68     expect(component).toBeTruthy();
69   });
70
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();
75
76     expect(headers).toEqual({ id: 'Producer ID', types: 'Producer types', status: 'Producer status' });
77   });
78
79
80   it('should contain data after initialization', async () => {
81     component.ngOnInit();
82     const expectedProducerRows = [
83       expectedProducer1Row,
84       { id: 'producer2', types: 'type2,type3', status: 'DISABLED' }
85     ];
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));
92       });
93     });
94   });
95
96   describe('should display default values for non required properties', () => {
97     it('producer defaults', async () => {
98       const producerMissingProperties = {
99         ei_producer_id: 'producer1'
100       } as EIProducer;
101       const producers: EIProducer[] = [producerMissingProperties];
102       producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
103       component.ngOnInit();
104
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);
109     });
110   });
111
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' }));
116
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);
122
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);
132
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);
139   });
140 });