UNPKG

js-year-calendar

Version:

A fully customizable year calendar widget

375 lines (266 loc) 12.4 kB
require('../dist/js-year-calendar'); require('../locales/js-year-calendar.fr'); beforeEach(() => { document.body.innerHTML = '<div id="calendar"></div>'; }); const currentYear = new Date().getFullYear(); test('get / set allow overlap method', () => { const calendar = new Calendar('#calendar', { allowOverlap: true }); expect(calendar.getAllowOverlap()).toEqual(true); calendar.setAllowOverlap(false); expect(calendar.getAllowOverlap()).toEqual(false); calendar.setAllowOverlap(true); expect(calendar.getAllowOverlap()).toEqual(true); }); test('get / set always half day method', () => { const calendar = new Calendar('#calendar', { alwaysHalfDay: true }); expect(calendar.getAlwaysHalfDay()).toEqual(true); calendar.setAlwaysHalfDay(false); expect(calendar.getAlwaysHalfDay()).toEqual(false); calendar.setAlwaysHalfDay(true); expect(calendar.getAlwaysHalfDay()).toEqual(true); }); test('get / set context menu items method', () => { const items = [{ name: 'test1'}, { name: 'test2' }]; const calendar = new Calendar('#calendar', { contextMenuItems: items }); expect(calendar.getContextMenuItems()).toEqual(items); calendar.setContextMenuItems([]); expect(calendar.getContextMenuItems()).toEqual([]); calendar.setContextMenuItems(items); expect(calendar.getContextMenuItems()).toEqual(items); }); test('get / set custom datasource renderer method', () => { const customRenderer = () => {}; const calendar = new Calendar('#calendar', { customDataSourceRenderer: customRenderer }); expect(calendar.getCustomDataSourceRenderer()).toEqual(customRenderer); calendar.setCustomDataSourceRenderer(null); expect(calendar.getCustomDataSourceRenderer()).toEqual(null); calendar.setCustomDataSourceRenderer(customRenderer); expect(calendar.getCustomDataSourceRenderer()).toEqual(customRenderer); }); test('get / set custom day renderer method', () => { const customRenderer = () => {}; const calendar = new Calendar('#calendar', { customDayRenderer: customRenderer }); expect(calendar.getCustomDayRenderer()).toEqual(customRenderer); calendar.setCustomDayRenderer(null); expect(calendar.getCustomDayRenderer()).toEqual(null); calendar.setCustomDayRenderer(customRenderer); expect(calendar.getCustomDayRenderer()).toEqual(customRenderer); }); test('get / set datasource method', () => { const items = [{ name: 'test1'}, { name: 'test2' }]; const calendar = new Calendar('#calendar', { dataSource: items }); expect(calendar.getDataSource()).toEqual(items); calendar.setDataSource([]); expect(calendar.getDataSource()).toEqual([]); calendar.setDataSource(items); expect(calendar.getDataSource()).toEqual(items); // Dynamic data source const dataSource = jest.fn(() => []); calendar.setDataSource(dataSource); expect(calendar.getDataSource()).toEqual(dataSource); expect(dataSource).toHaveBeenCalledTimes(1); expect(dataSource).toHaveBeenLastCalledWith(currentYear); }); test('get / set disabled days method', () => { const items = [new Date(2000, 1, 2), new Date(2020, 5, 8)]; const calendar = new Calendar('#calendar', { disabledDays: items }); expect(calendar.getDisabledDays()).toEqual(items); calendar.setDisabledDays([]); expect(calendar.getDisabledDays()).toEqual([]); calendar.setDisabledDays(items); expect(calendar.getDisabledDays()).toEqual(items); }); test('get / set disabled week days method', () => { const items = [1, 5]; const calendar = new Calendar('#calendar', { disabledWeekDays: items }); expect(calendar.getDisabledWeekDays()).toEqual(items); calendar.setDisabledWeekDays([]); expect(calendar.getDisabledWeekDays()).toEqual([]); calendar.setDisabledWeekDays(items); expect(calendar.getDisabledWeekDays()).toEqual(items); }); test('get / set display disabled data source method', () => { const calendar = new Calendar('#calendar', { displayDisabledDataSource: true }); expect(calendar.getDisplayDisabledDataSource()).toEqual(true); calendar.setDisplayDisabledDataSource(false); expect(calendar.getDisplayDisabledDataSource()).toEqual(false); calendar.setDisplayDisabledDataSource(true); expect(calendar.getDisplayDisabledDataSource()).toEqual(true); }); test('get / set display header method', () => { const calendar = new Calendar('#calendar', { displayHeader: true }); expect(calendar.getDisplayHeader()).toEqual(true); calendar.setDisplayHeader(false); expect(calendar.getDisplayHeader()).toEqual(false); calendar.setDisplayHeader(true); expect(calendar.getDisplayHeader()).toEqual(true); }); test('get / set display week number method', () => { const calendar = new Calendar('#calendar', { displayWeekNumber: true }); expect(calendar.getDisplayWeekNumber()).toEqual(true); calendar.setDisplayWeekNumber(false); expect(calendar.getDisplayWeekNumber()).toEqual(false); calendar.setDisplayWeekNumber(true); expect(calendar.getDisplayWeekNumber()).toEqual(true); }); test('get / set enable context menu method', () => { const calendar = new Calendar('#calendar', { enableContextMenu: true }); expect(calendar.getEnableContextMenu()).toEqual(true); calendar.setEnableContextMenu(false); expect(calendar.getEnableContextMenu()).toEqual(false); calendar.setEnableContextMenu(true); expect(calendar.getEnableContextMenu()).toEqual(true); }); test('get / set enable range selection method', () => { const calendar = new Calendar('#calendar', { enableRangeSelection: true }); expect(calendar.getEnableRangeSelection()).toEqual(true); calendar.setEnableRangeSelection(false); expect(calendar.getEnableRangeSelection()).toEqual(false); calendar.setEnableRangeSelection(true); expect(calendar.getEnableRangeSelection()).toEqual(true); }); test('get events method', () => { const calendar = new Calendar('#calendar', { dataSource: [ { startDate: new Date(currentYear, 6, 10), endDate: new Date(currentYear, 6, 20) }, { startDate: new Date(currentYear, 6, 19), endDate: new Date(currentYear, 6, 20) }, { startDate: new Date(currentYear, 6, 20), endDate: new Date(currentYear, 6, 20) } ] }); expect(calendar.getEvents(new Date(currentYear, 6, 9)).length).toEqual(0); expect(calendar.getEvents(new Date(currentYear, 6, 18)).length).toEqual(1); expect(calendar.getEvents(new Date(currentYear, 6, 19)).length).toEqual(2); expect(calendar.getEvents(new Date(currentYear, 6, 20)).length).toEqual(3); }); test('get events on range method', () => { const calendar = new Calendar('#calendar', { dataSource: [ { startDate: new Date(currentYear, 6, 10), endDate: new Date(currentYear, 6, 15) }, { startDate: new Date(currentYear, 6, 20), endDate: new Date(currentYear, 6, 22) }, { startDate: new Date(currentYear, 6, 25), endDate: new Date(currentYear, 6, 27) } ] }); expect(calendar.getEventsOnRange(new Date(currentYear, 6, 5), new Date(currentYear, 6, 8)).length).toEqual(0); expect(calendar.getEventsOnRange(new Date(currentYear, 6, 8), new Date(currentYear, 6, 12)).length).toEqual(1); expect(calendar.getEventsOnRange(new Date(currentYear, 6, 8), new Date(currentYear, 6, 18)).length).toEqual(1); expect(calendar.getEventsOnRange(new Date(currentYear, 6, 8), new Date(currentYear, 6, 20, 1)).length).toEqual(2); expect(calendar.getEventsOnRange(new Date(currentYear, 6, 8), new Date(currentYear, 7, 1)).length).toEqual(3); }); test('get / set hidden week days method', () => { const items = [1, 5]; const calendar = new Calendar('#calendar', { hiddenWeekDays: items }); expect(calendar.getHiddenWeekDays()).toEqual(items); calendar.setHiddenWeekDays([]); expect(calendar.getHiddenWeekDays()).toEqual([]); calendar.setHiddenWeekDays(items); expect(calendar.getHiddenWeekDays()).toEqual(items); }); test('get / set language method', () => { const calendar = new Calendar('#calendar', { language: 'fr' }); expect(calendar.getLanguage()).toEqual('fr'); calendar.setLanguage('en'); expect(calendar.getLanguage()).toEqual('en'); // Non existent language, should keep english calendar.setLanguage('zz'); expect(calendar.getLanguage()).toEqual('en'); }); test('get / set loading template method', () => { const calendar = new Calendar('#calendar', { loadingTemplate: 'Test' }); expect(calendar.getLoadingTemplate()).toEqual('Test'); calendar.setLoadingTemplate(null); expect(calendar.getLoadingTemplate()).toBeNull; calendar.setLoadingTemplate('Test 2'); expect(calendar.getLoadingTemplate()).toEqual('Test 2'); }); test('get / set max date method', () => { const date = new Date(2010, 2, 5); const calendar = new Calendar('#calendar', { maxDate: date }); expect(calendar.getMaxDate()).toEqual(date); calendar.setMaxDate(null); expect(calendar.getMaxDate()).toEqual(null); calendar.setMaxDate(date); expect(calendar.getMaxDate()).toEqual(date); }); test('get / set min date method', () => { const date = new Date(2010, 2, 5); const calendar = new Calendar('#calendar', { minDate: date }); expect(calendar.getMinDate()).toEqual(date); calendar.setMinDate(null); expect(calendar.getMinDate()).toEqual(null); calendar.setMinDate(date); expect(calendar.getMinDate()).toEqual(date); }); test('get / set round range limits method', () => { const calendar = new Calendar('#calendar', { roundRangeLimits: true }); expect(calendar.getRoundRangeLimits()).toEqual(true); calendar.setRoundRangeLimits(false); expect(calendar.getRoundRangeLimits()).toEqual(false); calendar.setRoundRangeLimits(true); expect(calendar.getRoundRangeLimits()).toEqual(true); }); test('get / set style method', () => { const calendar = new Calendar('#calendar', { style: 'custom' }); expect(calendar.getStyle()).toEqual('custom'); calendar.setStyle('background'); expect(calendar.getStyle()).toEqual('background'); // Invalid style calendar.setStyle('test'); expect(calendar.getStyle()).toEqual('border'); // Invalid style calendar.setStyle(1); expect(calendar.getStyle()).toEqual('border'); }); test('get week number method', () => { const calendar = new Calendar('#calendar'); expect(calendar.getWeekNumber(new Date(2000, 0, 1))).toEqual(52); expect(calendar.getWeekNumber(new Date(2000, 0, 5))).toEqual(1); }); test('get / set week start method', () => { const calendar = new Calendar('#calendar', { weekStart: 5 }); expect(calendar.getWeekStart()).toEqual(5); calendar.setWeekStart(2); expect(calendar.getWeekStart()).toEqual(2); calendar.setWeekStart(null); expect(calendar.getWeekStart()).toEqual(0); calendar.setLanguage('fr'); expect(calendar.getWeekStart()).toEqual(1); // By default, it will take the week start of the current locale }); test('get / set year method', () => { const calendar = new Calendar('#calendar', { startYear: 2000 }); expect(calendar.getYear()).toEqual(2000); calendar.setYear(2010); expect(calendar.getYear()).toEqual(2010); calendar.setYear('test'); expect(calendar.getYear()).toEqual(2010); }); test('add events method', () => { const calendar = new Calendar('#calendar', { dataSource: [ { startDate: new Date(currentYear, 6, 10), endDate: new Date(currentYear, 6, 20) } ] }); calendar.addEvent({ startDate: new Date(currentYear, 7, 1), endDate: new Date(currentYear, 8, 1) }); expect(calendar.getDataSource().length).toEqual(2); });