web: extract event filter logic to lib, add tz/DST and year-boundary tests

This commit is contained in:
2026-08-31 23:25:11 +02:00
parent 16778eaca2
commit 7df0a646bc
5 changed files with 414 additions and 83 deletions
+54
View File
@@ -77,6 +77,60 @@ describe("organizeEventsInCalendar", () => {
expect(week["2026-07-06"]).toEqual([]);
expect(week["2026-07-12"]).toEqual([]);
});
it("splits a week across the year boundary under a shared week key", () => {
const events = getSingularEvents([
makeEvent("romjul", ["2026-12-30T20:00:00Z"]),
makeEvent("nyttaar", ["2027-01-02T20:00:00Z"]),
]);
const calendar = organizeEventsInCalendar(events);
// uke 53 (man 28.12. søn 3.1.) spans both months; each yearMonth
// bucket holds only its own days, under the same week number
expect(Object.keys(calendar)).toEqual(["2026-12", "2027-01"]);
expect(Object.keys(calendar["2026-12"])).toEqual(["53"]);
expect(Object.keys(calendar["2027-01"])).toEqual(["53"]);
expect(Object.keys(calendar["2026-12"]["53"])).toEqual([
"2026-12-28",
"2026-12-29",
"2026-12-30",
"2026-12-31",
]);
expect(Object.keys(calendar["2027-01"]["53"])).toEqual([
"2027-01-01",
"2027-01-02",
"2027-01-03",
]);
expect(calendar["2026-12"]["53"]["2026-12-30"].map((e) => e.id)).toEqual([
"romjul",
]);
expect(calendar["2027-01"]["53"]["2027-01-02"].map((e) => e.id)).toEqual([
"nyttaar",
]);
});
it("seeds a full 7-day week through the DST fall-back", () => {
// DST ends søndag 2026-10-25 (a 25-hour day in Oslo)
const events = getSingularEvents([
makeEvent("a", ["2026-10-21T18:00:00Z"]),
]);
const calendar = organizeEventsInCalendar(events);
const weeks = Object.values(calendar["2026-10"]);
expect(weeks).toHaveLength(1);
expect(Object.keys(weeks[0])).toEqual([
"2026-10-19",
"2026-10-20",
"2026-10-21",
"2026-10-22",
"2026-10-23",
"2026-10-24",
"2026-10-25",
]);
expect(weeks[0]["2026-10-21"].map((e) => e.id)).toEqual(["a"]);
});
});
describe("organizeEventsByDate", () => {