111 lines
3.3 KiB
Go
111 lines
3.3 KiB
Go
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)
|
|
}
|
|
}
|