105 lines
2.9 KiB
Go
105 lines
2.9 KiB
Go
package prompt
|
|
|
|
import (
|
|
"sort"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestLookupMetadataSucceedsForRegisteredPrompts(t *testing.T) {
|
|
tests := []struct {
|
|
promptID string
|
|
embeddedPath string
|
|
}{
|
|
{promptID: DNDSpellsPromptID, embeddedPath: "assets/dnd/spells"},
|
|
{promptID: TestGenericPromptID, embeddedPath: "assets/test/generic"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.promptID, func(t *testing.T) {
|
|
metadata, ok := LookupMetadata(tc.promptID)
|
|
if !ok {
|
|
t.Fatalf("expected metadata for %q", tc.promptID)
|
|
}
|
|
|
|
if metadata.PromptID != tc.promptID {
|
|
t.Fatalf("unexpected prompt ID: %q", metadata.PromptID)
|
|
}
|
|
if metadata.PromptVersion != VersionV1 {
|
|
t.Fatalf("unexpected prompt version: %q", metadata.PromptVersion)
|
|
}
|
|
if metadata.PromptSource != SourceBuiltin {
|
|
t.Fatalf("unexpected prompt source: %q", metadata.PromptSource)
|
|
}
|
|
if metadata.EmbeddedPath != tc.embeddedPath {
|
|
t.Fatalf("unexpected embedded path: %q", metadata.EmbeddedPath)
|
|
}
|
|
if !strings.HasPrefix(metadata.SHA256, "sha256:") {
|
|
t.Fatalf("expected prefixed hash, got %q", metadata.SHA256)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLookupMetadataUnknownReturnsFalse(t *testing.T) {
|
|
if metadata, ok := LookupMetadata("unknown"); ok {
|
|
t.Fatalf("expected unknown prompt lookup to fail, got %+v", metadata)
|
|
}
|
|
}
|
|
|
|
func TestMustLookupMetadataPanicsForUnknownPromptID(t *testing.T) {
|
|
defer func() {
|
|
if recover() == nil {
|
|
t.Fatalf("expected panic")
|
|
}
|
|
}()
|
|
|
|
_ = MustLookupMetadata("unknown")
|
|
}
|
|
|
|
func TestRegisteredMetadataSortedByPromptID(t *testing.T) {
|
|
registered := RegisteredMetadata()
|
|
if len(registered) != 2 {
|
|
t.Fatalf("expected two registered prompts, got %d", len(registered))
|
|
}
|
|
|
|
ids := make([]string, len(registered))
|
|
seen := make(map[string]bool, len(registered))
|
|
for i, metadata := range registered {
|
|
ids[i] = metadata.PromptID
|
|
seen[metadata.PromptID] = true
|
|
}
|
|
if !sort.StringsAreSorted(ids) {
|
|
t.Fatalf("expected sorted prompt IDs, got %v", ids)
|
|
}
|
|
if !seen[DNDSpellsPromptID] {
|
|
t.Fatalf("registered prompt IDs = %v, want %q", ids, DNDSpellsPromptID)
|
|
}
|
|
}
|
|
|
|
func TestHardeningTextAvailable(t *testing.T) {
|
|
hardening := strings.TrimSpace(HardeningText())
|
|
if hardening == "" {
|
|
t.Fatalf("expected hardening text")
|
|
}
|
|
if !strings.Contains(hardening, "source text") {
|
|
t.Fatalf("unexpected hardening text: %q", hardening)
|
|
}
|
|
}
|
|
|
|
func TestMetadataDiagnosticsMapOmitsRenderedPromptText(t *testing.T) {
|
|
metadata := MustLookupMetadata(TestGenericPromptID)
|
|
diagnostics := metadata.DiagnosticsMap()
|
|
|
|
for _, key := range []string{"prompt_id", "prompt_version", "prompt_source", "embedded_path", "sha256"} {
|
|
if diagnostics[key] == "" {
|
|
t.Fatalf("expected diagnostics key %q, got %#v", key, diagnostics)
|
|
}
|
|
}
|
|
for _, key := range []string{"system", "user", "text", "rendered"} {
|
|
if _, ok := diagnostics[key]; ok {
|
|
t.Fatalf("diagnostics should omit rendered prompt text: %#v", diagnostics)
|
|
}
|
|
}
|
|
}
|