From 364d1cdea2c2ae548348573dd214d4eec5895f26 Mon Sep 17 00:00:00 2001 From: Tifenn GUILLAS <tifenn.guillas@lam.fr> Date: Fri, 25 Oct 2019 11:32:35 +0200 Subject: [PATCH] Add tests for radio component --- .../criteria-by-family.component.html | 4 +- .../search-type/json.component.spec.ts | 2 +- .../criteria/search-type/radio.component.html | 4 +- .../search-type/radio.component.spec.ts | 61 +++++++++++++++++++ .../criteria/search-type/radio.component.ts | 14 ++--- 5 files changed, 73 insertions(+), 12 deletions(-) create mode 100644 src/app/search/components/criteria/search-type/radio.component.spec.ts diff --git a/src/app/search/components/criteria/criteria-by-family.component.html b/src/app/search/components/criteria/criteria-by-family.component.html index 4f5db76e..46eff1b5 100644 --- a/src/app/search/components/criteria/criteria-by-family.component.html +++ b/src/app/search/components/criteria/criteria-by-family.component.html @@ -63,8 +63,8 @@ [label]="attribute.form_label" [options]="getOptions(attribute.id)" [criterion]="getCriterion(attribute.id)" - (add)="add($event)" - (delete)="delete($event)"> + (addCriterion)="add($event)" + (deleteCriterion)="delete($event)"> </app-radio> </div> <div *ngSwitchCase="'checkbox'"> diff --git a/src/app/search/components/criteria/search-type/json.component.spec.ts b/src/app/search/components/criteria/search-type/json.component.spec.ts index 6fd31b2d..d59e21a2 100644 --- a/src/app/search/components/criteria/search-type/json.component.spec.ts +++ b/src/app/search/components/criteria/search-type/json.component.spec.ts @@ -1,6 +1,6 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormsModule, ReactiveFormsModule, FormControl } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { JsonComponent } from './json.component'; import { JsonCriterion } from '../../../store/model'; diff --git a/src/app/search/components/criteria/search-type/radio.component.html b/src/app/search/components/criteria/search-type/radio.component.html index 1fd251b5..c2bf1ec0 100644 --- a/src/app/search/components/criteria/search-type/radio.component.html +++ b/src/app/search/components/criteria/search-type/radio.component.html @@ -9,10 +9,10 @@ </div> <div class="col-2 text-center"> <button class="btn btn-outline-success" *ngIf="!radio.disabled" [hidden]="!radio.value" - (click)="addCriterion()"> + (click)="emitAdd()"> <span class="fas fa-plus fa-fw"></span> </button> - <button class="btn btn-outline-danger" *ngIf="radio.disabled" (click)="deleteCriterion()"> + <button class="btn btn-outline-danger" *ngIf="radio.disabled" (click)="emitDelete()"> <span class="fa fa-times fa-fw"></span> </button> </div> diff --git a/src/app/search/components/criteria/search-type/radio.component.spec.ts b/src/app/search/components/criteria/search-type/radio.component.spec.ts new file mode 100644 index 00000000..65e11b40 --- /dev/null +++ b/src/app/search/components/criteria/search-type/radio.component.spec.ts @@ -0,0 +1,61 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FormsModule, ReactiveFormsModule, FormControl } from '@angular/forms'; + +import { RadioComponent } from './radio.component'; +import { FieldCriterion } from '../../../store/model'; + +describe('[Search][Criteria][SearchType] Component: RadioComponent', () => { + let component: RadioComponent; + let fixture: ComponentFixture<RadioComponent>; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [RadioComponent], + imports: [FormsModule, ReactiveFormsModule] + }); + fixture = TestBed.createComponent(RadioComponent); + component = fixture.componentInstance; + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('#getDefault() should enable and not fill form if criterion not defined', () => { + component.getDefault(undefined); + expect(component.radio.value).toBeNull(); + expect(component.radio.enabled).toBeTruthy(); + }); + + it('#getDefault() should fill and disable form if criterion is defined', () => { + const operator = '='; + const value = 'test'; + const criterion = new FieldCriterion(1, operator, value); + component.getDefault(criterion); + expect(component.radio.value).toEqual(value); + expect(component.radio.disabled).toBeTruthy(); + }); + + it('raises the add criterion event when clicked', () => { + component.id = 1; + const operator = '='; + component.operator = operator; + const value = 'three'; + component.radio = new FormControl(value); + component.options = [ + { label: 'One', value: 'one', display: 1 }, + { label: 'Two', value: 'two', display: 2 }, + { label: 'Three', value: 'three', display: 3 } + ]; + const expectedCriterion = new FieldCriterion(component.id, operator, value); + component.addCriterion.subscribe((event: FieldCriterion) => expect(event).toEqual(expectedCriterion)); + component.emitAdd(); + }); + + it('raises the delete criterion event when clicked', () => { + component.id = 1; + component.deleteCriterion.subscribe((event: number) => expect(event).toEqual(1)); + component.emitDelete(); + }); +}); diff --git a/src/app/search/components/criteria/search-type/radio.component.ts b/src/app/search/components/criteria/search-type/radio.component.ts index 0f41461a..6c24feaa 100644 --- a/src/app/search/components/criteria/search-type/radio.component.ts +++ b/src/app/search/components/criteria/search-type/radio.component.ts @@ -18,24 +18,24 @@ export class RadioComponent { set criterion(criterion: Criterion) { this.getDefault(criterion); } - @Output() add: EventEmitter<FieldCriterion> = new EventEmitter(); - @Output() delete: EventEmitter<number> = new EventEmitter(); + @Output() addCriterion: EventEmitter<FieldCriterion> = new EventEmitter(); + @Output() deleteCriterion: EventEmitter<number> = new EventEmitter(); radio = new FormControl(''); - addCriterion() { + emitAdd() { const option = this.options.find(o => o.value === this.radio.value); const cb = new FieldCriterion(this.id, this.operator, option.value); - this.add.emit(cb); + this.addCriterion.emit(cb); } - deleteCriterion() { - this.delete.emit(this.id); + emitDelete() { + this.deleteCriterion.emit(this.id); } getDefault(criterion: Criterion): void { if (!criterion) { - this.radio.setValue(''); + this.radio.reset(); this.radio.enable(); } else { const c = criterion as FieldCriterion; -- GitLab