58 lines
2.0 KiB
Go
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)
|
|
}
|
|
}
|