88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package dnd
|
|
|
|
import (
|
|
"io/fs"
|
|
"testing"
|
|
"testing/fstest"
|
|
|
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/llm"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/modules/sharedassets"
|
|
)
|
|
|
|
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")},
|
|
}, []sharedassets.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)
|
|
}
|
|
}
|
|
}
|