feat: simplify date picker shortcuts
This commit is contained in:
72
tests/date-time-picker.test.ts
Normal file
72
tests/date-time-picker.test.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import {
|
||||
applyQuickDateShortcut,
|
||||
getCalendarMonthForValue,
|
||||
} from "@/components/date-time-picker";
|
||||
|
||||
describe("DateTimePicker quick shortcuts", () => {
|
||||
test("Today selects today, navigates the visible month, and keeps the picker open", () => {
|
||||
const now = new Date("2026-04-09T10:30:00Z");
|
||||
|
||||
const result = applyQuickDateShortcut({
|
||||
shortcut: "Today",
|
||||
value: "2026-06-15T14:30:00",
|
||||
allDay: false,
|
||||
now,
|
||||
});
|
||||
|
||||
expect(result.nextValue).toBe("2026-04-09T14:30:00");
|
||||
expect(result.nextMonth.toISOString()).toBe("2026-04-09T00:00:00.000Z");
|
||||
expect(result.keepOpen).toBe(true);
|
||||
});
|
||||
|
||||
test("Next week moves selection forward a week without dropping the existing time", () => {
|
||||
const now = new Date("2026-04-09T10:30:00Z");
|
||||
|
||||
const result = applyQuickDateShortcut({
|
||||
shortcut: "Next week",
|
||||
value: "2026-04-01T09:45:00",
|
||||
allDay: false,
|
||||
now,
|
||||
});
|
||||
|
||||
expect(result.nextValue).toBe("2026-04-16T09:45:00");
|
||||
expect(result.nextMonth.toISOString()).toBe("2026-04-16T00:00:00.000Z");
|
||||
});
|
||||
|
||||
test("Next month updates the selected all-day date and visible month in place", () => {
|
||||
const now = new Date("2026-04-09T10:30:00Z");
|
||||
|
||||
const result = applyQuickDateShortcut({
|
||||
shortcut: "Next month",
|
||||
value: "2026-04-01",
|
||||
allDay: true,
|
||||
now,
|
||||
});
|
||||
|
||||
expect(result.nextValue).toBe("2026-05-09");
|
||||
expect(result.nextMonth.toISOString()).toBe("2026-05-09T00:00:00.000Z");
|
||||
expect(result.keepOpen).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("DateTimePicker visible month", () => {
|
||||
test("uses the selected value month when one is present", () => {
|
||||
const fallbackDate = new Date("2026-04-09T10:30:00Z");
|
||||
|
||||
const visibleMonth = getCalendarMonthForValue(
|
||||
"2026-07-18T08:15:00",
|
||||
fallbackDate,
|
||||
);
|
||||
|
||||
expect(visibleMonth.toISOString()).toBe("2026-07-18T08:15:00.000Z");
|
||||
});
|
||||
|
||||
test("falls back to the current month when no value is selected yet", () => {
|
||||
const fallbackDate = new Date("2026-04-09T10:30:00Z");
|
||||
|
||||
const visibleMonth = getCalendarMonthForValue("", fallbackDate);
|
||||
|
||||
expect(visibleMonth.toISOString()).toBe("2026-04-09T10:30:00.000Z");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user