From c471a72ff58e3913700b0a74a4dcc72055fddcc5 Mon Sep 17 00:00:00 2001 From: Tyler Koenig Date: Thu, 4 Jun 2026 21:29:03 -0400 Subject: [PATCH] fix(monitor): inject time into ComputeDailyBreakdown for testability Test failed near midnight when outage events fell in previous day's bucket. Accept a now parameter instead of calling time.Now() internally. --- internal/monitor/sla.go | 3 +-- internal/monitor/sla_test.go | 5 +++-- internal/tui/update.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/monitor/sla.go b/internal/monitor/sla.go index e7ac242..90656cf 100644 --- a/internal/monitor/sla.go +++ b/internal/monitor/sla.go @@ -127,8 +127,7 @@ func ComputeSLA(changes []models.StateChange, currentStatus string, window time. return report } -func ComputeDailyBreakdown(changes []models.StateChange, currentStatus string, days int) []DayReport { - now := time.Now() +func ComputeDailyBreakdown(changes []models.StateChange, currentStatus string, days int, now time.Time) []DayReport { reports := make([]DayReport, days) for i := 0; i < days; i++ { diff --git a/internal/monitor/sla_test.go b/internal/monitor/sla_test.go index 7bf23a0..474971a 100644 --- a/internal/monitor/sla_test.go +++ b/internal/monitor/sla_test.go @@ -118,13 +118,14 @@ func TestComputeSLA_LateNotDown(t *testing.T) { } func TestComputeDailyBreakdown(t *testing.T) { - now := time.Now() + // Use a fixed time well past midnight so the outage always falls within today's window. + now := time.Date(2026, 6, 4, 15, 0, 0, 0, time.UTC) changes := []models.StateChange{ {ToStatus: "UP", ChangedAt: now.Add(-1 * time.Hour)}, {ToStatus: "DOWN", FromStatus: "UP", ChangedAt: now.Add(-2 * time.Hour)}, } - days := ComputeDailyBreakdown(changes, "UP", 7) + days := ComputeDailyBreakdown(changes, "UP", 7, now) if len(days) != 7 { t.Fatalf("expected 7 days, got %d", len(days)) diff --git a/internal/tui/update.go b/internal/tui/update.go index 9f3d33d..f986c54 100644 --- a/internal/tui/update.go +++ b/internal/tui/update.go @@ -329,7 +329,7 @@ func (m *Model) recomputeSLA() { } m.slaReport = monitor.ComputeSLA(changes, currentStatus, period.duration) - m.slaDailyBreakdown = monitor.ComputeDailyBreakdown(changes, currentStatus, period.days) + m.slaDailyBreakdown = monitor.ComputeDailyBreakdown(changes, currentStatus, period.days, time.Now()) m.slaViewport = viewport.New( m.termWidth-chromePadH, -- 2.52.0