package prompt import ( "strings" "testing" ) func TestRenderUserSystemReturnsTextAndMetadata(t *testing.T) { system, user, metadata, err := RenderUserSystem(TestGenericPromptID, map[string]any{ "Task": "Summarize", "Input": "Example input", }) if err != nil { t.Fatalf("RenderUserSystem: %v", err) } if !strings.Contains(system, "generic Notarius test prompt") { t.Fatalf("unexpected system prompt: %q", system) } if !strings.Contains(user, "Task: Summarize") || !strings.Contains(user, "Example input") { t.Fatalf("unexpected user prompt: %q", user) } if strings.TrimSpace(system) != system { t.Fatalf("expected trimmed system prompt: %q", system) } if strings.TrimSpace(user) != user { t.Fatalf("expected trimmed user prompt: %q", user) } if metadata.PromptID != TestGenericPromptID { t.Fatalf("unexpected metadata: %+v", metadata) } } func TestRenderUserSystemUnknownPromptReturnsError(t *testing.T) { _, _, _, err := RenderUserSystem("unknown", map[string]any{}) if err == nil || !strings.Contains(err.Error(), "unknown prompt id") { t.Fatalf("expected unknown prompt error, got %v", err) } } func TestRenderUserSystemMissingTemplateDataReturnsError(t *testing.T) { _, _, _, err := RenderUserSystem(TestGenericPromptID, map[string]any{ "Task": "Summarize", }) if err == nil || !strings.Contains(err.Error(), "Input") { t.Fatalf("expected missing template data error, got %v", err) } } func TestRenderUserSystemIncludesHardeningText(t *testing.T) { system, _, _, err := RenderUserSystem(TestGenericPromptID, map[string]any{ "Task": "Summarize", "Input": "Example input", }) if err != nil { t.Fatalf("RenderUserSystem: %v", err) } hardening := strings.TrimSpace(HardeningText()) if hardening == "" { t.Fatalf("expected hardening text") } if !strings.Contains(system, hardening) { t.Fatalf("expected rendered system prompt to include hardening text: %q", system) } } func TestRenderDNDSpellsPromptIncludesHardeningText(t *testing.T) { system, user, metadata, err := RenderUserSystem(DNDSpellsPromptID, map[string]any{ "SourceID": "session-alpha", "HasChunk": true, "ChunkID": "session-alpha:chunk:0", "ChunkIndex": 0, "Units": []map[string]any{ { "ID": "seg-001", "Text": "Aria casts Cure Wounds.", "Metadata": []map[string]string{ {"Key": "speaker", "Value": "Alice"}, }, }, }, }) if err != nil { t.Fatalf("RenderUserSystem: %v", err) } hardening := strings.TrimSpace(HardeningText()) if hardening == "" { t.Fatalf("expected hardening text") } if !strings.Contains(system, hardening) { t.Fatalf("expected rendered system prompt to include hardening text: %q", system) } for _, want := range []string{"session-alpha", "session-alpha:chunk:0", "seg-001", "Aria casts Cure Wounds.", "speaker: Alice"} { if !strings.Contains(user, want) { t.Fatalf("rendered user prompt = %q, want substring %q", user, want) } } if metadata.PromptID != DNDSpellsPromptID { t.Fatalf("unexpected metadata: %+v", metadata) } } func TestRenderDNDSpellsPromptMissingTemplateDataReturnsError(t *testing.T) { _, _, _, err := RenderUserSystem(DNDSpellsPromptID, map[string]any{}) if err == nil || !strings.Contains(err.Error(), "SourceID") { t.Fatalf("expected missing SourceID error, got %v", err) } }