Skip to content

Commit 08730a7

Browse files
committed
test(drp): projected clear icons - single&two inputs
1 parent 9c2bf35 commit 08730a7

File tree

1 file changed

+99
-9
lines changed

1 file changed

+99
-9
lines changed

projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.spec.ts

Lines changed: 99 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { Subject } from 'rxjs';
2020
import { AsyncPipe } from '@angular/common';
2121
import { AnimationService } from '../services/animation/animation';
2222
import { IgxAngularAnimationService } from '../services/animation/angular-animation-service';
23-
import { IgxPickerToggleComponent } from '../date-common/picker-icons.common';
23+
import { IgxPickerClearComponent, IgxPickerToggleComponent } from '../date-common/picker-icons.common';
2424
import { IgxIconComponent } from '../icon/icon.component';
2525
import { registerLocaleData } from "@angular/common";
2626
import localeJa from "@angular/common/locales/ja";
@@ -401,13 +401,15 @@ describe('IgxDateRangePicker', () => {
401401
});
402402

403403
describe('Clear tests', () => {
404+
const range = { start: new Date(2025, 1, 1), end: new Date(2025, 1, 2) };
405+
404406
describe('Default clear icon', () => {
405407
it('should display default clear icon when value is set', () => {
406408
const inputGroup = fixture.debugElement.query(By.directive(IgxInputGroupComponent));
407409
let suffix = inputGroup.query(By.directive(IgxSuffixDirective));
408410
expect(suffix).toBeNull();
409411

410-
dateRange.value = { start: new Date(2025, 1, 1), end: new Date(2025, 1, 2) };
412+
dateRange.value = range;
411413
fixture.detectChanges();
412414

413415
suffix = inputGroup.query(By.directive(IgxSuffixDirective));
@@ -417,7 +419,7 @@ describe('IgxDateRangePicker', () => {
417419
});
418420

419421
it('should clear the value when clicking the default clear icon (suffix)', fakeAsync(() => {
420-
dateRange.value = { start: new Date(2025, 1, 1), end: new Date(2025, 1, 2) };
422+
dateRange.value = range;
421423
fixture.detectChanges();
422424

423425
const inputGroup = fixture.debugElement.query(By.directive(IgxInputGroupComponent));
@@ -439,7 +441,6 @@ describe('IgxDateRangePicker', () => {
439441
fixture.detectChanges();
440442

441443
dateRange = fixture.debugElement.queryAll(By.directive(IgxDateRangePickerComponent))[0].componentInstance;
442-
const range = { start: new Date(2025, 1, 1), end: new Date(2025, 1, 2) };
443444
dateRange.value = range;
444445
fixture.detectChanges();
445446

@@ -463,7 +464,34 @@ describe('IgxDateRangePicker', () => {
463464
}));
464465
});
465466

466-
//xdescribe('Projected clear icon', () => {});
467+
describe('Projected clear icon', () => {
468+
it('should clear the value when clicking the projected clear icon', fakeAsync(() => {
469+
fixture = TestBed.createComponent(DateRangeTemplatesComponent);
470+
fixture.detectChanges();
471+
472+
dateRange = fixture.debugElement.queryAll(By.directive(IgxDateRangePickerComponent))[4].componentInstance;
473+
474+
const pickerClear = fixture.debugElement.queryAll(By.directive(IgxPickerClearComponent))[0];
475+
// Projected clear icon is rendered even if value is unassigned
476+
expect(pickerClear).not.toBeNull();
477+
478+
const suffixes = dateRange.element.nativeElement.querySelectorAll(CSS_CLASS_INPUT_END);
479+
expect(suffixes.length).toBe(1);
480+
// the default clear icon is overridden by the projected one
481+
expect(suffixes[0].textContent.trim()).toEqual('delete');
482+
483+
dateRange.value = range;
484+
fixture.detectChanges();
485+
486+
spyOn(dateRange.valueChange, 'emit');
487+
UIInteractions.simulateClickAndSelectEvent(pickerClear.nativeElement);
488+
tick();
489+
fixture.detectChanges();
490+
491+
expect(dateRange.value).toBeNull();
492+
expect(dateRange.valueChange.emit).toHaveBeenCalledOnceWith(null);
493+
}));
494+
});
467495
});
468496

469497
describe('Properties & events tests', () => {
@@ -1629,6 +1657,39 @@ describe('IgxDateRangePicker', () => {
16291657
expect(dateRange.locale).toEqual('en-US');
16301658
expect(dateRange.weekStart).toEqual(WEEKDAYS.FRIDAY);
16311659
}));
1660+
1661+
it('should render projected clear icons which clear the range on click', () => {
1662+
fixture = TestBed.createComponent(DateRangeTwoInputsClearComponent);
1663+
fixture.detectChanges();
1664+
1665+
const drp = fixture.debugElement.query(By.directive(IgxDateRangePickerComponent)).componentInstance;
1666+
const start = fixture.debugElement.query(By.directive(IgxDateRangeStartComponent));
1667+
const end = fixture.debugElement.query(By.directive(IgxDateRangeEndComponent));
1668+
1669+
const startSuffix = start.nativeElement.querySelectorAll(CSS_CLASS_INPUT_END)[0];
1670+
const endSuffix = end.nativeElement.querySelectorAll(CSS_CLASS_INPUT_END)[0];
1671+
1672+
expect(startSuffix.innerText).toBe('delete');
1673+
expect(endSuffix.innerText).toBe('delete');
1674+
1675+
const pickerClearComponents = fixture.debugElement.queryAll(By.directive(IgxPickerClearComponent));
1676+
1677+
drp.value = { start: new Date(2025, 0, 1), end: new Date(2025, 0, 2) };
1678+
fixture.detectChanges();
1679+
1680+
UIInteractions.simulateClickAndSelectEvent(pickerClearComponents[0].nativeNode);
1681+
fixture.detectChanges();
1682+
1683+
expect(drp.value).toEqual(null);
1684+
1685+
drp.value = { start: new Date(2025, 0, 1), end: new Date(2025, 0, 2) };
1686+
fixture.detectChanges();
1687+
1688+
UIInteractions.simulateClickAndSelectEvent(pickerClearComponents[1].nativeNode);
1689+
fixture.detectChanges();
1690+
1691+
expect(drp.value).toEqual(null);
1692+
});
16321693
});
16331694
});
16341695
});
@@ -1722,6 +1783,29 @@ export class DateRangeTwoInputsNgModelTestComponent extends DateRangeTestCompone
17221783
public range = { start: new Date(2020, 1, 1), end: new Date(2020, 1, 4) };
17231784
}
17241785

1786+
@Component({
1787+
selector: 'igx-date-range-two-inputs-clear',
1788+
template: `
1789+
<igx-date-range-picker>
1790+
<igx-date-range-start>
1791+
<input igxInput igxDateTimeEditor type="text">
1792+
<igx-picker-clear igxSuffix>
1793+
<igx-icon>delete</igx-icon>
1794+
</igx-picker-clear>
1795+
</igx-date-range-start>
1796+
<igx-date-range-end>
1797+
<input igxInput igxDateTimeEditor type="text">
1798+
<igx-picker-clear igxSuffix>
1799+
<igx-icon>delete</igx-icon>
1800+
</igx-picker-clear>
1801+
</igx-date-range-end>
1802+
</igx-date-range-picker>`,
1803+
imports: [IgxDateRangePickerComponent, IgxDateRangeStartComponent, IgxDateRangeEndComponent, IgxInputDirective,
1804+
IgxDateTimeEditorDirective, FormsModule, IgxPickerClearComponent, IgxIconComponent, IgxSuffixDirective]
1805+
})
1806+
export class DateRangeTwoInputsClearComponent extends DateRangeTestComponent {
1807+
}
1808+
17251809
@Component({
17261810
selector: 'igx-date-range-single-input-label-test',
17271811
template: `
@@ -1777,18 +1861,24 @@ export class DateRangeCustomComponent extends DateRangeTestComponent {
17771861
<igx-icon>flight_land</igx-icon>
17781862
</igx-picker-toggle>
17791863
<igx-suffix>
1780-
<igx-icon>
1781-
calendar_view_day
1782-
</igx-icon>
1783-
</igx-suffix>
1864+
<igx-icon>
1865+
calendar_view_day
1866+
</igx-icon>
1867+
</igx-suffix>
17841868
</igx-date-range-end>
1869+
</igx-date-range-picker>
1870+
<igx-date-range-picker>
1871+
<igx-picker-clear igxSuffix>
1872+
<igx-icon>delete</igx-icon>
1873+
</igx-picker-clear>
17851874
</igx-date-range-picker>
17861875
`,
17871876
imports: [
17881877
IgxDateRangePickerComponent,
17891878
IgxDateRangeStartComponent,
17901879
IgxDateRangeEndComponent,
17911880
IgxPickerToggleComponent,
1881+
IgxPickerClearComponent,
17921882
IgxIconComponent,
17931883
FormsModule,
17941884
IgxInputDirective,

0 commit comments

Comments
 (0)