ohayolibs
Version:
Ohayo is a set of essential modules for ohayojp.
168 lines (154 loc) • 5.38 kB
text/typescript
import { registerLocaleData } from '@angular/common';
import zh from '@angular/common/locales/zh';
import { Component, DebugElement, ViewChild } from '@angular/core';
import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { FormsModule } from '@angular/forms';
import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { createTestContext, dispatchMouseEvent } from '@ohayo/testing';
import { OhayoDateRangePickerShortcut } from '@ohayo/util';
import differenceInDays from 'date-fns/differenceInDays';
import { DatePickerModule } from './date-picker.module';
import { RangePickerComponent } from './range.component';
registerLocaleData(zh);
describe('components: date-picker: range', () => {
let fixture: ComponentFixture<TestComponent>;
let dl: DebugElement;
let context: TestComponent;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [DatePickerModule, FormsModule, NoopAnimationsModule],
declarations: [TestComponent],
});
({ fixture, dl, context } = createTestContext(TestComponent));
fixture.detectChanges();
spyOn(context, '_nzOnOpenChange');
spyOn(context, '_nzOnPanelChange');
spyOn(context, '_nzOnOk');
});
describe('#ngModel', () => {
it('should be get values via nz-range-picker', () => {
context.comp.valueChange([new Date(), new Date()]);
fixture.detectChanges();
expect(context.i.start != null).toBe(true);
expect(context.i.end != null).toBe(true);
});
it('should be set values via outside values', done => {
context.i = {
start: new Date(),
end: new Date(),
};
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(context.comp.value.length).toBe(2);
done();
});
});
it('should be invalid value when start & end include null value', done => {
context.i = {
start: new Date(),
end: null,
};
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(context.comp.value.length).toBe(0);
done();
});
});
it('should be disabled', () => {
context.comp.setDisabledState(true);
fixture.detectChanges();
expect(dl.queryAll(By.css('.ant-picker-disabled')).length).toBe(1);
});
});
describe('#events', () => {
it('#nzOnOpenChange', () => {
context.comp._nzOnOpenChange(true);
fixture.detectChanges();
expect(context._nzOnOpenChange).toHaveBeenCalled();
});
it('#nzOnPanelChange', () => {
context.comp._nzOnPanelChange(true);
fixture.detectChanges();
expect(context._nzOnPanelChange).toHaveBeenCalled();
});
it('#nzOnOk', () => {
context.comp._nzOnOk(true);
fixture.detectChanges();
expect(context._nzOnOk).toHaveBeenCalled();
});
});
describe('#shortcat', () => {
it('with true', fakeAsync(() => {
context.shortcut = true;
fixture.detectChanges();
openPicker();
getPickerFooterExtra().querySelectorAll('a')[0].click();
timeEnd();
expect(differenceInDays(context.i.end, context.i.start)).toBe(0);
}));
it('with false', fakeAsync(() => {
context.shortcut = false;
fixture.detectChanges();
openPicker();
expect(dl.query(By.css('.ant-picker-footer-extra')) == null).toBe(true);
}));
it('with null', fakeAsync(() => {
context.shortcut = null;
fixture.detectChanges();
openPicker();
expect(dl.query(By.css('.ant-picker-footer-extra')) == null).toBe(true);
}));
it('should be keeping open panel when closed is false', fakeAsync(() => {
context.shortcut = { closed: false, enabled: true };
fixture.detectChanges();
openPicker();
expect(dl.query(By.css('.ant-picker-footer-extra')) == null).toBe(false);
getPickerFooterExtra().querySelectorAll('a')[0].click();
const list = getPickerFooterExtra().querySelectorAll('a');
const shortcut = context.comp.shortcut as OhayoDateRangePickerShortcut;
expect(list.length).toBe(shortcut.list!.length);
list.forEach(el => {
el.click();
timeEnd();
});
timeEnd();
expect(dl.query(By.css('.ant-picker-footer-extra')) == null).toBe(false);
}));
});
function openPicker(): HTMLInputElement {
const el = dl.query(By.css('.ant-picker-input input')).nativeElement as HTMLInputElement;
dispatchMouseEvent(el, 'click');
timeEnd();
return el;
}
function timeEnd(): void {
fixture.detectChanges();
tick(500);
fixture.detectChanges();
}
function getPickerFooterExtra(): HTMLElement {
return dl.query(By.css('.ant-picker-footer-extra')).nativeElement as HTMLElement;
}
});
({
template: `
<range-picker
#comp
[(ngModel)]="i.start"
[(ngModelEnd)]="i.end"
(nzOnOpenChange)="_nzOnOpenChange()"
(nzOnPanelChange)="_nzOnPanelChange()"
(nzOnOk)="_nzOnOk()"
[shortcut]="shortcut"
></range-picker>
`,
})
class TestComponent {
('comp', { static: true }) comp: RangePickerComponent;
i: any = {};
shortcut: boolean | OhayoDateRangePickerShortcut | null = false;
_nzOnOpenChange(): void { }
_nzOnPanelChange(): void { }
_nzOnOk(): void { }
}