|
1 | 1 | import { AfterViewInit, ChangeDetectorRef, Component, Injectable, OnInit, ViewChild, OnDestroy, DebugElement } from '@angular/core'; |
2 | | -import { async, TestBed, tick, fakeAsync } from '@angular/core/testing'; |
| 2 | +import { async, TestBed, tick, fakeAsync, ComponentFixture } from '@angular/core/testing'; |
3 | 3 | import { By } from '@angular/platform-browser'; |
4 | 4 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; |
5 | | -import { FormGroup, FormControl, Validators, FormBuilder, ReactiveFormsModule, FormsModule, NgControl } from '@angular/forms'; |
| 5 | +import { FormGroup, FormControl, Validators, FormBuilder, ReactiveFormsModule, FormsModule, NgControl, NgModel } from '@angular/forms'; |
6 | 6 | import { IgxComboComponent, IgxComboModule, IComboSelectionChangeEventArgs, IgxComboState, IComboSearchInputEventArgs } from './combo.component'; |
7 | 7 | import { IgxComboItemComponent } from './combo-item.component'; |
8 | 8 | import { IgxComboDropDownComponent } from './combo-dropdown.component'; |
@@ -60,7 +60,7 @@ const defaultDropdownItemHeight = 40; |
60 | 60 | const defaultDropdownItemMaxHeight = 400; |
61 | 61 |
|
62 | 62 | describe('igxCombo', () => { |
63 | | - let fixture; |
| 63 | + let fixture: ComponentFixture<any>; |
64 | 64 | let combo: IgxComboComponent; |
65 | 65 | let input: DebugElement; |
66 | 66 |
|
@@ -2643,6 +2643,55 @@ describe('igxCombo', () => { |
2643 | 2643 | expect(combo.valid).toEqual(IgxComboState.INVALID); |
2644 | 2644 | expect(combo.comboInput.valid).toEqual(IgxInputState.INVALID); |
2645 | 2645 | }); |
| 2646 | + it('should properly init with empty array and handle consecutive model changes', fakeAsync(() => { |
| 2647 | + const model = fixture.debugElement.query(By.directive(NgModel)).injector.get(NgModel); |
| 2648 | + fixture.componentInstance.values = []; |
| 2649 | + fixture.detectChanges(); |
| 2650 | + tick(); |
| 2651 | + expect(combo.valid).toEqual(IgxComboState.INITIAL); |
| 2652 | + expect(combo.comboInput.valid).toEqual(IgxInputState.INITIAL); |
| 2653 | + expect(model.valid).toBeFalse(); |
| 2654 | + expect(model.dirty).toBeFalse(); |
| 2655 | + expect(model.touched).toBeFalse(); |
| 2656 | + |
| 2657 | + fixture.componentInstance.values = ['Missouri']; |
| 2658 | + fixture.detectChanges(); |
| 2659 | + tick(); |
| 2660 | + expect(combo.valid).toEqual(IgxComboState.INITIAL); |
| 2661 | + expect(combo.comboInput.valid).toEqual(IgxInputState.INITIAL); |
| 2662 | + expect(combo.selectedItems()).toEqual(['Missouri']); |
| 2663 | + expect(combo.value).toEqual('Missouri'); |
| 2664 | + expect(model.valid).toBeTrue(); |
| 2665 | + expect(model.touched).toBeFalse(); |
| 2666 | + |
| 2667 | + fixture.componentInstance.values = ['Missouri', 'Missouri']; |
| 2668 | + fixture.detectChanges(); |
| 2669 | + expect(combo.valid).toEqual(IgxComboState.INITIAL); |
| 2670 | + expect(combo.comboInput.valid).toEqual(IgxInputState.INITIAL); |
| 2671 | + expect(combo.selectedItems()).toEqual(['Missouri']); |
| 2672 | + expect(combo.value).toEqual('Missouri'); |
| 2673 | + expect(model.valid).toBeTrue(); |
| 2674 | + expect(model.touched).toBeFalse(); |
| 2675 | + |
| 2676 | + fixture.componentInstance.values = null; |
| 2677 | + fixture.detectChanges(); |
| 2678 | + tick(); |
| 2679 | + expect(combo.valid).toEqual(IgxComboState.INITIAL); |
| 2680 | + expect(combo.comboInput.valid).toEqual(IgxInputState.INITIAL); |
| 2681 | + expect(combo.selectedItems()).toEqual([]); |
| 2682 | + expect(combo.value).toEqual(''); |
| 2683 | + expect(model.valid).toBeFalse(); |
| 2684 | + expect(model.touched).toBeFalse(); |
| 2685 | + expect(model.dirty).toBeFalse(); |
| 2686 | + |
| 2687 | + combo.onBlur(); |
| 2688 | + fixture.detectChanges(); |
| 2689 | + expect(combo.valid).toEqual(IgxComboState.INVALID); |
| 2690 | + expect(combo.comboInput.valid).toEqual(IgxInputState.INVALID); |
| 2691 | + expect(model.valid).toBeFalse(); |
| 2692 | + expect(model.touched).toBeTrue(); |
| 2693 | + expect(model.dirty).toBeFalse(); |
| 2694 | + })); |
2646 | 2695 | it('should have correctly bound focus and blur handlers', () => { |
2647 | 2696 | spyOn(combo, 'onFocus'); |
2648 | 2697 | spyOn(combo, 'onBlur'); |
|
0 commit comments