2 * ========================LICENSE_START=================================
5 * Copyright (C) 2021 Nordix Foundation
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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===================================
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';
33 import { ProducersListComponent } from './producers-list.component';
35 describe('ProducersListComponent', () => {
36 let component: ProducersListComponent;
37 let fixture: ComponentFixture<ProducersListComponent>;
38 let loader: HarnessLoader;
39 let producerDataSourceSpy: jasmine.SpyObj<EIProducerDataSource>;
42 ei_producer_id: 'producer1',
43 ei_producer_types: ['type1', 'type2'],
47 ei_producer_id: 'producer2',
48 ei_producer_types: ['type2', 'type3'],
52 beforeEach(async(() => {
53 producerDataSourceSpy = jasmine.createSpyObj('EIProducerDataSource', ['loadProducers', 'eiProducers', 'eiProducersSubject']);
55 const producers: EIProducer[] = [producer1, producer2];
56 producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
58 TestBed.configureTestingModule({
64 CUSTOM_ELEMENTS_SCHEMA
67 ProducersListComponent
70 { provide: EIProducerDataSource, useValue: producerDataSourceSpy },
78 const expectedProducer1Row = { id: 'producer1', types: 'type1,type2', status: 'ENABLED' };
80 fixture = TestBed.createComponent(ProducersListComponent);
81 component = fixture.componentInstance;
82 fixture.detectChanges();
83 loader = TestbedHarnessEnvironment.loader(fixture);
86 it('should create', () => {
87 expect(component).toBeTruthy();
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();
95 expect(headers).toEqual({ id: 'Producer ID', types: 'Producer types', status: 'Producer status' });
99 it('should contain data after initialization', async () => {
100 component.ngOnInit();
101 const expectedProducerRows = [
102 expectedProducer1Row,
103 { id: 'producer2', types: 'type2,type3', status: 'DISABLED' }
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));
115 describe('should display default values for non required properties', () => {
116 it('producer defaults', async () => {
117 const producerMissingProperties = {
118 ei_producer_id: 'producer1'
120 const producers: EIProducer[] = [producerMissingProperties];
121 producerDataSourceSpy.eiProducersSubject.and.returnValue(of(producers));
122 component.ngOnInit();
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);
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' }));
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);
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);
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);