diff --git a/src/features/online-board/components/FlightSchedule/weekDateRange.test.ts b/src/features/online-board/components/FlightSchedule/weekDateRange.test.ts new file mode 100644 index 00000000..920bcde1 --- /dev/null +++ b/src/features/online-board/components/FlightSchedule/weekDateRange.test.ts @@ -0,0 +1,31 @@ +import { describe, it, expect } from "vitest"; +import { getWeekDateRange } from "./weekDateRange.js"; + +describe("getWeekDateRange", () => { + it("returns Monday/Sunday for a mid-week date", () => { + // 2026-04-15 is a Wednesday + const result = getWeekDateRange("2026-04-15T10:00:00"); + expect(result.start).toBe("13.04.2026"); + expect(result.end).toBe("19.04.2026"); + }); + + it("returns Monday/Sunday for a Sunday input", () => { + const result = getWeekDateRange("2026-04-19T10:00:00"); + expect(result.start).toBe("13.04.2026"); + expect(result.end).toBe("19.04.2026"); + }); + + it("returns Monday/Sunday for a Monday input", () => { + const result = getWeekDateRange("2026-04-13T10:00:00"); + expect(result.start).toBe("13.04.2026"); + expect(result.end).toBe("19.04.2026"); + }); + + it("returns empty strings for invalid input", () => { + expect(getWeekDateRange("not-a-date")).toEqual({ start: "", end: "" }); + }); + + it("returns empty strings for undefined input", () => { + expect(getWeekDateRange(undefined)).toEqual({ start: "", end: "" }); + }); +}); diff --git a/src/features/online-board/components/FlightSchedule/weekDateRange.ts b/src/features/online-board/components/FlightSchedule/weekDateRange.ts new file mode 100644 index 00000000..76bffaf3 --- /dev/null +++ b/src/features/online-board/components/FlightSchedule/weekDateRange.ts @@ -0,0 +1,19 @@ +import { parseISO, startOfISOWeek, endOfISOWeek, format, isValid } from "date-fns"; + +/** + * Given a scheduled local-time ISO string, return the ISO-week bounds + * (Monday/Sunday) as `dd.MM.yyyy` formatted strings. + * Returns `{ start: "", end: "" }` for invalid or missing input. + */ +export function getWeekDateRange(scheduledLocal: string | undefined): { + start: string; + end: string; +} { + if (!scheduledLocal) return { start: "", end: "" }; + const d = parseISO(scheduledLocal); + if (!isValid(d)) return { start: "", end: "" }; + return { + start: format(startOfISOWeek(d), "dd.MM.yyyy"), + end: format(endOfISOWeek(d), "dd.MM.yyyy"), + }; +}