35 lines
1.4 KiB
JavaScript
35 lines
1.4 KiB
JavaScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { endOfLocalDate, formatLocalDateOnly, parseLocalDateOnly, startOfLocalDate } from "@/services/dateOnly.js";
|
|
|
|
describe("date-only helpers", () => {
|
|
it("formats Date objects from their local calendar date", () => {
|
|
expect(formatLocalDateOnly(new Date(2026, 2, 31, 0, 0, 0, 0))).toBe("2026-03-31");
|
|
});
|
|
|
|
it("parses date input values as local calendar dates", () => {
|
|
const parsed = parseLocalDateOnly("2026-03-31");
|
|
|
|
expect(parsed.getFullYear()).toBe(2026);
|
|
expect(parsed.getMonth()).toBe(2);
|
|
expect(parsed.getDate()).toBe(31);
|
|
expect(formatLocalDateOnly(parsed)).toBe("2026-03-31");
|
|
});
|
|
|
|
it("keeps date-only prefixes from API timestamps without timezone reinterpretation", () => {
|
|
expect(formatLocalDateOnly("2026-03-31T23:30:00.000Z")).toBe("2026-03-31");
|
|
});
|
|
|
|
it("rejects impossible date input values", () => {
|
|
expect(Number.isNaN(parseLocalDateOnly("2026-02-31").getTime())).toBe(true);
|
|
});
|
|
|
|
it("builds local day boundaries from the selected date", () => {
|
|
expect(startOfLocalDate("2026-03-31").getHours()).toBe(0);
|
|
expect(startOfLocalDate("2026-03-31").getMinutes()).toBe(0);
|
|
expect(endOfLocalDate("2026-03-31").getHours()).toBe(23);
|
|
expect(endOfLocalDate("2026-03-31").getMinutes()).toBe(59);
|
|
expect(formatLocalDateOnly(endOfLocalDate("2026-03-31"))).toBe("2026-03-31");
|
|
});
|
|
});
|