-
Tifenn Guillas authoredTifenn Guillas authored
criteria-tabs.component.spec.ts 3.61 KiB
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);
});
});