package ai import ( "strings" "testing" ) func TestPersonaSystemPromptNonEmptyDistinct(t *testing.T) { modes := []string{PersonaAggressive, PersonaSilent, PersonaPassive, PersonaPersuasive, PersonaBalanced} seen := make(map[string]string, len(modes)) for _, mode := range modes { prompt := PersonaSystemPrompt(mode) if strings.TrimSpace(prompt) == "" { t.Fatalf("persona %q returned empty prompt", mode) } if !strings.Contains(prompt, "AetherForge fleet controller") { t.Fatalf("persona %q missing base system prompt", mode) } if prev, ok := seen[prompt]; ok { t.Fatalf("personas %q and %q produced identical prompts", prev, mode) } seen[prompt] = mode } } func TestPersonaSystemPromptModeSpecificGuidance(t *testing.T) { cases := []struct { mode string needle string }{ {PersonaAggressive, "spread_now and discover_and_join"}, {PersonaSilent, "Never spread_now unless stuck"}, {PersonaPassive, "Default to noop"}, {PersonaPersuasive, "discover_and_join before restart_mining"}, {PersonaBalanced, "Balance spread vs mine"}, } for _, tc := range cases { prompt := PersonaSystemPrompt(tc.mode) if !strings.Contains(prompt, tc.needle) { t.Fatalf("persona %q missing %q in:\n%s", tc.mode, tc.needle, prompt) } } } func TestNormalizePersona(t *testing.T) { if got := NormalizePersona(" AGGRESSIVE "); got != PersonaAggressive { t.Fatalf("got %q", got) } if got := NormalizePersona("unknown"); got != PersonaBalanced { t.Fatalf("unknown should map to balanced, got %q", got) } } func TestCourtJudgeOverlayDistinct(t *testing.T) { modes := []string{PersonaAggressive, PersonaSilent, PersonaPassive, PersonaPersuasive, PersonaBalanced} prev := "" for _, mode := range modes { overlay := CourtJudgeOverlay(mode) if strings.TrimSpace(overlay) == "" { t.Fatalf("empty overlay for %q", mode) } if overlay == prev && prev != "" { t.Fatalf("duplicate court overlay for %q", mode) } prev = overlay } }