Pulse/internal/ai/demo_test.go
2026-04-11 14:51:10 +01:00

111 lines
2.8 KiB
Go

package ai
import (
"strings"
"testing"
"github.com/rcourtman/pulse-go-rewrite/internal/mockruntime"
)
func TestIsDemoMode(t *testing.T) {
original := mockruntime.IsEnabled()
t.Cleanup(func() { mockruntime.SetEnabled(original) })
mockruntime.SetEnabled(true)
if !IsDemoMode() {
t.Fatal("expected demo mode true when runtime mock mode is enabled")
}
mockruntime.SetEnabled(false)
if IsDemoMode() {
t.Fatal("expected demo mode false when runtime mock mode is disabled")
}
}
func TestPatrolService_InjectDemoFindings(t *testing.T) {
service := NewPatrolService(nil, nil)
if service.findings == nil || service.runHistoryStore == nil {
t.Fatal("expected findings and run history to be initialized")
}
service.InjectDemoFindings()
findings := service.findings.GetAll(nil)
if len(findings) != 5 {
t.Fatalf("expected 5 demo findings, got %d", len(findings))
}
if service.runHistoryStore.Count() != 13 {
t.Fatalf("expected 13 demo run history entries, got %d", service.runHistoryStore.Count())
}
}
func TestPatrolService_InjectDemoFindings_NoStore(t *testing.T) {
service := &PatrolService{}
service.InjectDemoFindings()
}
func TestPatrolService_InjectDemoRunHistory_NoStore(t *testing.T) {
service := &PatrolService{}
service.injectDemoRunHistory()
}
func TestGenerateDemoAIResponse(t *testing.T) {
tests := []struct {
name string
prompt string
expected string
}{
{"patrol", "Analyze the infrastructure for issues", "ZFS pool 'local-zfs' is 94% full"},
{"disk", "disk is full", "Disk Usage Analysis"},
{"memory", "memory pressure", "Memory Analysis"},
{"backup", "pbs backup status", "Backup Status Review"},
{"cpu", "cpu load is high", "CPU/Performance Analysis"},
{"hello", "hello there", "Pulse Assistant"},
{"default", "status report", "This Demo Shows"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
resp := GenerateDemoAIResponse(tt.prompt)
if resp == nil {
t.Fatal("expected response")
}
if !strings.Contains(resp.Content, tt.expected) {
t.Fatalf("expected response to contain %q, got %q", tt.expected, resp.Content)
}
if resp.Model == "" {
t.Fatal("expected model to be set")
}
})
}
}
func TestGenerateDemoAIStream(t *testing.T) {
var content strings.Builder
done := false
resp, err := GenerateDemoAIStream("disk usage", func(event StreamEvent) {
switch event.Type {
case "content":
chunk, ok := event.Data.(string)
if !ok {
t.Fatalf("expected string content chunk, got %T", event.Data)
}
content.WriteString(chunk)
case "done":
done = true
}
})
if err != nil {
t.Fatalf("GenerateDemoAIStream failed: %v", err)
}
if resp == nil {
t.Fatal("expected response")
}
if !done {
t.Fatal("expected done event")
}
if content.String() != resp.Content {
t.Fatal("expected streamed content to match response content")
}
}