import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { AccordionModule } from 'ngx-bootstrap'; import { CriteriaTabsComponent } from './criteria-tabs.component'; import { Attribute, Family } from '../../../metamodel/model'; import { Criterion, FieldCriterion } from '../../store/model'; import { CRITERIA_FAMILY_LIST, ATTRIBUTE_LIST, CRITERIA_LIST } from '../../../../settings/test-data'; describe('[Search][Criteria] Component: CriteriaTabsComponent', () => { @Component({ selector: `app-host`, template: ` <app-criteria-tabs [criteriaFamilyList]="criteriaFamilyList" [datasetAttributeList]="datasetAttributeList" [criteriaList]="criteriaList"> </app-criteria-tabs> ` }) class TestHostComponent { @ViewChild(CriteriaTabsComponent, { static: false }) public testedComponent: CriteriaTabsComponent; private criteriaFamilyList: Family[] = CRITERIA_FAMILY_LIST; private datasetAttributeList: Attribute[] = ATTRIBUTE_LIST; private criteriaList: Criterion[] = CRITERIA_LIST; } @Component({ selector: 'app-criteria-by-family', template: '' }) class CriteriaByFamilyStubComponent { @Input() attributeList: Attribute[]; @Input() criteriaList: Criterion[]; @Output() addCriterion: EventEmitter<Criterion> = new EventEmitter(); @Output() deleteCriterion: EventEmitter<number> = new EventEmitter(); } let testHostComponent: TestHostComponent; let testHostFixture: ComponentFixture<TestHostComponent>; let testedComponent: CriteriaTabsComponent; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ CriteriaTabsComponent, TestHostComponent, CriteriaByFamilyStubComponent ], imports: [AccordionModule.forRoot(), BrowserAnimationsModule] }); testHostFixture = TestBed.createComponent(TestHostComponent); testHostComponent = testHostFixture.componentInstance; testHostFixture.detectChanges(); testedComponent = testHostComponent.testedComponent; })); it('should create the component', () => { expect(testedComponent).toBeTruthy(); }); it('#getAttributeByFamily(idFamily) should filter attibutes by idFamily', () => { const filteredAttributeList: Attribute[] = testedComponent.getAttributeByFamily(1); expect(filteredAttributeList.length).toBe(1); expect(filteredAttributeList[0].id).toBe(1); }); it('#getCriteriaFamilyListSortedByDisplay() should sort criteria family by display', () => { const sortedcriteriaFamily = testedComponent.getCriteriaFamilyListSortedByDisplay(); expect(sortedcriteriaFamily.length).toBe(3); expect(sortedcriteriaFamily[0].id).toBe(1); expect(sortedcriteriaFamily[2].id).toBe(3); }); it('raises the add criterion event when clicked', () => { const criterion = new FieldCriterion(1, 'eq', 'test'); testedComponent.addCriterion.subscribe((event: FieldCriterion) => expect(event).toEqual(criterion)); testedComponent.emitAdd(criterion); }); it('raises the delete criterion event when clicked', () => { const criterionId = 1; testedComponent.deleteCriterion.subscribe((event: number) => expect(event).toEqual(1)); testedComponent.emitDelete(criterionId); }); });