Add family artifact selection and provenance
This commit is contained in:
@@ -1,11 +1,71 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"gitea.maximumdirect.net/eric/narratio/internal/config"
|
||||
)
|
||||
|
||||
func TestResolveEffectiveArtifactsExpandsFamilySelections(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
write := func(name, body string) string {
|
||||
path := filepath.Join(dir, name)
|
||||
if err := os.WriteFile(path, []byte(body), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return path
|
||||
}
|
||||
pipeline := write("pipeline.yml", `workspace: {root: /tmp/narratio-work}
|
||||
whisperx: {transcribe_url: https://example.test/transcribe}
|
||||
notification: {mode: noop}
|
||||
scriptorium:
|
||||
artifact_families:
|
||||
character_meta:
|
||||
enabled: false
|
||||
for_each: party.characters
|
||||
prompt_id: dnd.character_meta
|
||||
output_path_pattern: artifacts/characters/{character_id}/meta.md
|
||||
`)
|
||||
campaign := write("campaign.yml", `campaign_id: campaign
|
||||
inputs: {speakers_file: speakers.yml, autocorrect_file: autocorrect.yml, glossary_file: glossary.yml, party_file: party.yml}
|
||||
`)
|
||||
session := write("session.yml", `session_id: session
|
||||
campaign: campaign
|
||||
inputs: {audio_dir: audio}
|
||||
`)
|
||||
write("party.yml", `schema_version: narratio.party.v1
|
||||
characters:
|
||||
zeta: {player: {name: Z}, character: {name: Zeta, classes: [{name: wizard}]}}
|
||||
alpha: {player: {name: A}, character: {name: Alpha, classes: [{name: ranger}]}}
|
||||
`)
|
||||
cfg, err := config.LoadWithSessionOptions(pipeline, campaign, session, config.SessionLoadOptions{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
effective, err := resolveEffectiveArtifacts(cfg, []string{"character_meta", "character_meta_alpha"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got, want := effective.Keys(), []string{"character_meta_alpha", "character_meta_zeta"}; !reflect.DeepEqual(got, want) {
|
||||
t.Fatalf("keys = %#v, want %#v", got, want)
|
||||
}
|
||||
if origin, ok := effective.Origin("character_meta_alpha"); !ok || origin.Family != "character_meta" || origin.CharacterID != "alpha" {
|
||||
t.Fatalf("origin = %#v, %t", origin, ok)
|
||||
}
|
||||
if _, err := resolveEffectiveArtifacts(cfg, []string{"unknown"}); err == nil || !strings.Contains(err.Error(), "unknown artifact") {
|
||||
t.Fatalf("unknown selection error = %v", err)
|
||||
}
|
||||
if defaultEffective, err := resolveEffectiveArtifacts(cfg, nil); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if len(defaultEffective.Keys()) != 0 {
|
||||
t.Fatal("default selection should omit disabled family members")
|
||||
}
|
||||
}
|
||||
|
||||
func TestArtifactSelectionFlagNormalize(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
|
||||
Reference in New Issue
Block a user