/// import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { DebugElement } from '@angular/core'; import { DatePicker } from './my-date-picker.component'; import { InputFocusDirective } from './directives/my-date-picker.input.directive'; import { FormGroup, FormControl } from '@angular/forms'; let comp: DatePicker; let fixture: ComponentFixture; let de: DebugElement; let el: HTMLElement; function getDateString(date: any): string { return date.getFullYear() + '-' + (date.getMonth() + 1 < 10 ? '0' + date.getMonth() + 1 : date.getMonth() + 1) + '-' + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()); } function getElement(id: string): DebugElement { return de.query(By.css(id)); } function getElements(id: string): Array { return de.queryAll(By.css(id)); } describe('MyDatePicker', () => { beforeEach(() => { TestBed.configureTestingModule({ declarations: [DatePicker, InputFocusDirective], }); fixture = TestBed.createComponent(DatePicker); comp = fixture.componentInstance; de = fixture.debugElement.query(By.css('.ng2-iq-datepicker')); el = de.nativeElement; }); it('set valid date', () => { comp.selectionDayTxt = '2016-08-22'; fixture.detectChanges(); let selection = getElement('.selection'); expect(selection.nativeElement.value).toContain('2016-08-22'); }); it('open/close selector', () => { fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); let selector = getElement('.selector'); expect(selector).toBe(null); btnpicker.nativeElement.click(); fixture.detectChanges(); selector = getElement('.selector'); expect(selector).not.toBe(null); btnpicker.nativeElement.click(); fixture.detectChanges(); selector = getElement('.selector'); expect(selector).toBe(null); }); it('select current day from the selector and clear', () => { let date = new Date(); comp.selectedMonth = { monthTxt: '', monthNbr: date.getMonth() + 1, year: date.getFullYear() }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let currday = getElement('.currday'); expect(currday).not.toBe(null); currday.triggerEventHandler('mousedown', { // tslint:disable-next-line:no-empty stopPropagation: () => {} }); let dateStr = getDateString(date); fixture.detectChanges(); let selection = getElement('.selection'); expect(selection.nativeElement.value).toContain(dateStr); fixture.detectChanges(); let btnclear = getElement('.btnclear'); btnclear.nativeElement.click(); expect(selection.nativeElement.value).toContain(''); }); it('select today button', () => { let date = new Date(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let today = getElement('.headertodaybtn'); expect(today).not.toBe(null); today.triggerEventHandler('mousedown', null); let dateStr = getDateString(date); fixture.detectChanges(); let selection = getElement('.selection'); expect(selection.nativeElement.value).toContain(dateStr); fixture.detectChanges(); let btnclear = getElement('.btnclear'); btnclear.nativeElement.click(); expect(selection.nativeElement.value).toContain(''); }); it('select previous month', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let prevmonth = getElement('.btn-prev-month'); expect(prevmonth).not.toBe(null); prevmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.monthTxt).toBe('Apr'); expect(comp.visibleMonth.monthNbr).toBe(4); expect(comp.visibleMonth.year).toBe(2016); }); it('select next month', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let nextmonth = getElement('.btn-next-month'); expect(nextmonth).not.toBe(null); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.monthTxt).toBe('Jun'); expect(comp.visibleMonth.monthNbr).toBe(6); expect(comp.visibleMonth.year).toBe(2016); }); it('select previous month january change year', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 1, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let prevmonth = getElement('.btn-prev-year'); expect(prevmonth).not.toBe(null); prevmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.year).toBe(2015); }); it('select next month december change year', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 12, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let nextmonth = getElement('.btn-next-year'); expect(nextmonth).not.toBe(null); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.year).toBe(2017); }); it('select previous month from selector', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.parseOptions(); fixture.detectChanges(); let prevmonth = getElement('.btn-prev-month'); expect(prevmonth).not.toBe(null); prevmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.monthNbr).toBe(4); expect(comp.visibleMonth.monthTxt).toBe('Apr'); prevmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.monthNbr).toBe(3); expect(comp.visibleMonth.monthTxt).toBe('Mar'); }); it('select next month from selector', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.parseOptions(); fixture.detectChanges(); let nextmonth = getElement('.btn-next-month'); expect(nextmonth).not.toBe(null); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.monthNbr).toBe(6); expect(comp.visibleMonth.monthTxt).toBe('Jun'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); expect(comp.visibleMonth.monthNbr).toBe(7); expect(comp.visibleMonth.monthTxt).toBe('Jul'); }); it('select previous year', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.parseOptions(); fixture.detectChanges(); let prevyear = getElement('.btn-prev-year'); expect(prevyear).not.toBe(null); prevyear.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); let yearLabel = getElement('.headeryeartxt span'); expect(yearLabel).not.toBe(null); expect(yearLabel.nativeElement.textContent).toBe('2015'); }); it('select next year', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.parseOptions(); fixture.detectChanges(); let nextyear = getElement('.btn-next-year'); expect(nextyear).not.toBe(null); nextyear.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); let yearLabel = getElement('.headeryeartxt span'); expect(yearLabel).not.toBe(null); expect(yearLabel.nativeElement.textContent).toBe('2017'); }); it('test calendar year 2016 month one by one - next month button', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 1, year: 2016 }; comp.options = { firstDayOfWeek: 'mo' }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let monthlabel = getElement('.monthlabel'); expect(monthlabel).not.toBe(null); expect(monthlabel.nativeElement.textContent.trim()).toBe('Jan'); fixture.detectChanges(); let yearlabel = getElement('.yearlabel'); expect(yearlabel).not.toBe(null); expect(yearlabel.nativeElement.textContent.trim()).toBe('2016'); comp.generateCalendar(1, 2016); let beginDate: Array = ['28', '1', '29', '28', '25', '30', '27', '1', '29', '26', '31', '28']; let endDate: Array = ['7', '13', '10', '8', '5', '10', '7', '11', '9', '6', '11', '8']; let i: number = 0; do { fixture.detectChanges(); let currmonth = getElements('.caltable tbody tr td'); expect(currmonth).not.toBe(null); expect(currmonth.length).toBe(42); expect(currmonth[0]).not.toBe(null); expect(currmonth[0].nativeElement.textContent.trim()).toBe(beginDate[i]); expect(currmonth[41]).not.toBe(null); expect(currmonth[41].nativeElement.textContent.trim()).toBe(endDate[i]); let nextMonthButton = getElement('.btn-next-month'); nextMonthButton.triggerEventHandler('mousedown', { preventDefault: () => {} }); i++; } while (i < 12); }); it('test calendar year 2016 month one by one - previous month button', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 12, year: 2016 }; comp.options = { firstDayOfWeek: 'mo' }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let monthlabel = getElement('.monthlabel'); expect(monthlabel).not.toBe(null); expect(monthlabel.nativeElement.textContent.trim()).toBe('Dec'); fixture.detectChanges(); let yearlabel = getElement('.yearlabel'); expect(yearlabel).not.toBe(null); expect(yearlabel.nativeElement.textContent.trim()).toBe('2016'); comp.generateCalendar(12, 2016); let beginDate: Array = ['28', '1', '29', '28', '25', '30', '27', '1', '29', '26', '31', '28']; let endDate: Array = ['7', '13', '10', '8', '5', '10', '7', '11', '9', '6', '11', '8']; let i: number = 11; do { fixture.detectChanges(); let currmonth = getElements('.caltable tbody tr td'); expect(currmonth).not.toBe(null); expect(currmonth.length).toBe(42); expect(currmonth[0]).not.toBe(null); expect(currmonth[0].nativeElement.textContent.trim()).toBe(beginDate[i]); expect(currmonth[41]).not.toBe(null); expect(currmonth[41].nativeElement.textContent.trim()).toBe(endDate[i]); let prevMonthButton = getElement('.btn-prev-month'); prevMonthButton.triggerEventHandler('mousedown', { preventDefault: () => {} }); i--; } while (i >= 0); }); // options it('options - dayLabels', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; comp.options = { dayLabels: { su: '1', mo: '2', tu: '3', we: '4', th: '5', fr: '6', sa: '7' }, firstDayOfWeek: 'su' }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let ths = getElements('.caltable thead tr th'); expect(ths.length).toBe(7); for (let i in ths) { let el = ths[i]; expect(parseInt(el.nativeElement.textContent)).toBe(parseInt(i) + 1); } }); it('options - monthLabels', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 1, year: 2016 }; comp.options = { monthLabels: { 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: '10', 11: '11', 12: '12' } }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let nextmonth = getElement('.btn-next-month'); expect(nextmonth).not.toBe(null); for (let i = 1; i <= 12; i++) { fixture.detectChanges(); let monthLabel = getElement('.headermonthtxt span'); expect(parseInt(monthLabel.nativeElement.textContent)).toBe(i); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); } }); it('options - date format', () => { comp.options = { dateFormat: 'dd.mm.yyyy', indicateInvalidDate: true }; comp.parseOptions(); let value = { target: { value: '2016-08-22' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(true); fixture.detectChanges(); let invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); value = { target: { value: '2016-08-2' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(true); value = { target: { value: '16.09/2016' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(true); value = { target: { value: '2016-08-xx' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(true); value = { target: { value: '16.09.999' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(true); value = { target: { value: '16.09.19999' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(true); value = { target: { value: '16.09.2016' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(false); comp.options = { dateFormat: 'dd mmm yyyy', indicateInvalidDate: true }; comp.parseOptions(); value = { target: { value: '2016-08-22' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(true); value = { target: { value: '22 Aug 2016' } }; comp.userDateInput(value); expect(comp.invalidDate).toBe(false); }); it('options - today button text', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 1, year: 2016 }; comp.options = { todayBtnTxt: 'test text' }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let headertodaybtn = getElement('.headertodaybtn'); expect(headertodaybtn).not.toBe(null); expect(headertodaybtn.nativeElement.textContent).toBe('test text'); }); it('options - first day of week', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; comp.options = { firstDayOfWeek: 'tu' }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let first = getElement('.caltable thead tr th:first-child'); expect(first).not.toBe(null); expect(first.nativeElement.textContent).toBe('Tue'); let last = getElement('.caltable thead tr th:last-child'); expect(last).not.toBe(null); expect(last.nativeElement.textContent).toBe('Mon'); }); it('options - sunday highlight', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; comp.options = { sunHighlight: true }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let sunday = getElement('.sunday'); expect(sunday).not.toBe(null); btnpicker.nativeElement.click(); comp.options = { sunHighlight: false }; comp.parseOptions(); fixture.detectChanges(); btnpicker.nativeElement.click(); comp.parseOptions(); fixture.detectChanges(); sunday = getElement('.sunday'); expect(sunday).toBe(null); }); it('options - current day marked', () => { comp.options = { markCurrentDay: true }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let currday = getElement('.currday'); expect(currday).not.toBe(null); btnpicker.nativeElement.click(); comp.options = { markCurrentDay: false }; comp.parseOptions(); fixture.detectChanges(); btnpicker.nativeElement.click(); comp.parseOptions(); fixture.detectChanges(); currday = getElement('.currday'); expect(currday).toBe(null); }); it('options - editable month and year', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 5, year: 2016 }; comp.options = { editableMonthAndYear: true }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let montlabel = getElement('.headermonthtxt span'); expect(montlabel).not.toBe(null); montlabel.nativeElement.click(); fixture.detectChanges(); let monthinput = getElement('.monthinput'); expect(monthinput).not.toBe(null); comp.userMonthInput({ target: { value: 'jan' } }); fixture.detectChanges(); montlabel = getElement('.headermonthtxt span'); expect(montlabel).not.toBe(null); expect(montlabel.nativeElement.textContent).toBe('Jan'); fixture.detectChanges(); let yearlabel = getElement('.headeryeartxt span'); expect(yearlabel).not.toBe(null); yearlabel.nativeElement.click(); fixture.detectChanges(); let yearinput = getElement('.yearinput'); expect(yearinput).not.toBe(null); comp.userYearInput({ target: { value: '2019' } }); fixture.detectChanges(); yearlabel = getElement('.headeryeartxt span'); expect(yearlabel).not.toBe(null); expect(yearlabel.nativeElement.textContent).toBe('2019'); }); it('options - min year', () => { comp.visibleMonth = { monthTxt: 'May', monthNbr: 5, year: 2016 }; comp.options = { minYear: 2000 }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let yearlabel = getElement('.headeryeartxt span'); expect(yearlabel).not.toBe(null); yearlabel.nativeElement.click(); fixture.detectChanges(); let yearinput = getElement('.yearinput'); expect(yearinput).not.toBe(null); comp.userYearInput({ target: { value: 1999 } }); fixture.detectChanges(); let invalidyear = getElement('.invalidyear'); expect(invalidyear).not.toBe(null); comp.userYearInput({ target: { value: 2000 } }); fixture.detectChanges(); yearlabel = getElement('.headeryeartxt span'); expect(yearlabel).not.toBe(null); expect(yearlabel.nativeElement.textContent).toBe('2000'); }); it('options - max year', () => { comp.visibleMonth = { monthTxt: 'May', monthNbr: 5, year: 2016 }; comp.options = { maxYear: 2020 }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let yearlabel = getElement('.headeryeartxt span'); expect(yearlabel).not.toBe(null); yearlabel.nativeElement.click(); fixture.detectChanges(); let yearinput = getElement('.yearinput'); expect(yearinput).not.toBe(null); comp.userYearInput({ target: { value: 2021 } }); fixture.detectChanges(); let invalidyear = getElement('.invalidyear'); expect(invalidyear).not.toBe(null); comp.userYearInput({ target: { value: 2020 } }); fixture.detectChanges(); yearlabel = getElement('.headeryeartxt span'); expect(yearlabel).not.toBe(null); expect(yearlabel.nativeElement.textContent).toBe('2020'); }); it('options - disable until', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { disableUntil: { year: 2016, month: 10, day: 5 } }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.generateCalendar(10, 2016); fixture.detectChanges(); let disabled = getElements('tr .disabled'); expect(disabled).not.toBe(null); expect(disabled.length).toBe(10); let firstDisabled = disabled[0]; expect(firstDisabled.nativeElement.textContent.trim()).toBe('26'); let lastDisabled = disabled[disabled.length - 1]; expect(lastDisabled.nativeElement.textContent.trim()).toBe('5'); fixture.detectChanges(); lastDisabled.nativeElement.click(); let selection = getElement('.selection'); expect(selection.nativeElement.value).toBe(''); fixture.detectChanges(); let selectableDays = getElements('.tablesingleday'); expect(selectableDays).not.toBe(null); expect(selectableDays.length).toBe(26); selectableDays[0].triggerEventHandler('mousedown', { // tslint:disable-next-line:no-empty stopPropagation: () => {} }); fixture.detectChanges(); selection = getElement('.selection'); expect(selection.nativeElement.value).toContain('2016-10-06'); }); it('options - disable since', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { disableSince: { year: 2016, month: 10, day: 30 } }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.generateCalendar(10, 2016); fixture.detectChanges(); let disabled = getElements('tr .disabled'); expect(disabled).not.toBe(null); expect(disabled.length).toBe(8); let firstDisabled = disabled[0]; expect(firstDisabled.nativeElement.textContent.trim()).toBe('30'); let lastDisabled = disabled[disabled.length - 1]; expect(lastDisabled.nativeElement.textContent.trim()).toBe('6'); fixture.detectChanges(); lastDisabled.nativeElement.click(); let selection = getElement('.selection'); expect(selection.nativeElement.value).toBe(''); fixture.detectChanges(); let selectableDays = getElements('.tablesingleday'); expect(selectableDays).not.toBe(null); expect(selectableDays.length).toBe(29); selectableDays[5].triggerEventHandler('mousedown', { // tslint:disable-next-line:no-empty stopPropagation: () => {} }); fixture.detectChanges(); selection = getElement('.selection'); expect(selection.nativeElement.value).toContain('2016-10-06'); }); it('options - disable days one by one', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { disableDays: [{ year: 2016, month: 10, day: 5 }, { year: 2016, month: 10, day: 10 }] }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.generateCalendar(10, 2016); fixture.detectChanges(); let disabled = getElements('tr .disabled'); expect(disabled).not.toBe(null); expect(disabled.length).toBe(2); let firstDisabled = disabled[0]; expect(firstDisabled.nativeElement.textContent.trim()).toBe('5'); let lastDisabled = disabled[1]; expect(lastDisabled.nativeElement.textContent.trim()).toBe('10'); }); it('options - disable weekends', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { firstDayOfWeek: 'mo', disableWeekends: true }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.generateCalendar(10, 2016); fixture.detectChanges(); let disabled = getElements('tr .disabled'); expect(disabled).not.toBe(null); expect(disabled.length).toBe(12); let firstDisabled = disabled[0]; expect(firstDisabled.nativeElement.textContent.trim()).toBe('1'); let secondDisabled = disabled[1]; expect(secondDisabled.nativeElement.textContent.trim()).toBe('2'); let lastDisabled = disabled[disabled.length - 1]; expect(lastDisabled.nativeElement.textContent.trim()).toBe('6'); fixture.detectChanges(); firstDisabled.nativeElement.click(); let selection = getElement('.selection'); expect(selection.nativeElement.value).toBe(''); fixture.detectChanges(); secondDisabled.nativeElement.click(); selection = getElement('.selection'); expect(selection.nativeElement.value).toBe(''); fixture.detectChanges(); let selectableDays = getElements('.tablesingleday'); expect(selectableDays).not.toBe(null); expect(selectableDays.length).toBe(21); selectableDays[0].triggerEventHandler('mousedown', { // tslint:disable-next-line:no-empty stopPropagation: () => {} }); fixture.detectChanges(); selection = getElement('.selection'); expect(selection.nativeElement.value).toContain('2016-10-03'); }); it('options - inline', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { inline: true }; comp.parseOptions(); fixture.detectChanges(); let selector = getElement('.selector'); expect(selector).not.toBe(null); fixture.detectChanges(); let selectiongroup = getElement('.selectiongroup'); expect(selectiongroup).toBe(null); }); it('options - height', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { height: '50px' }; comp.parseOptions(); fixture.detectChanges(); let selection = getElement('.selection'); expect(selection).not.toBe(null); expect(selection.styles['height']).toBe('50px'); }); it('options - width', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { width: '300px' }; comp.parseOptions(); fixture.detectChanges(); expect(de).not.toBe(null); expect(de.styles['width']).toBe('300px'); comp.options = { width: '20%' }; comp.parseOptions(); fixture.detectChanges(); expect(de).not.toBe(null); expect(de.styles['width']).toBe('20%'); }); it('options - align selector right', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { alignSelectorRight: true }; fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); comp.parseOptions(); fixture.detectChanges(); let alignselectorright = getElement('.alignselectorright'); expect(alignselectorright).not.toBe(null); comp.options = { alignSelectorRight: false }; comp.parseOptions(); fixture.detectChanges(); alignselectorright = getElement('.alignselectorright'); expect(alignselectorright).toBe(null); }); it('options - indicate invalid date', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy' }; comp.parseOptions(); comp.userDateInput({ target: { value: '2016-08-22' } }); fixture.detectChanges(); let invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '2016-08-xx' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '2016-08-99' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '10.10.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); }); it('options - disableUntil input dates validation', () => { comp.options = { indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy', disableUntil: { year: 2016, month: 11, day: 4 } }; comp.parseOptions(); comp.userDateInput({ target: { value: '11.12.2015' } }); fixture.detectChanges(); let invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '11.06.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '04.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '05.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); comp.options = { indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy', disableUntil: { year: 0, month: 0, day: 0 } }; comp.parseOptions(); comp.userDateInput({ target: { value: '11.12.2015' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); }); it('options - disableSince input dates validation', () => { comp.options = { indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy', disableSince: { year: 2016, month: 11, day: 22 } }; comp.parseOptions(); comp.userDateInput({ target: { value: '08.12.2017' } }); fixture.detectChanges(); let invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '08.12.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '23.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '21.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); comp.options = { indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy', disableSince: { year: 0, month: 0, day: 0 } }; comp.parseOptions(); comp.userDateInput({ target: { value: '11.12.2015' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); }); it('options - disable weekends input date validation', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 11, year: 2016 }; comp.options = { indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy', disableWeekends: true, firstDayOfWeek: 'mo' }; comp.parseOptions(); comp.userDateInput({ target: { value: '05.11.2016' } }); fixture.detectChanges(); let invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '06.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '12.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '13.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '19.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '20.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '26.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '27.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '04.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); }); it('options - disableDays input date validation', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 11, year: 2016 }; comp.options = { indicateInvalidDate: true, dateFormat: 'dd.mm.yyyy', disableDays: [ { year: 2016, month: 11, day: 1 }, { year: 2016, month: 11, day: 3 }, { year: 2016, month: 11, day: 5 }, { year: 2016, month: 11, day: 7 } ], firstDayOfWeek: 'mo' }; comp.parseOptions(); comp.userDateInput({ target: { value: '01.11.2016' } }); fixture.detectChanges(); let invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '03.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '05.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '07.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).not.toBe(null); comp.userDateInput({ target: { value: '02.11.2016' } }); fixture.detectChanges(); invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); }); it('options - show date format in placeholder', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { showDateFormatPlaceholder: true, dateFormat: 'dd.mm.yyyy' }; comp.parseOptions(); fixture.detectChanges(); let selection = getElement('.selection'); expect(selection).not.toBe(null); expect(selection.properties['placeholder']).toBe(comp.opts.dateFormat); comp.options = { showDateFormatPlaceholder: false, dateFormat: 'dd.mm.yyyy' }; comp.parseOptions(); fixture.detectChanges(); selection = getElement('.selection'); expect(selection).not.toBe(null); expect(selection.properties['placeholder']).toBe(''); }); it('options - disable component', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 10, year: 2016 }; comp.options = { componentDisabled: true }; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let selector = getElement('.selector'); expect(selector).toBe(null); fixture.detectChanges(); let selection = getElement('.selection'); selection.nativeElement.value = '2016-11-14'; fixture.detectChanges(); expect(selection.nativeElement.value).toContain(''); }); it('locale - use fr locale', () => { comp.selectedMonth = { monthTxt: '', monthNbr: 1, year: 2016 }; comp.locale = 'fr'; comp.parseOptions(); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let days = getElements('.caltable thead tr th'); expect(days.length).toBe(7); expect(days[0].nativeElement.textContent).toBe('Lun'); expect(days[1].nativeElement.textContent).toBe('Mar'); expect(days[2].nativeElement.textContent).toBe('Mer'); expect(days[3].nativeElement.textContent).toBe('Jeu'); expect(days[4].nativeElement.textContent).toBe('Ven'); expect(days[5].nativeElement.textContent).toBe('Sam'); expect(days[6].nativeElement.textContent).toBe('Dim'); fixture.detectChanges(); let nextmonth = getElement('.btn-next-month'); expect(nextmonth).not.toBe(null); fixture.detectChanges(); let monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Jan'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Fév'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Mar'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Avr'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Mai'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Juin'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Juil'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Aoû'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Sep'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Oct'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Nov'); nextmonth.triggerEventHandler('mousedown', { preventDefault: () => {} }); fixture.detectChanges(); monthLabel = getElement('.headermonthtxt span'); expect(monthLabel.nativeElement.textContent).toBe('Déc'); fixture.detectChanges(); let headertodaybtn = getElement('.headertodaybtn'); expect(headertodaybtn).not.toBe(null); expect(headertodaybtn.nativeElement.textContent).toBe('Aujourd\'hui'); fixture.detectChanges(); let firstDayOfWeek = getElement('.caltable thead tr th:first-child'); expect(firstDayOfWeek).not.toBe(null); expect(firstDayOfWeek.nativeElement.textContent).toBe('Lun'); fixture.detectChanges(); let sunday = getElement('.sunday'); expect(sunday).not.toBe(null); comp.userDateInput({ target: { value: '10/10/2016' } }); expect(comp.invalidDate).toBe(false); fixture.detectChanges(); let invaliddate = getElement('.invaliddate'); expect(invaliddate).toBe(null); }); it('selDate - initially selected date', () => { comp.selectionDayTxt = '2017-10-11'; comp.selectedDate = comp.parseSelectedDate(comp.selectionDayTxt); comp.parseOptions(); fixture.detectChanges(); let selection = getElement('.selection'); expect(selection).not.toBe(null); expect(selection.nativeElement.value).toContain(comp.selectionDayTxt); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let selectedday = getElement('.selectedday div span'); expect(selectedday).not.toBe(null); expect(selectedday.nativeElement.textContent).toContain('11'); fixture.detectChanges(); let monthLabel = getElement('.headermonthtxt span'); expect(monthLabel).not.toBe(null); expect(monthLabel.nativeElement.textContent).toBe('Oct'); fixture.detectChanges(); let yearLabel = getElement('.headeryeartxt span'); expect(yearLabel).not.toBe(null); expect(yearLabel.nativeElement.textContent).toBe('2017'); }); it('defaultMonth - initially selected month', () => { comp.selectedMonth = comp.parseSelectedMonth('2019-08'); fixture.detectChanges(); let btnpicker = getElement('.btnpicker'); btnpicker.nativeElement.click(); fixture.detectChanges(); let monthLabel = getElement('.headermonthtxt span'); expect(monthLabel).not.toBe(null); expect(monthLabel.nativeElement.textContent).toBe('Aug'); fixture.detectChanges(); let yearLabel = getElement('.headeryeartxt span'); expect(yearLabel).not.toBe(null); expect(yearLabel.nativeElement.textContent).toBe('2019'); }); });