Create feature module for Enrichment coordinator
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / ei-coordinator / producers-list / producers-list.component.spec.ts
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2021 Nordix Foundation
6  * %%
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ========================LICENSE_END===================================
19  */
20 import { HarnessLoader } from '@angular/cdk/testing';
21 import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
22 import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
23 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
24 import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
25 import { MatInputHarness } from '@angular/material/input/testing';
26 import { MatTableModule } from '@angular/material/table';
27 import { MatTableHarness } from '@angular/material/table/testing';
28 import { of } from 'rxjs/observable/of';
29 import { EIProducer } from '../../interfaces/ei.types';
30 import { UiService } from '../../services/ui/ui.service';
31 import { EIProducerDataSource } from '../ei-producer.datasource';
32
33 import { ProducersListComponent } from './producers-list.component';
34
35 describe('ProducersListComponent', () => {
36   let component: ProducersListComponent;
37   let fixture: ComponentFixture<ProducersListComponent>;
38   let loader: HarnessLoader;
39   let producerDataSourceSpy: jasmine.SpyObj<EIProducerDataSource>;
40
41   const producer1 = {
42     ei_producer_id: 'producer1',
43     ei_producer_types: ['type1', 'type2'],
44     status: 'ENABLED'
45   } as EIProducer;
46   const producer2 = {
47     ei_producer_id: 'producer2',
48     ei_producer_types: ['type2', 'type3'],
49     status: 'DISABLED'
50   } as EIProducer;
51
52   beforeEach(async(() => {
53     producerDataSourceSpy = jasmine.createSpyObj('EIProducerDataSource', ['loadProducers', 'eiProducers', 'eiProducersSubject']);
54
55     const producers: EIProducer[] = [producer1, producer2];
56     producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
57
58     TestBed.configureTestingModule({
59       imports: [
60         MatTableModule,
61         ReactiveFormsModule
62       ],
63       schemas: [
64         CUSTOM_ELEMENTS_SCHEMA
65       ],
66       declarations: [
67         ProducersListComponent
68       ],
69       providers: [
70         { provide: EIProducerDataSource, useValue: producerDataSourceSpy },
71         UiService,
72         FormBuilder,
73       ]
74     })
75       .compileComponents();
76   }));
77
78   const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' };
79   beforeEach(() => {
80     fixture = TestBed.createComponent(ProducersListComponent);
81     component = fixture.componentInstance;
82     fixture.detectChanges();
83     loader = TestbedHarnessEnvironment.loader(fixture);
84   });
85
86   it('should create', () => {
87     expect(component).toBeTruthy();
88   });
89
90   it('should contain producers table with correct columns', async () => {
91     let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
92     let headerRow = (await producersTable.getHeaderRows())[0];
93     let headers = await headerRow.getCellTextByColumnName();
94
95     expect(headers).toEqual({ id: 'Producer ID', types: 'Producer types', status: 'Producer status' });
96   });
97
98
99   it('should contain data after initialization', async () => {
100     component.ngOnInit();
101     const expectedProducerRows = [
102       expectedProducer1Row,
103       { id: 'producer2', types: 'type2,type3', status: 'DISABLED' }
104     ];
105     let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
106     let producerRows = await producersTable.getRows();
107     expect(producerRows.length).toEqual(2);
108     producerRows.forEach(row => {
109       row.getCellTextByColumnName().then(values => {
110         expect(expectedProducerRows).toContain(jasmine.objectContaining(values));
111       });
112     });
113   });
114
115   describe('should display default values for non required properties', () => {
116     it('producer defaults', async () => {
117       const producerMissingProperties = {
118         ei_producer_id: 'producer1'
119       } as EIProducer;
120       const producers: EIProducer[] = [producerMissingProperties];
121       producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
122       component.ngOnInit();
123
124       const expectedProducerRow = { id: 'producer1', types: '< No types >', status: '< No status >' };
125       let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
126       let producerRows = await producersTable.getRows();
127       expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducerRow);
128     });
129   });
130
131   it('filtering', async () => {
132     const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' };
133     component.ngOnInit();
134     let producersTable = await loader.getHarness(MatTableHarness.with({ selector: '#producersTable' }));
135
136     let idFilterInput = await loader.getHarness(MatInputHarness.with({ selector: '#producerIdFilter' }));
137     await idFilterInput.setValue("1");
138     let producerRows = await producersTable.getRows();
139     expect(producerRows.length).toEqual(1);
140     expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row);
141
142     idFilterInput.setValue('');
143     let typesFilterInput = await loader.getHarness(MatInputHarness.with({ selector: '#producerTypesFilter' }));
144     await typesFilterInput.setValue("1");
145     producerRows = await producersTable.getRows();
146     expect(producerRows.length).toEqual(1);
147     expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row);
148     await typesFilterInput.setValue("2");
149     producerRows = await producersTable.getRows();
150     expect(producerRows.length).toEqual(2);
151
152     typesFilterInput.setValue('');
153     let statusFilterInput = await loader.getHarness(MatInputHarness.with({ selector: '#producerStatusFilter' }));
154     await statusFilterInput.setValue("enabled");
155     producerRows = await producersTable.getRows();
156     expect(producerRows.length).toEqual(1);
157     expect(await producerRows[0].getCellTextByColumnName()).toEqual(expectedProducer1Row);
158   });
159 });