UNPKG

react-day-picker

Version:

Customizable Date Picker for React

254 lines (235 loc) 9.34 kB
import { addYears, endOfMonth, endOfYear, startOfDay, startOfMonth, startOfYear } from "date-fns"; import { DayPickerProps } from "react-day-picker/types"; import { defaultDateLib } from "../classes/DateLib"; import { getNavMonths } from "./getNavMonth"; describe('when "startMonth" is not set', () => { test('"startMonth" should be undefined', () => { const [navStartMonth] = getNavMonths({}, defaultDateLib); expect(navStartMonth).toBeUndefined(); }); }); describe('when "startMonth" is set', () => { const startMonth = new Date(2021, 4, 3); const props: DayPickerProps = { startMonth }; test('"startMonth" should be the start of that month', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOfThatMonth = startOfMonth(startMonth); expect(navStartMonth).toEqual(startOfThatMonth); }); describe('when "fromYear" is set', () => { const fromYear = 2021; test('"startMonth" should be the start of that month', () => { const [navStartMonth] = getNavMonths( { ...props, fromYear }, defaultDateLib ); const startOfThatMonth = startOfMonth(startMonth); expect(navStartMonth).toEqual(startOfThatMonth); }); }); }); describe('when "fromYear" is set', () => { const fromYear = 2021; const props: DayPickerProps = { fromYear }; test('"startMonth" should be the start of that year', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOfThatYear = new Date(fromYear, 0, 1); expect(navStartMonth).toEqual(startOfThatYear); }); }); describe('when "endMonth" is set', () => { const endMonth = new Date(2021, 4, 3); const props: DayPickerProps = { endMonth }; test('"endMonth" should be the end of that month', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); const endOfThatMonth = startOfDay(endOfMonth(endMonth)); expect(navEndMonth).toEqual(endOfThatMonth); }); describe('when "fromYear" is set', () => { const fromYear = 2021; test('"endMonth" should be the end of that month', () => { const [, navEndMonth] = getNavMonths( { ...props, fromYear }, defaultDateLib ); const endOfThatMonth = startOfDay(endOfMonth(endMonth)); expect(navEndMonth).toEqual(endOfThatMonth); }); }); }); describe('when "toYear" is set', () => { const toYear = 2021; const props: DayPickerProps = { toYear }; test('"endMonth" should be the end of that year', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); expect(navEndMonth).toEqual(new Date(toYear, 11, 31)); }); }); describe.each([["dropdown" as const], ["dropdown-years" as const]])( 'when "captionLayout" is "%s"', (captionLayout) => { const today = new Date(2024, 4, 3); const props: DayPickerProps = { captionLayout, today }; test('"startMonth" should be 100 years ago', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOf100YearsAgo = startOfYear(addYears(today, -100)); expect(navStartMonth).toEqual(startOf100YearsAgo); }); test('"endMonth" should be the end of this year', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); const endOfThisYear = startOfDay(endOfYear(today)); expect(navEndMonth).toEqual(endOfThisYear); }); describe('when "startMonth" is set', () => { const today = new Date(2024, 4, 3); const startMonth = new Date(2021, 4, 3); const props: DayPickerProps = { captionLayout, startMonth, today }; test('"startMonth" should be the start of that month', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOfThatMonth = startOfMonth(startMonth); expect(navStartMonth).toEqual(startOfThatMonth); }); test('"endMonth" should be the end of this year', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); const endOfThisYear = startOfDay(endOfYear(today)); expect(navEndMonth).toEqual(endOfThisYear); }); }); describe('when "endMonth" is set', () => { const today = new Date(2021, 4, 3); const endMonth = new Date(2022, 4, 3); const props: DayPickerProps = { captionLayout, endMonth, today }; test('"startMonth" should be 100 years ago', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOf100YearsAgo = startOfYear(addYears(today, -100)); expect(navStartMonth).toEqual(startOf100YearsAgo); }); test('"endMonth" should be the end of that month', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); expect(navEndMonth).toEqual(startOfDay(endOfMonth(endMonth))); }); }); describe('when "fromYear" is set', () => { const today = new Date(2024, 4, 3); const fromYear = 2022; const props: DayPickerProps = { captionLayout, fromYear, today }; test('"startMonth" should be equal to the "fromYear"', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOfThatYear = new Date(fromYear, 0, 1); expect(navStartMonth).toEqual(startOfThatYear); }); test('"endMonth" should be the end of this year', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); const endOfThisYear = startOfDay(endOfYear(today)); expect(navEndMonth).toEqual(endOfThisYear); }); }); describe('when "toYear" is set', () => { const today = new Date(2021, 4, 3); const toYear = 2022; const props: DayPickerProps = { captionLayout, toYear, today }; test('"startMonth" should be 100 years ago', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); expect(navStartMonth).toEqual(startOfYear(addYears(today, -100))); }); test('"endMonth" should be equal the last day of the year', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); expect(navEndMonth).toEqual(new Date(toYear, 11, 31)); }); }); } ); describe('when "captionLayout" is "dropdown-months"', () => { const today = new Date(2024, 4, 3); const props: DayPickerProps = { captionLayout: "dropdown-months", today }; test('"startMonth" should be undefined', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); expect(navStartMonth).toBeUndefined(); }); test('"endMonth" should be undefined', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); expect(navEndMonth).toBeUndefined(); }); describe('when "startMonth" is set', () => { const today = new Date(2024, 4, 3); const startMonth = new Date(2021, 4, 3); const props: DayPickerProps = { captionLayout: "dropdown-months", startMonth, today }; test('"startMonth" should be the start of that month', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOfThatMonth = startOfMonth(startMonth); expect(navStartMonth).toEqual(startOfThatMonth); }); test('"endMonth" should be undefined', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); expect(navEndMonth).toBeUndefined(); }); }); describe('when "endMonth" is set', () => { const today = new Date(2021, 4, 3); const endMonth = new Date(2022, 4, 3); const props: DayPickerProps = { captionLayout: "dropdown-months", endMonth, today }; test('"startMonth" should be undefined', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); expect(navStartMonth).toBeUndefined(); }); test('"endMonth" should be the end of that month', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); const endOfThatMonth = startOfDay(endOfMonth(endMonth)); expect(navEndMonth).toEqual(endOfThatMonth); }); }); describe('when "fromYear" is set', () => { const today = new Date(2024, 4, 3); const fromYear = 2022; const props: DayPickerProps = { captionLayout: "dropdown-months", fromYear, today }; test('"startMonth" should be equal to the start of that year', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); const startOfThatYear = new Date(fromYear, 0, 1); expect(navStartMonth).toEqual(startOfThatYear); }); test('"endMonth" should be undefined', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); expect(navEndMonth).toBeUndefined(); }); }); describe('when "toYear" is set', () => { const today = new Date(2021, 4, 3); const toYear = 2022; const props: DayPickerProps = { captionLayout: "dropdown-months", toYear, today }; test('"startMonth" should be undefined', () => { const [navStartMonth] = getNavMonths(props, defaultDateLib); expect(navStartMonth).toBeUndefined(); }); test('"endMonth" should be equal to the end of that year', () => { const [, navEndMonth] = getNavMonths(props, defaultDateLib); const endOfThatYear = new Date(2022, 11, 31); expect(navEndMonth).toEqual(endOfThatYear); }); }); });