react-day-picker / src /helpers /getDates.test.ts
AbdulElahGwaith's picture
Upload folder using huggingface_hub
cf86710 verified
import { DateLib, defaultDateLib } from "../classes/DateLib";
import { getDates } from "./getDates";
describe("when the first month and the last month are the same", () => {
describe("when the month has 6 weeks", () => {
const month = new Date(2023, 11, 1);
describe("when not using fixed weeks", () => {
it("should return 42 dates", () => {
const dates = getDates(
[month],
undefined,
{
fixedWeeks: false,
},
defaultDateLib,
);
expect(dates).toHaveLength(42);
expect(dates[0]).toEqual(new Date(2023, 10, 26));
expect(dates[dates.length - 1]).toEqual(new Date(2024, 0, 6));
});
});
describe("when using fixed weeks", () => {
it("should return 42 dates", () => {
const dates = getDates(
[month],
undefined,
{
fixedWeeks: true,
},
defaultDateLib,
);
expect(dates).toHaveLength(42);
expect(dates[0]).toEqual(new Date(2023, 10, 26));
expect(dates[dates.length - 1]).toEqual(new Date(2024, 0, 6));
});
});
});
describe("when the month has 5 weeks", () => {
const month = new Date(2023, 4, 1);
describe("when not using fixed weeks", () => {
it("should return 35 dates", () => {
const dates = getDates(
[month],
undefined,
{
fixedWeeks: false,
},
defaultDateLib,
);
expect(dates).toHaveLength(35);
expect(dates[0]).toEqual(new Date(2023, 3, 30));
expect(dates[dates.length - 1]).toEqual(new Date(2023, 5, 3));
});
});
describe("when using fixed weeks", () => {
it("should return 42 dates", () => {
const dates = getDates(
[month],
undefined,
{ fixedWeeks: true },
defaultDateLib,
);
expect(dates).toHaveLength(42);
expect(dates[0]).toEqual(new Date(2023, 3, 30));
expect(dates[dates.length - 1]).toEqual(new Date(2023, 5, 10));
});
});
});
describe("when the month has 4 weeks", () => {
const month = new Date(2026, 1); // February 2026
describe("when not using fixed weeks", () => {
it("should return 28 dates", () => {
const dates = getDates(
[month],
undefined,
{
fixedWeeks: false,
},
defaultDateLib,
);
expect(dates).toHaveLength(28);
});
});
describe("when using fixed weeks", () => {
it("should return 42 dates", () => {
const dates = getDates(
[month],
undefined,
{ fixedWeeks: true },
defaultDateLib,
);
expect(dates).toHaveLength(42);
});
});
});
describe("when using Monday as first day of the week", () => {
const month = new Date(2023, 4, 1);
it("the first day should be Monday", () => {
const dates = getDates(
[month],
undefined,
{},
new DateLib({ weekStartsOn: 1 }),
);
expect(dates[0]).toBeMonday();
expect(dates[0]).toEqual(new Date(2023, 4, 1));
expect(dates[dates.length - 1]).toEqual(new Date(2023, 5, 4));
});
});
describe("when using a max date", () => {
const month = new Date(2023, 4, 1);
const maxDate = new Date(2023, 4, 15);
const dateLib = new DateLib({ weekStartsOn: 1 });
const expectedLastDay = dateLib.addDays(dateLib.startOfWeek(maxDate), 6);
const expectedLength =
dateLib.differenceInCalendarDays(
expectedLastDay,
dateLib.startOfWeek(month),
) + 1;
it("the last day should be the end of that week", () => {
const dates = getDates([month], maxDate, {}, dateLib);
expect(dates).toHaveLength(expectedLength);
expect(dates[dates.length - 1]).toEqual(expectedLastDay);
});
});
describe("when using ISO weeks", () => {
const month = new Date(2023, 4, 1);
it("the first day should be Monday", () => {
const dates = getDates(
[month],
undefined,
{ ISOWeek: true },
defaultDateLib,
);
expect(dates[0]).toBeMonday();
expect(dates[0]).toEqual(new Date(2023, 4, 1));
expect(dates[dates.length - 1]).toEqual(new Date(2023, 5, 4));
});
});
describe("when using a custom week start with a max date", () => {
const month = new Date(2023, 4, 1); // May 2023
const maxDate = new Date(2023, 4, 15);
const dateLib = new DateLib({ weekStartsOn: 3 }); // Wednesday start
const expectedLastDay = dateLib.addDays(dateLib.startOfWeek(maxDate), 6);
const expectedLength =
dateLib.differenceInCalendarDays(
expectedLastDay,
dateLib.startOfWeek(month),
) + 1;
it("clamps to the end of the custom week", () => {
const dates = getDates([month], maxDate, {}, dateLib);
expect(dates[dates.length - 1]).toEqual(expectedLastDay);
expect(dates).toHaveLength(expectedLength);
});
});
describe("when using ISO weeks with a max date", () => {
const month = new Date(2023, 4, 1); // May 2023
const maxDate = new Date(2023, 4, 15);
const expectedLastDay = defaultDateLib.addDays(
defaultDateLib.startOfISOWeek(maxDate),
6,
);
const expectedLength =
defaultDateLib.differenceInCalendarDays(
expectedLastDay,
defaultDateLib.startOfISOWeek(month),
) + 1;
it("clamps to the end of the ISO week", () => {
const dates = getDates(
[month],
maxDate,
{ ISOWeek: true },
defaultDateLib,
);
expect(dates[dates.length - 1]).toEqual(expectedLastDay);
expect(dates).toHaveLength(expectedLength);
});
});
});
describe("when the first month and the last month are different", () => {
const firstMonth = new Date(2023, 4, 1);
const lastMonth = new Date(2023, 11, 1);
describe("when not using fixed weeks", () => {
it("should return an array of dates", () => {
const dates = getDates(
[firstMonth, lastMonth],
undefined,
{ fixedWeeks: false },
defaultDateLib,
);
expect(dates).toHaveLength(252);
expect(dates[0]).toEqual(new Date(2023, 3, 30));
expect(dates[dates.length - 1]).toEqual(new Date(2024, 0, 6));
});
});
describe("when using a max date", () => {
const firstMonth = new Date(2023, 4, 1);
const lastMonth = new Date(2023, 11, 1);
const maxDate = new Date(2023, 5, 15);
const dateLib = new DateLib({ weekStartsOn: 1 });
const expectedLastDay = dateLib.addDays(dateLib.startOfWeek(maxDate), 6);
const expectedLength =
dateLib.differenceInCalendarDays(
expectedLastDay,
dateLib.startOfWeek(firstMonth),
) + 1;
it("the last day should be the end of that week", () => {
const dates = getDates([firstMonth, lastMonth], maxDate, {}, dateLib);
expect(dates).toHaveLength(expectedLength);
expect(dates[dates.length - 1]).toEqual(expectedLastDay);
});
});
describe("when using ISO weeks", () => {
const month = new Date(2023, 4, 1);
it("the first day should be Monday", () => {
const dates = getDates(
[month],
undefined,
{ ISOWeek: true },
defaultDateLib,
);
expect(dates[0]).toBeMonday();
expect(dates[0]).toEqual(new Date(2023, 4, 1));
expect(dates[dates.length - 1]).toEqual(new Date(2023, 5, 4));
});
});
});