package notify_test import ( "testing" "time" "sneak.berlin/go/dnswatcher/internal/notify" ) func TestAlertHistoryEmpty(t *testing.T) { t.Parallel() h := notify.NewAlertHistory() entries := h.Recent() if len(entries) != 0 { t.Fatalf("expected 0 entries, got %d", len(entries)) } } func TestAlertHistoryAddAndRecent(t *testing.T) { t.Parallel() h := notify.NewAlertHistory() now := time.Now().UTC() h.Add(notify.AlertEntry{ Timestamp: now.Add(-2 * time.Minute), Title: "first", Message: "msg1", Priority: "info", }) h.Add(notify.AlertEntry{ Timestamp: now.Add(-1 * time.Minute), Title: "second", Message: "msg2", Priority: "warning", }) entries := h.Recent() if len(entries) != 2 { t.Fatalf("expected 2 entries, got %d", len(entries)) } // Newest first. if entries[0].Title != "second" { t.Errorf( "expected newest first, got %q", entries[0].Title, ) } if entries[1].Title != "first" { t.Errorf( "expected oldest second, got %q", entries[1].Title, ) } } func TestAlertHistoryOverflow(t *testing.T) { t.Parallel() h := notify.NewAlertHistory() const totalEntries = 110 // Fill beyond capacity. for i := range totalEntries { h.Add(notify.AlertEntry{ Timestamp: time.Now().UTC(), Title: "alert", Message: "msg", Priority: string(rune('0' + i%10)), }) } entries := h.Recent() const maxHistory = 100 if len(entries) != maxHistory { t.Fatalf( "expected %d entries, got %d", maxHistory, len(entries), ) } }