package shared import ( "io/fs" "testing" "testing/fstest" "gitea.maximumdirect.net/eric/notarius/internal/framework/llm" "gitea.maximumdirect.net/eric/notarius/internal/framework/promptfs" ) func TestSharedPromptFilesReturnsNewSlice(t *testing.T) { first := SharedPromptFiles() second := SharedPromptFiles() if len(first) != 3 || len(second) != 3 { t.Fatalf("SharedPromptFiles() lengths = %d and %d, want 3", len(first), len(second)) } first[0].Name = "changed.md" if second[0].Name != "common-dnd-system.md" { t.Fatalf("SharedPromptFiles() reused descriptor slice: %#v", second) } } func TestSharedPromptFilesReferenceEmbeddedAssets(t *testing.T) { for _, file := range SharedPromptFiles() { if file.FS == nil { t.Fatalf("SharedPromptFiles() descriptor %q has nil FS", file.Name) } if _, err := fs.ReadFile(file.FS, file.Path); err != nil { t.Fatalf("ReadFile(%q) error = %v, want nil", file.Path, err) } } } func TestHashPartsReferenceSharedPrompts(t *testing.T) { assertHashParts(t, "common", CommonHashParts(), []string{ "assets/prompts/common-dnd-system.md", "assets/prompts/common-dnd-transcript.md", }) assertHashParts(t, "reference", ReferenceHashParts(), []string{ "assets/prompts/common-dnd-references.md", }) for _, part := range append(CommonHashParts(), ReferenceHashParts()...) { if _, err := fs.ReadFile(part.FS, part.Path); err != nil { t.Fatalf("ReadFile(%q) error = %v, want nil", part.Path, err) } } } func assertHashParts(t *testing.T, name string, parts []llm.AssetHashPart, want []string) { t.Helper() if len(parts) != len(want) { t.Fatalf("%s hash parts length = %d, want %d", name, len(parts), len(want)) } for i, part := range parts { if part.Path != want[i] { t.Fatalf("%s hash part %d path = %q, want %q", name, i, part.Path, want[i]) } if part.FS == nil { t.Fatalf("%s hash part %d has nil FS", name, i) } } } func TestModulePromptFSMountsDNDSharedPrompts(t *testing.T) { fsys, err := ModulePromptFS("dnd.test", fstest.MapFS{ "assets/prompts/dnd.test.yaml": {Data: []byte("id: dnd.test")}, }, []promptfs.ModulePromptFile{ {Name: "dnd.test.yaml", Path: "assets/prompts/dnd.test.yaml"}, }) if err != nil { t.Fatalf("ModulePromptFS() error = %v, want nil", err) } for _, path := range []string{ "assets/prompts/dnd.test/dnd.test.yaml", "assets/prompts/dnd.test/sharedassets/common-dnd-system.md", "assets/prompts/dnd.test/sharedassets/common-dnd-transcript.md", "assets/prompts/dnd.test/sharedassets/common-dnd-references.md", } { if _, err := fs.ReadFile(fsys, path); err != nil { t.Fatalf("ReadFile(%q) error = %v, want nil", path, err) } } }