From aa69bd2d8e704098de063dbe978df789eee1a82b Mon Sep 17 00:00:00 2001 From: rcourtman Date: Sun, 5 Apr 2026 20:27:53 +0100 Subject: [PATCH] Add resource alert stats regression coverage --- internal/api/resource_handlers_more_test.go | 8 +++ internal/api/resource_handlers_test.go | 54 +++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/internal/api/resource_handlers_more_test.go b/internal/api/resource_handlers_more_test.go index ddbdee5d2..7ca937d5f 100644 --- a/internal/api/resource_handlers_more_test.go +++ b/internal/api/resource_handlers_more_test.go @@ -20,6 +20,14 @@ func (s stubResourceStateProvider) GetState() models.StateSnapshot { return s.snapshot } +type mutableResourceStateProvider struct { + snapshot models.StateSnapshot +} + +func (s *mutableResourceStateProvider) GetState() models.StateSnapshot { + return s.snapshot +} + type stubTenantStateProvider struct { snapshot models.StateSnapshot } diff --git a/internal/api/resource_handlers_test.go b/internal/api/resource_handlers_test.go index 86f66c060..6c023918f 100644 --- a/internal/api/resource_handlers_test.go +++ b/internal/api/resource_handlers_test.go @@ -108,3 +108,57 @@ func TestHandleGetResourceStats(t *testing.T) { assert.Equal(t, 1, stats.TotalResources) assert.Equal(t, 1, stats.WithAlerts) } + +func TestHandleGetResourceStatsClearsAlertCountAfterAlertsResolve(t *testing.T) { + handlers := NewResourceHandlers() + now := time.Now() + provider := &mutableResourceStateProvider{ + snapshot: models.StateSnapshot{ + VMs: []models.VM{{ + ID: "vm-1", + Name: "vm-1", + Status: "running", + LastSeen: now, + }}, + ActiveAlerts: []models.Alert{{ + ID: "vm-1-cpu", + ResourceID: "vm-1", + Type: "cpu", + Level: "warning", + Message: "CPU high", + StartTime: now, + }}, + }, + } + handlers.SetStateProvider(provider) + + req := httptest.NewRequest("GET", "/api/resources/stats", nil) + w := httptest.NewRecorder() + handlers.HandleGetResourceStats(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + var stats resources.StoreStats + err := json.NewDecoder(w.Body).Decode(&stats) + assert.NoError(t, err) + assert.Equal(t, 1, stats.TotalResources) + assert.Equal(t, 1, stats.WithAlerts) + + provider.snapshot = models.StateSnapshot{ + VMs: []models.VM{{ + ID: "vm-1", + Name: "vm-1", + Status: "running", + LastSeen: now, + }}, + } + + req = httptest.NewRequest("GET", "/api/resources/stats", nil) + w = httptest.NewRecorder() + handlers.HandleGetResourceStats(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + err = json.NewDecoder(w.Body).Decode(&stats) + assert.NoError(t, err) + assert.Equal(t, 1, stats.TotalResources) + assert.Equal(t, 0, stats.WithAlerts) +}