Pulse/internal/api/docker_agents_routes_more_test.go
rcourtman bfa648ddd5 Test: expand api feature test coverage
Add tests for AI intelligence, Docker/K8s agents, log redaction, and general router helper functions.
2026-02-02 22:02:22 +00:00

123 lines
4.1 KiB
Go

package api
import (
"bytes"
"net/http"
"net/http/httptest"
"strings"
"testing"
"github.com/rcourtman/pulse-go-rewrite/internal/monitoring"
)
func TestNewDockerAgentHandlers_DefaultMonitorFromMultiTenant(t *testing.T) {
monitor := &monitoring.Monitor{}
mtm := &monitoring.MultiTenantMonitor{}
setUnexportedField(t, mtm, "monitors", map[string]*monitoring.Monitor{
"default": monitor,
})
handler := NewDockerAgentHandlers(mtm, nil, nil, nil)
if handler.legacyMonitor != monitor {
t.Fatalf("expected legacy monitor to be set from multi-tenant default")
}
}
func TestDockerAgentHandlers_HandleDockerHostActions_Routes(t *testing.T) {
handler, monitor := newDockerAgentHandlers(t, nil)
hostID := seedDockerHost(t, monitor)
req := httptest.NewRequest(http.MethodPost, "/api/agents/docker/hosts/"+hostID+"/allow-reenroll", nil)
rec := httptest.NewRecorder()
handler.HandleDockerHostActions(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("allow-reenroll status = %d, want 200", rec.Code)
}
req = httptest.NewRequest(http.MethodPut, "/api/agents/docker/hosts/"+hostID+"/unhide", nil)
rec = httptest.NewRecorder()
handler.HandleDockerHostActions(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("unhide status = %d, want 200", rec.Code)
}
req = httptest.NewRequest(http.MethodPut, "/api/agents/docker/hosts/"+hostID+"/pending-uninstall", nil)
rec = httptest.NewRecorder()
handler.HandleDockerHostActions(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("pending-uninstall status = %d, want 200", rec.Code)
}
body := []byte(`{"displayName":"New Name"}`)
req = httptest.NewRequest(http.MethodPut, "/api/agents/docker/hosts/"+hostID+"/display-name", bytes.NewReader(body))
rec = httptest.NewRecorder()
handler.HandleDockerHostActions(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("display-name status = %d, want 200", rec.Code)
}
req = httptest.NewRequest(http.MethodPost, "/api/agents/docker/hosts/"+hostID+"/check-updates", nil)
rec = httptest.NewRecorder()
handler.HandleDockerHostActions(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("check-updates status = %d, want 200", rec.Code)
}
if !strings.Contains(rec.Body.String(), "Check for updates") {
t.Fatalf("expected check updates message")
}
}
func TestDockerAgentHandlers_HandleDockerHostActions_DeleteRoute(t *testing.T) {
handler, monitor := newDockerAgentHandlers(t, nil)
hostID := seedDockerHost(t, monitor)
req := httptest.NewRequest(http.MethodDelete, "/api/agents/docker/hosts/"+hostID, nil)
rec := httptest.NewRecorder()
handler.HandleDockerHostActions(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("delete status = %d, want 200", rec.Code)
}
}
func TestDockerAgentHandlers_HandleDockerHostActions_MethodNotAllowed(t *testing.T) {
handler := &DockerAgentHandlers{}
req := httptest.NewRequest(http.MethodGet, "/api/agents/docker/hosts/host-1/unknown", nil)
rec := httptest.NewRecorder()
handler.HandleDockerHostActions(rec, req)
if rec.Code != http.StatusMethodNotAllowed {
t.Fatalf("expected 405, got %d", rec.Code)
}
}
func TestDockerAgentHandlers_HandleDeleteHost_Errors(t *testing.T) {
handler, _ := newDockerAgentHandlers(t, nil)
req := httptest.NewRequest(http.MethodGet, "/api/agents/docker/hosts/host-1", nil)
rec := httptest.NewRecorder()
handler.HandleDeleteHost(rec, req)
if rec.Code != http.StatusMethodNotAllowed {
t.Fatalf("expected 405, got %d", rec.Code)
}
req = httptest.NewRequest(http.MethodDelete, "/api/agents/docker/hosts/", nil)
rec = httptest.NewRecorder()
handler.HandleDeleteHost(rec, req)
if rec.Code != http.StatusBadRequest {
t.Fatalf("expected 400, got %d", rec.Code)
}
req = httptest.NewRequest(http.MethodDelete, "/api/agents/docker/hosts/missing?hide=true", nil)
rec = httptest.NewRecorder()
handler.HandleDeleteHost(rec, req)
if rec.Code != http.StatusNotFound {
t.Fatalf("expected 404, got %d", rec.Code)
}
req = httptest.NewRequest(http.MethodDelete, "/api/agents/docker/hosts/missing?force=true", nil)
rec = httptest.NewRecorder()
handler.HandleDeleteHost(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("expected 200, got %d", rec.Code)
}
}