UNPKG

axiom-react-calendar

Version:

A component for picking dates or date periods for your React application.

1,169 lines (849 loc) 33.1 kB
import { getYear, getMonth, getMonthIndex, getDay, getDayOfWeek, getBeginOfCenturyYear, getBeginOfCentury, getEndOfCentury, getCenturyRange, getBeginOfPreviousCentury, getEndOfPreviousCentury, getBeginOfNextCentury, getBeginOfDecadeYear, getBeginOfDecade, getEndOfDecade, getDecadeRange, getBeginOfPreviousDecade, getEndOfPreviousDecade, getBeginOfNextDecade, getBeginOfYear, getEndOfYear, getYearRange, getBeginOfPreviousYear, getEndOfPreviousYear, getBeginOfNextYear, getBeginOfMonth, getEndOfMonth, getBeginOfWeek, getMonthRange, getBeginOfPreviousMonth, getEndOfPreviousMonth, getBeginOfNextMonth, getBeginOfDay, getEndOfDay, getDayRange, getWeekNumber, getRange, getBegin, getBeginPrevious, getBeginNext, getBeginPrevious2, getBeginNext2, getEnd, getEndPrevious, getEndPrevious2, getValueRange, getDaysInMonth, getCenturyLabel, getDecadeLabel, isWeekend, getISOLocalMonth, getISOLocalDate, } from '../dates'; describe('getYear', () => { it('returns proper year for a given date', () => { const date = new Date(2017, 0, 1); const year = getYear(date); expect(year).toBe(2017); }); it('returns proper year for a given number', () => { const date = 2017; const year = getYear(date); expect(year).toBe(2017); }); it('returns proper year for a given string', () => { const date = '2017'; const year = getYear(date); expect(year).toBe(2017); }); it('throws an error when given nonsense data', () => { const text = 'wololo'; const flag = true; expect(() => getYear(text)).toThrow(); expect(() => getYear(flag)).toThrow(); expect(() => getYear()).toThrow(); }); }); describe('getMonth', () => { it('returns proper month', () => { const date = new Date(2017, 0, 1); const monthIndex = getMonth(date); expect(monthIndex).toBe(1); }); }); describe('getMonthIndex', () => { it('returns proper month index', () => { const date = new Date(2017, 0, 1); const monthIndex = getMonthIndex(date); expect(monthIndex).toBe(0); }); }); describe('getDay', () => { it('returns proper day', () => { const date = new Date(2017, 0, 1); const day = getDay(date); expect(day).toBe(1); }); }); describe('getDayOfWeek', () => { it('returns proper day of the week (ISO 8601)', () => { const date = new Date(2017, 0, 1); const dayOfWeek = getDayOfWeek(date, 'ISO 8601'); expect(dayOfWeek).toBe(6); }); it('returns proper day of the week (US)', () => { const date = new Date(2017, 0, 1); const dayOfWeek = getDayOfWeek(date, 'US'); expect(dayOfWeek).toBe(0); }); it('returns proper day of the week (default)', () => { const date = new Date(2017, 0, 1); const dayOfWeek = getDayOfWeek(date); expect(dayOfWeek).toBe(6); }); it('throws an error when given unrecognized calendar type', () => { const date = new Date(2017, 0, 1); expect(() => getDayOfWeek(date, 'Chinese')).toThrow(); }); }); describe('getBeginOfCenturyYear', () => { it('returns proper year of the beginning of the century', () => { const date1 = new Date(2017, 0, 1); const date2 = new Date(2001, 0, 1); const date3 = new Date(2000, 0, 1); const beginOfCenturyYear1 = getBeginOfCenturyYear(date1); const beginOfCenturyYear2 = getBeginOfCenturyYear(date2); const beginOfCenturyYear3 = getBeginOfCenturyYear(date3); expect(beginOfCenturyYear1).toBe(2001); expect(beginOfCenturyYear2).toBe(2001); expect(beginOfCenturyYear3).toBe(1901); }); }); describe('getBeginOfCentury', () => { it('returns proper beginning of the century', () => { const date = new Date(2017, 0, 1); const beginOfCenturyDate = new Date(2001, 0, 1); const beginOfCentury = getBeginOfCentury(date); expect(beginOfCentury).toEqual(beginOfCenturyDate); }); }); describe('getEndOfCentury', () => { it('returns proper end of the century', () => { const date = new Date(2017, 0, 1); const endOfCenturyDate = new Date(2100, 11, 31, 23, 59, 59, 999); const endOfCentury = getEndOfCentury(date); expect(endOfCentury).toEqual(endOfCenturyDate); }); }); describe('getCenturyRange', () => { it('returns proper century date range', () => { const date = new Date(2017, 0, 1); const beginOfCenturyDate = new Date(2001, 0, 1); const endOfCenturyDate = new Date(2100, 11, 31, 23, 59, 59, 999); const centuryRange = getCenturyRange(date); expect(centuryRange).toHaveLength(2); expect(centuryRange).toEqual([beginOfCenturyDate, endOfCenturyDate]); }); }); describe('getBeginPreviousOfCentury', () => { it('returns proper beginning of the previous century', () => { const date = new Date(2017, 0, 1); const beginOfPreviousCenturyDate = new Date(1901, 0, 1); const beginOfPreviousCentury = getBeginOfPreviousCentury(date); expect(beginOfPreviousCentury).toEqual(beginOfPreviousCenturyDate); }); }); describe('getEndOfPreviousCentury', () => { it('returns proper end of the previous century', () => { const date = new Date(2017, 0, 1); const endOfPreviousCenturyDate = new Date(2000, 11, 31, 23, 59, 59, 999); const endOfPreviousCentury = getEndOfPreviousCentury(date); expect(endOfPreviousCentury).toEqual(endOfPreviousCenturyDate); }); }); describe('getBeginOfNextCentury', () => { it('returns proper beginning of the next century', () => { const date = new Date(2017, 0, 1); const beginOfNextCenturyDate = new Date(2101, 0, 1); const beginOfNextCentury = getBeginOfNextCentury(date); expect(beginOfNextCentury).toEqual(beginOfNextCenturyDate); }); }); describe('getBeginOfDecadeYear', () => { it('returns proper year of the beginning of the decade', () => { const date1 = new Date(2017, 0, 1); const date2 = new Date(2001, 0, 1); const date3 = new Date(2000, 0, 1); const beginOfDecadeYear1 = getBeginOfDecadeYear(date1); const beginOfDecadeYear2 = getBeginOfDecadeYear(date2); const beginOfDecadeYear3 = getBeginOfDecadeYear(date3); expect(beginOfDecadeYear1).toBe(2011); expect(beginOfDecadeYear2).toBe(2001); expect(beginOfDecadeYear3).toBe(1991); }); }); describe('getBeginOfDecade', () => { it('returns proper beginning of the decade', () => { const date = new Date(2017, 0, 1); const beginOfDecadeDate = new Date(2011, 0, 1); const beginOfDecade = getBeginOfDecade(date); expect(beginOfDecade).toEqual(beginOfDecadeDate); }); }); describe('getEndOfDecade', () => { it('returns proper end of the decade', () => { const date = new Date(2017, 0, 1); const endOfDecadeDate = new Date(2020, 11, 31, 23, 59, 59, 999); const endOfDecade = getEndOfDecade(date); expect(endOfDecade).toEqual(endOfDecadeDate); }); }); describe('getDecadeRange', () => { it('returns proper decade date range', () => { const date = new Date(2017, 0, 1); const beginOfDecadeDate = new Date(2011, 0, 1); const endOfDecadeDate = new Date(2020, 11, 31, 23, 59, 59, 999); const decadeRange = getDecadeRange(date); expect(decadeRange).toHaveLength(2); expect(decadeRange).toEqual([beginOfDecadeDate, endOfDecadeDate]); }); }); describe('getBeginPreviousOfDecade', () => { it('returns proper beginning of the previous decade', () => { const date = new Date(2017, 0, 1); const beginOfPreviousDecadeDate = new Date(2001, 0, 1); const beginOfPreviousDecade = getBeginOfPreviousDecade(date); expect(beginOfPreviousDecade).toEqual(beginOfPreviousDecadeDate); }); }); describe('getEndOfPreviousDecade', () => { it('returns proper end of the previous decade', () => { const date = new Date(2017, 0, 1); const endOfPreviousDecadeDate = new Date(2010, 11, 31, 23, 59, 59, 999); const endOfPreviousDecade = getEndOfPreviousDecade(date); expect(endOfPreviousDecade).toEqual(endOfPreviousDecadeDate); }); }); describe('getBeginOfNextDecade', () => { it('returns proper beginning of the next decade', () => { const date = new Date(2017, 0, 1); const beginOfNextDecadeDate = new Date(2021, 0, 1); const beginOfNextDecade = getBeginOfNextDecade(date); expect(beginOfNextDecade).toEqual(beginOfNextDecadeDate); }); }); describe('getBeginOfYear', () => { it('returns proper beginning of the year', () => { const date = new Date(2017, 0, 1); const beginOfYearDate = new Date(2017, 0, 1); const beginOfYear = getBeginOfYear(date); expect(beginOfYear).toEqual(beginOfYearDate); }); }); describe('getEndOfYear', () => { it('returns proper end of the year', () => { const date = new Date(2017, 0, 1); const endOfYearDate = new Date(2017, 11, 31, 23, 59, 59, 999); const endOfYear = getEndOfYear(date); expect(endOfYear).toEqual(endOfYearDate); }); }); describe('getYearRange', () => { it('returns proper year date range', () => { const date = new Date(2017, 0, 1); const beginOfYearDate = new Date(2017, 0, 1); const endOfYearDate = new Date(2017, 11, 31, 23, 59, 59, 999); const yearRange = getYearRange(date); expect(yearRange).toHaveLength(2); expect(yearRange).toEqual([beginOfYearDate, endOfYearDate]); }); }); describe('getBeginPreviousOfYear', () => { it('returns proper beginning of the previous year', () => { const date = new Date(2017, 0, 1); const beginOfPreviousYearDate = new Date(2016, 0, 1); const beginOfPreviousYear = getBeginOfPreviousYear(date); expect(beginOfPreviousYear).toEqual(beginOfPreviousYearDate); }); }); describe('getEndOfPreviousYear', () => { it('returns proper end of the previous year', () => { const date = new Date(2017, 0, 1); const endOfPreviousYearDate = new Date(2016, 11, 31, 23, 59, 59, 999); const endOfPreviousYear = getEndOfPreviousYear(date); expect(endOfPreviousYear).toEqual(endOfPreviousYearDate); }); }); describe('getBeginOfNextYear', () => { it('returns proper beginning of the next year', () => { const date = new Date(2017, 0, 1); const beginOfNextYearDate = new Date(2018, 0, 1); const beginOfNextYear = getBeginOfNextYear(date); expect(beginOfNextYear).toEqual(beginOfNextYearDate); }); }); describe('getBeginOfMonth', () => { it('returns proper beginning of the month', () => { const date = new Date(2017, 0, 1); const beginOfMonthDate = new Date(2017, 0, 1); const beginOfMonth = getBeginOfMonth(date); expect(beginOfMonth).toEqual(beginOfMonthDate); }); }); describe('getEndOfMonth', () => { it('returns proper end of the month', () => { const date = new Date(2017, 0, 1); const endOfMonthDate = new Date(2017, 0, 31, 23, 59, 59, 999); const endOfMonth = getEndOfMonth(date); expect(endOfMonth).toEqual(endOfMonthDate); }); }); describe('getBeginOfWeek', () => { it('returns proper beginning of the week (ISO 8601)', () => { const date = new Date(2017, 0, 1); const beginOfWeekDate = new Date(2016, 11, 26); const beginOfWeek = getBeginOfWeek(date, 'ISO 8601'); expect(beginOfWeek).toEqual(beginOfWeekDate); }); it('returns proper beginning of the week (US)', () => { const date = new Date(2016, 0, 1); const beginOfWeekDate = new Date(2015, 11, 27); const beginOfWeek = getBeginOfWeek(date, 'US'); expect(beginOfWeek).toEqual(beginOfWeekDate); }); it('returns proper beginning of the week (default)', () => { const date = new Date(2017, 0, 1); const beginOfWeekDate = new Date(2016, 11, 26); const beginOfWeek = getBeginOfWeek(date); expect(beginOfWeek).toEqual(beginOfWeekDate); }); }); describe('getMonthRange', () => { it('returns proper month date range', () => { const date = new Date(2017, 0, 1); const beginOfMonthDate = new Date(2017, 0, 1); const endOfMonthDate = new Date(2017, 0, 31, 23, 59, 59, 999); const monthRange = getMonthRange(date); expect(monthRange).toHaveLength(2); expect(monthRange).toEqual([beginOfMonthDate, endOfMonthDate]); }); }); describe('getBeginPreviousOfMonth', () => { it('returns proper beginning of the previous month', () => { const date = new Date(2017, 0, 1); const beginOfPreviousMonthDate = new Date(2016, 11, 1); const beginOfPreviousMonth = getBeginOfPreviousMonth(date); expect(beginOfPreviousMonth).toEqual(beginOfPreviousMonthDate); }); }); describe('getEndOfPreviousMonth', () => { it('returns proper end of the previous month', () => { const date = new Date(2017, 0, 1); const endOfPreviousMonthDate = new Date(2016, 11, 31, 23, 59, 59, 999); const endOfPreviousMonth = getEndOfPreviousMonth(date); expect(endOfPreviousMonth).toEqual(endOfPreviousMonthDate); }); }); describe('getBeginOfNextMonth', () => { it('returns proper beginning of the next month', () => { const date = new Date(2017, 0, 1); const beginOfNextMonthDate = new Date(2017, 1, 1); const beginOfNextMonth = getBeginOfNextMonth(date); expect(beginOfNextMonth).toEqual(beginOfNextMonthDate); }); }); describe('getBeginOfDay', () => { it('returns proper beginning of the day', () => { const date = new Date(2017, 0, 1); const beginOfDayDate = new Date(2017, 0, 1); const beginOfDay = getBeginOfDay(date); expect(beginOfDay).toEqual(beginOfDayDate); }); }); describe('getEndOfDay', () => { it('returns proper end of the day', () => { const date = new Date(2017, 0, 1); const endOfDayDate = new Date(2017, 0, 1, 23, 59, 59, 999); const endOfDay = getEndOfDay(date); expect(endOfDay).toEqual(endOfDayDate); }); }); describe('getDayRange', () => { it('returns proper day date range', () => { const date = new Date(2017, 0, 1); const beginOfDayDate = new Date(2017, 0, 1); const endOfDayDate = new Date(2017, 0, 1, 23, 59, 59, 999); const dayRange = getDayRange(date); expect(dayRange).toHaveLength(2); expect(dayRange).toEqual([beginOfDayDate, endOfDayDate]); }); }); describe('getWeekNumber', () => { it('returns proper week number for a sample week 1 (ISO 8601)', () => { const year = 2018; const month = 0; const startDate = 1; for (let currentDate = startDate; currentDate < startDate + 7; currentDate += 1) { const date = new Date(year, month, currentDate); const weekNumber = getWeekNumber(date, 'ISO 8601'); expect(weekNumber).toBe(1); } }); it('returns proper week number for a sample year starting in week 1 (ISO 8601)', () => { const year = 2018; const month = 0; const startDate = 1; for (let currentWeek = 1; currentWeek <= 52; currentWeek += 1) { const weekOffset = (currentWeek - 1) * 7; const date = new Date(year, month, startDate + weekOffset); const weekNumber = getWeekNumber(date, 'ISO 8601'); expect(weekNumber).toBe(currentWeek); } }); it('returns proper week number for a sample week 52 (ISO 8601)', () => { const year = 2016; const month = 11; const startDate = 26; for (let currentDate = startDate; currentDate < startDate + 7; currentDate += 1) { const date = new Date(year, month, currentDate); const weekNumber = getWeekNumber(date, 'ISO 8601'); expect(weekNumber).toBe(52); } }); it('returns proper week number for a sample week 53 (ISO 8601)', () => { const year = 2015; const month = 11; const startDate = 28; for (let currentDate = startDate; currentDate < startDate + 7; currentDate += 1) { const date = new Date(year, month, currentDate); const weekNumber = getWeekNumber(date, 'ISO 8601'); expect(weekNumber).toBe(53); } }); it('returns proper week number for a sample week 1 (US)', () => { const year = 2015; const month = 11; const startDate = 27; for (let currentDate = startDate; currentDate < startDate + 7; currentDate += 1) { const date = new Date(year, month, currentDate); const weekNumber = getWeekNumber(date, 'US'); expect(weekNumber).toBe(1); } }); it('returns proper week number for a sample year starting in week 1 (US)', () => { const year = 2015; const month = 11; const startDate = 27; for (let currentWeek = 1; currentWeek <= 53; currentWeek += 1) { const weekOffset = (currentWeek - 1) * 7; const date = new Date(year, month, startDate + weekOffset); const weekNumber = getWeekNumber(date, 'US'); expect(weekNumber).toBe(currentWeek); } }); it('returns proper week number for a sample week 1 (US)', () => { const year = 2015; const month = 11; const startDate = 27; for (let currentDate = startDate; currentDate < startDate + 7; currentDate += 1) { const date = new Date(year, month, currentDate); const weekNumber = getWeekNumber(date, 'US'); expect(weekNumber).toBe(1); } }); it('returns proper week number for a sample week 52 (US)', () => { const year = 2017; const month = 11; const startDate = 24; for (let currentDate = startDate; currentDate < startDate + 7; currentDate += 1) { const date = new Date(year, month, currentDate); const weekNumber = getWeekNumber(date, 'US'); expect(weekNumber).toBe(52); } }); it('returns proper week number for a sample week 53 (US)', () => { const year = 2016; const month = 11; const startDate = 25; for (let currentDate = startDate; currentDate < startDate + 7; currentDate += 1) { const date = new Date(year, month, currentDate); const weekNumber = getWeekNumber(date, 'US'); expect(weekNumber).toBe(53); } }); }); describe('getRange', () => { it('returns proper century range', () => { const date = new Date(2017, 0, 1); const beginOfCenturyDate = new Date(2001, 0, 1); const endOfCenturyDate = new Date(2100, 11, 31, 23, 59, 59, 999); const centuryRange = getRange('century', date); expect(centuryRange).toHaveLength(2); expect(centuryRange).toEqual([beginOfCenturyDate, endOfCenturyDate]); }); it('returns proper decade range', () => { const date = new Date(2017, 0, 1); const beginOfDecadeDate = new Date(2011, 0, 1); const endOfDecadeDate = new Date(2020, 11, 31, 23, 59, 59, 999); const decadeRange = getRange('decade', date); expect(decadeRange).toHaveLength(2); expect(decadeRange).toEqual([beginOfDecadeDate, endOfDecadeDate]); }); it('returns proper year range', () => { const date = new Date(2017, 0, 1); const beginOfYearDate = new Date(2017, 0, 1); const endOfYearDate = new Date(2017, 11, 31, 23, 59, 59, 999); const yearRange = getRange('year', date); expect(yearRange).toHaveLength(2); expect(yearRange).toEqual([beginOfYearDate, endOfYearDate]); }); it('returns proper month range', () => { const date = new Date(2017, 0, 1); const beginOfMonthDate = new Date(2017, 0, 1); const endOfMonthDate = new Date(2017, 0, 31, 23, 59, 59, 999); const monthRange = getRange('month', date); expect(monthRange).toHaveLength(2); expect(monthRange).toEqual([beginOfMonthDate, endOfMonthDate]); }); it('returns proper day range', () => { const date = new Date(2017, 0, 1); const beginOfDayDate = new Date(2017, 0, 1); const endOfDayDate = new Date(2017, 0, 1, 23, 59, 59, 999); const dayRange = getRange('day', date); expect(dayRange).toHaveLength(2); expect(dayRange).toEqual([beginOfDayDate, endOfDayDate]); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getRange('hamster', date)).toThrow(); }); }); describe('getBegin', () => { it('returns proper beginning of the century', () => { const date = new Date(2017, 0, 1); const beginOfCenturyDate = new Date(2001, 0, 1); const beginOfCentury = getBegin('century', date); expect(beginOfCentury).toEqual(beginOfCenturyDate); }); it('returns proper beginning of the decade', () => { const date = new Date(2017, 0, 1); const beginOfDecadeDate = new Date(2011, 0, 1); const beginOfDecade = getBegin('decade', date); expect(beginOfDecade).toEqual(beginOfDecadeDate); }); it('returns proper beginning of the year', () => { const date = new Date(2017, 0, 1); const beginOfYearDate = new Date(2017, 0, 1); const beginOfYear = getBegin('year', date); expect(beginOfYear).toEqual(beginOfYearDate); }); it('returns proper beginning of the month', () => { const date = new Date(2017, 0, 1); const beginOfMonthDate = new Date(2017, 0, 1); const monthRange = getBegin('month', date); expect(monthRange).toEqual(beginOfMonthDate); }); it('returns proper beginning of the day', () => { const date = new Date(2017, 0, 1); const beginOfDayDate = new Date(2017, 0, 1); const beginOfDay = getBegin('day', date); expect(beginOfDay).toEqual(beginOfDayDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getBegin('hamster', date)).toThrow(); }); }); describe('getBeginPrevious', () => { it('returns proper beginning of the previous century', () => { const date = new Date(2017, 0, 1); const beginOfCenturyDate = new Date(1901, 0, 1); const beginOfCentury = getBeginPrevious('century', date); expect(beginOfCentury).toEqual(beginOfCenturyDate); }); it('returns proper beginning of the previous decade', () => { const date = new Date(2017, 0, 1); const beginOfDecadeDate = new Date(2001, 0, 1); const beginOfDecade = getBeginPrevious('decade', date); expect(beginOfDecade).toEqual(beginOfDecadeDate); }); it('returns proper beginning of the previous year', () => { const date = new Date(2017, 0, 1); const beginOfYearDate = new Date(2016, 0, 1); const beginOfYear = getBeginPrevious('year', date); expect(beginOfYear).toEqual(beginOfYearDate); }); it('returns proper beginning of the previous month', () => { const date = new Date(2017, 0, 1); const beginOfMonthDate = new Date(2016, 11, 1); const monthRange = getBeginPrevious('month', date); expect(monthRange).toEqual(beginOfMonthDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getBeginPrevious('hamster', date)).toThrow(); }); }); describe('getBeginNext', () => { it('returns proper beginning of the next century', () => { const date = new Date(2017, 0, 1); const beginOfCenturyDate = new Date(2101, 0, 1); const beginOfCentury = getBeginNext('century', date); expect(beginOfCentury).toEqual(beginOfCenturyDate); }); it('returns proper beginning of the next decade', () => { const date = new Date(2017, 0, 1); const beginOfDecadeDate = new Date(2021, 0, 1); const beginOfDecade = getBeginNext('decade', date); expect(beginOfDecade).toEqual(beginOfDecadeDate); }); it('returns proper beginning of the next year', () => { const date = new Date(2017, 0, 1); const beginOfYearDate = new Date(2018, 0, 1); const beginOfYear = getBeginNext('year', date); expect(beginOfYear).toEqual(beginOfYearDate); }); it('returns proper beginning of the next month', () => { const date = new Date(2017, 0, 1); const beginOfMonthDate = new Date(2017, 1, 1); const monthRange = getBeginNext('month', date); expect(monthRange).toEqual(beginOfMonthDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getBeginNext('hamster', date)).toThrow(); }); }); describe('getBeginPrevious2', () => { it('returns proper beginning of the decade 10 decades ago', () => { const date = new Date(2017, 0, 1); const beginOfPreviousCenturyDate = new Date(1911, 0, 1); const beginOfPreviousCentury = getBeginPrevious2('decade', date); expect(beginOfPreviousCentury).toEqual(beginOfPreviousCenturyDate); }); it('returns proper beginning of the year 10 years ago', () => { const date = new Date(2017, 0, 1); const beginOfPreviousDecadeDate = new Date(2007, 0, 1); const beginOfPreviousDecade = getBeginPrevious2('year', date); expect(beginOfPreviousDecade).toEqual(beginOfPreviousDecadeDate); }); it('returns proper beginning of the month 1 year ago', () => { const date = new Date(2017, 0, 1); const beginOfPreviousYearDate = new Date(2016, 0, 1); const beginOfPreviousYear = getBeginPrevious2('month', date); expect(beginOfPreviousYear).toEqual(beginOfPreviousYearDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getBeginPrevious2('hamster', date)).toThrow(); }); }); describe('getBeginNext2', () => { it('returns proper beginning of the decade 10 decades ahead', () => { const date = new Date(2017, 0, 1); const beginOfNextCenturyDate = new Date(2111, 0, 1); const beginOfNextCentury = getBeginNext2('decade', date); expect(beginOfNextCentury).toEqual(beginOfNextCenturyDate); }); it('returns proper beginning of the year 10 years ahead', () => { const date = new Date(2017, 0, 1); const beginOfNextDecadeDate = new Date(2027, 0, 1); const beginOfNextDecade = getBeginNext2('year', date); expect(beginOfNextDecade).toEqual(beginOfNextDecadeDate); }); it('returns proper beginning of the month 1 year ahead', () => { const date = new Date(2017, 0, 1); const beginOfNextYearDate = new Date(2018, 0, 1); const beginOfNextYear = getBeginNext2('month', date); expect(beginOfNextYear).toEqual(beginOfNextYearDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getBeginNext2('hamster', date)).toThrow(); }); }); describe('getEnd', () => { it('returns proper end of the century', () => { const date = new Date(2017, 0, 1); const endOfCenturyDate = new Date(2100, 11, 31, 23, 59, 59, 999); const endOfCentury = getEnd('century', date); expect(endOfCentury).toEqual(endOfCenturyDate); }); it('returns proper end of the decade', () => { const date = new Date(2017, 0, 1); const endOfDecadeDate = new Date(2020, 11, 31, 23, 59, 59, 999); const endOfDecade = getEnd('decade', date); expect(endOfDecade).toEqual(endOfDecadeDate); }); it('returns proper end of the year', () => { const date = new Date(2017, 0, 1); const endOfYearDate = new Date(2017, 11, 31, 23, 59, 59, 999); const endOfYear = getEnd('year', date); expect(endOfYear).toEqual(endOfYearDate); }); it('returns proper end of the month', () => { const date = new Date(2017, 0, 1); const endOfMonthDate = new Date(2017, 0, 31, 23, 59, 59, 999); const monthRange = getEnd('month', date); expect(monthRange).toEqual(endOfMonthDate); }); it('returns proper end of the day', () => { const date = new Date(2017, 0, 1); const endOfDayDate = new Date(2017, 0, 1, 23, 59, 59, 999); const endOfDay = getEnd('day', date); expect(endOfDay).toEqual(endOfDayDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getEnd('hamster', date)).toThrow(); }); }); describe('getEndPrevious', () => { it('returns proper end of the previous century', () => { const date = new Date(2017, 0, 1); const endOfCenturyDate = new Date(2000, 11, 31, 23, 59, 59, 999); const endOfCentury = getEndPrevious('century', date); expect(endOfCentury).toEqual(endOfCenturyDate); }); it('returns proper end of the previous decade', () => { const date = new Date(2017, 0, 1); const endOfDecadeDate = new Date(2010, 11, 31, 23, 59, 59, 999); const endOfDecade = getEndPrevious('decade', date); expect(endOfDecade).toEqual(endOfDecadeDate); }); it('returns proper end of the previous year', () => { const date = new Date(2017, 0, 1); const endOfYearDate = new Date(2016, 11, 31, 23, 59, 59, 999); const endOfYear = getEndPrevious('year', date); expect(endOfYear).toEqual(endOfYearDate); }); it('returns proper end of the previous month', () => { const date = new Date(2017, 0, 1); const endOfMonthDate = new Date(2016, 11, 31, 23, 59, 59, 999); const monthRange = getEndPrevious('month', date); expect(monthRange).toEqual(endOfMonthDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getEndPrevious('hamster', date)).toThrow(); }); }); describe('getEndPrevious2', () => { it('returns proper end of the decade 10 decades ago', () => { const date = new Date(2017, 0, 1); const endOfPreviousCenturyDate = new Date(1920, 11, 31, 23, 59, 59, 999); const endOfPreviousCentury = getEndPrevious2('decade', date); expect(endOfPreviousCentury).toEqual(endOfPreviousCenturyDate); }); it('returns proper end of the year 10 years ago', () => { const date = new Date(2017, 0, 1); const endOfPreviousDecadeDate = new Date(2007, 11, 31, 23, 59, 59, 999); const endOfPreviousDecade = getEndPrevious2('year', date); expect(endOfPreviousDecade).toEqual(endOfPreviousDecadeDate); }); it('returns proper end of the month 1 year ago', () => { const date = new Date(2017, 0, 1); const endOfPreviousYearDate = new Date(2016, 0, 31, 23, 59, 59, 999); const endOfPreviousYear = getEndPrevious2('month', date); expect(endOfPreviousYear).toEqual(endOfPreviousYearDate); }); it('throws an error when given unrecognized range type', () => { const date = new Date(2017, 0, 1); expect(() => getEndPrevious2('hamster', date)).toThrow(); }); }); describe('getValueRange', () => { it('returns an array of dates given two ordered dates', () => { const date1 = new Date(2018, 0, 1); const date2 = new Date(2018, 6, 1); const range = getValueRange('day', date1, date2); expect(range).toEqual([getBeginOfDay(date1), getEndOfDay(date2)]); }); it('returns an array of dates given two unordered dates', () => { const date1 = new Date(2018, 6, 1); const date2 = new Date(2018, 0, 1); const range = getValueRange('day', date1, date2); expect(range).toEqual([getBeginOfDay(date2), getEndOfDay(date1)]); }); }); describe('getDaysInMonth', () => { it('returns proper number of days in a month', () => { const date = new Date(2017, 0, 1); const daysInMonth = getDaysInMonth(date); expect(daysInMonth).toBe(31); }); }); describe('getCenturyLabel', () => { it('returns proper label for the century a given date is in', () => { const date = new Date(2017, 0, 1); const centuryLabel = getCenturyLabel(date); expect(centuryLabel).toBe('2001 – 2100'); }); }); describe('getDecadeLabel', () => { it('returns proper label for the decade a given date is in', () => { const date = new Date(2017, 0, 1); const decadeLabel = getDecadeLabel(date); expect(decadeLabel).toBe('2011 – 2020'); }); }); describe('isWeekend', () => { it('returns proper flag', () => { const date1 = new Date(2016, 11, 30); const date2 = new Date(2016, 11, 31); const date3 = new Date(2017, 0, 1); const date4 = new Date(2017, 0, 2); const isWeekend1 = isWeekend(date1); const isWeekend2 = isWeekend(date2); const isWeekend3 = isWeekend(date3); const isWeekend4 = isWeekend(date4); expect(isWeekend1).toBe(false); expect(isWeekend2).toBe(true); expect(isWeekend3).toBe(true); expect(isWeekend4).toBe(false); }); }); describe('getISOLocalMonth', () => { it('returns proper ISO month', () => { const date = new Date(Date.UTC(2017, 0, 1)); const ISOMonth = getISOLocalMonth(date); expect(ISOMonth).toBe('2017-01'); }); it('returns nothing when given nothing', () => { expect(getISOLocalMonth()).toBeUndefined(); }); it('throws an error when given nonsense data', () => { const text = 'wololo'; const fn = () => {}; expect(() => getISOLocalMonth(text)).toThrow(); expect(() => getISOLocalMonth(fn)).toThrow(); }); }); describe('getISOLocalDate', () => { it('returns proper ISO date', () => { const date = new Date(Date.UTC(2017, 0, 1)); const ISODate = getISOLocalDate(date); expect(ISODate).toBe('2017-01-01'); }); it('returns nothing when given nothing', () => { expect(getISOLocalDate()).toBeUndefined(); }); it('throws an error when given nonsense data', () => { const text = 'wololo'; const fn = () => {}; expect(() => getISOLocalDate(text)).toThrow(); expect(() => getISOLocalDate(fn)).toThrow(); }); });