package webui import ( "testing" "time" "mailgoserver/internal/db" ) func TestExpandOccurrencesNonRecurring(t *testing.T) { start := time.Date(2026, 3, 10, 14, 0, 0, 0, time.UTC) e := db.CalendarEvent{StartAt: start, EndAt: start.Add(time.Hour)} rangeStart := time.Date(2026, 3, 1, 0, 0, 0, 0, time.UTC) rangeEnd := time.Date(2026, 4, 1, 0, 0, 0, 0, time.UTC) got := expandOccurrences(e, rangeStart, rangeEnd) if len(got) != 1 || !got[0].Equal(start) { t.Fatalf("expected 1 occurrence at %v, got %v", start, got) } // Outside the queried month entirely. outStart := time.Date(2026, 5, 10, 14, 0, 0, 0, time.UTC) e2 := db.CalendarEvent{StartAt: outStart, EndAt: outStart.Add(time.Hour)} if got := expandOccurrences(e2, rangeStart, rangeEnd); len(got) != 0 { t.Fatalf("expected no occurrences outside the range, got %v", got) } } func TestExpandOccurrencesWeeklyRecurring(t *testing.T) { start := time.Date(2026, 3, 3, 9, 0, 0, 0, time.UTC) // a Tuesday e := db.CalendarEvent{StartAt: start, EndAt: start.Add(time.Hour), RRule: "FREQ=WEEKLY"} rangeStart := time.Date(2026, 3, 1, 0, 0, 0, 0, time.UTC) rangeEnd := time.Date(2026, 4, 1, 0, 0, 0, 0, time.UTC) got := expandOccurrences(e, rangeStart, rangeEnd) // March 2026: Tuesdays on the 3rd, 10th, 17th, 24th, 31st. if len(got) != 5 { t.Fatalf("expected 5 weekly occurrences in March, got %d: %v", len(got), got) } for i, want := range []int{3, 10, 17, 24, 31} { if got[i].Day() != want { t.Errorf("occurrence %d: day = %d, want %d", i, got[i].Day(), want) } } } func TestExpandOccurrencesMonthlyRecurring(t *testing.T) { start := time.Date(2026, 1, 15, 9, 0, 0, 0, time.UTC) e := db.CalendarEvent{StartAt: start, EndAt: start.Add(time.Hour), RRule: "FREQ=MONTHLY"} rangeStart := time.Date(2026, 3, 1, 0, 0, 0, 0, time.UTC) rangeEnd := time.Date(2026, 4, 1, 0, 0, 0, 0, time.UTC) got := expandOccurrences(e, rangeStart, rangeEnd) if len(got) != 1 || got[0].Day() != 15 || got[0].Month() != time.March { t.Fatalf("expected exactly the March 15th occurrence, got %v", got) } }