react-day-picker / src /utils /convertMatchersToTimeZone.test.ts
AbdulElahGwaith's picture
Upload folder using huggingface_hub
cf86710 verified
import { TZDate } from "@date-fns/tz";
import type { DateRange, Matcher } from "../types/index.js";
import { convertMatchersToTimeZone } from "./convertMatchersToTimeZone.js";
const timeZone = "Pacific/Honolulu";
describe("convertMatchersToTimeZone", () => {
describe("when argument is a date", () => {
const date = new Date("2024-09-26T00:00:00.000Z");
let convertedDate: Date;
beforeEach(() => {
convertedDate = convertMatchersToTimeZone(date, timeZone) as Date;
});
test("returns a TZDate instance", () => {
expect(convertedDate).toBeInstanceOf(TZDate);
});
test("uses the provided time zone offset", () => {
expect(convertedDate.toISOString()).toEqual(
new TZDate(date, timeZone).toISOString(),
);
});
});
describe("when argument is a date range", () => {
const range: DateRange = {
from: new Date("2024-09-24T00:00:00.000Z"),
to: new Date("2024-09-26T00:00:00.000Z"),
};
let convertedRange: DateRange;
beforeEach(() => {
convertedRange = convertMatchersToTimeZone(range, timeZone) as DateRange;
});
test("converts the from date", () => {
expect(convertedRange.from).toBeInstanceOf(TZDate);
});
test("converts the to date", () => {
expect(convertedRange.to).toBeInstanceOf(TZDate);
});
});
describe("when argument is a date interval", () => {
const interval = {
before: new Date("2024-09-20T00:00:00.000Z"),
after: new Date("2024-09-10T00:00:00.000Z"),
};
let convertedInterval: typeof interval;
beforeEach(() => {
convertedInterval = convertMatchersToTimeZone(
interval,
timeZone,
) as typeof interval;
});
test("converts the before date", () => {
expect(convertedInterval.before).toBeInstanceOf(TZDate);
});
test("converts the after date", () => {
expect(convertedInterval.after).toBeInstanceOf(TZDate);
});
});
describe("when argument is a before matcher", () => {
const before = { before: new Date("2024-08-31T00:00:00.000Z") };
let convertedBefore: typeof before;
beforeEach(() => {
convertedBefore = convertMatchersToTimeZone(
before,
timeZone,
) as typeof before;
});
test("converts the before value", () => {
expect(convertedBefore.before).toBeInstanceOf(TZDate);
});
});
describe("when argument is an after matcher", () => {
const after = { after: new Date("2024-10-01T00:00:00.000Z") };
let convertedAfter: typeof after;
beforeEach(() => {
convertedAfter = convertMatchersToTimeZone(
after,
timeZone,
) as typeof after;
});
test("converts the after value", () => {
expect(convertedAfter.after).toBeInstanceOf(TZDate);
});
});
describe("when argument is an array of matchers", () => {
const range: DateRange = {
from: new Date("2024-09-24T00:00:00.000Z"),
to: new Date("2024-09-26T00:00:00.000Z"),
};
const after = { after: new Date("2024-10-01T00:00:00.000Z") };
let convertedRange: Matcher;
let convertedAfter: Matcher;
beforeEach(() => {
[convertedRange, convertedAfter] = convertMatchersToTimeZone(
[range, after],
timeZone,
) as Matcher[];
});
test("converts each range entry", () => {
expect((convertedRange as DateRange).from).toBeInstanceOf(TZDate);
});
test("converts each after entry", () => {
expect((convertedAfter as typeof after).after).toBeInstanceOf(TZDate);
});
});
describe("when argument is undefined", () => {
test("returns undefined", () => {
expect(convertMatchersToTimeZone(undefined, timeZone)).toBeUndefined();
});
});
describe("when argument is a boolean", () => {
test("returns the same boolean value", () => {
expect(convertMatchersToTimeZone(true, timeZone)).toBe(true);
});
});
describe("when argument is a matcher function", () => {
const matcher = (date: Date) => date.getDay() === 0;
test("returns the same function reference", () => {
expect(convertMatchersToTimeZone(matcher, timeZone)).toBe(matcher);
});
});
});