Files
mailgoserver/internal/webui/calendar_recurrence_test.go
T

58 lines
2.0 KiB
Go

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)
}
}