diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-19 22:10:43 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-19 22:10:43 +0300 |
| commit | eda752f4e6a95e907214063b14225ed82f67693c (patch) | |
| tree | 1e18742e29b8b9cf23c5e53adb953a2e7d0e9b76 /internal/config/config_test.go | |
| parent | 621e24039b527a368a00a7d5164d8e004c2cf001 (diff) | |
w4: add embedded prompt templates
Diffstat (limited to 'internal/config/config_test.go')
| -rw-r--r-- | internal/config/config_test.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/internal/config/config_test.go b/internal/config/config_test.go index fe370f6..ae2127a 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -81,6 +81,43 @@ func TestRenderPrompt(t *testing.T) { } } +func TestRenderPromptFallsBackToEmbeddedTemplate(t *testing.T) { + cfg := DefaultConfig() + cfg.PromptsDir = t.TempDir() + + got, err := cfg.RenderPrompt("story_prompt.md", map[string]any{ + "Language": "Bulgarian", + "Genre": "a mystery with a surprising twist", + "Words": "1. ябълка (apple)\n2. книга (book)\n", + }) + if err != nil { + t.Fatalf("RenderPrompt() error = %v", err) + } + if !strings.Contains(got, "Write a ~250-word story in Bulgarian") { + t.Fatalf("RenderPrompt() = %q, want embedded story prompt", got) + } +} + +func TestRenderPromptPrefersExternalTemplate(t *testing.T) { + tmpDir := t.TempDir() + cfg := DefaultConfig() + cfg.PromptsDir = tmpDir + + if err := os.WriteFile(filepath.Join(tmpDir, "story_prompt.md"), []byte("external {{.Word}}"), 0o644); err != nil { + t.Fatalf("write prompt: %v", err) + } + + got, err := cfg.RenderPrompt("story_prompt.md", map[string]any{ + "Word": "override", + }) + if err != nil { + t.Fatalf("RenderPrompt() error = %v", err) + } + if got != "external override" { + t.Fatalf("RenderPrompt() = %q, want %q", got, "external override") + } +} + func TestRenderPromptMissingKeyReturnsError(t *testing.T) { tmpDir := t.TempDir() cfg := DefaultConfig() @@ -99,6 +136,74 @@ func TestRenderPromptMissingKeyReturnsError(t *testing.T) { } } +func TestEmbeddedPromptTemplatesRender(t *testing.T) { + cfg := DefaultConfig() + cfg.PromptsDir = t.TempDir() + + data := map[string]any{ + "Language": "Bulgarian", + "Script": "Cyrillic", + "Genre": "a mystery with a surprising twist", + "Style": "cinematic realism", + "Words": "1. ябълка (apple)\n2. книга (book)\n", + "Bible": "Mira: young adult, brown hair, blue eyes, red coat.\n", + "Subtitle": "Sample Subtitle", + "StoryText": "A short story teaser.", + "RenderingRequirement": "ULTRA-REALISTIC RENDERING", + "RenderingRequirementEnd": "FINAL LOCK — PHOTOREALISM", + "StoryBibleSeparator": "---CHARACTER GUIDE---", + "StoryTitleSeparator": "---COMIC TITLE---", + "StoryPanelSeparator": "---PANEL SCRIPT---", + "PageNum": 1, + "TotalPages": 5, + "PanelLayout": "MANDATORY PANEL LAYOUT — divide the image into exactly 4 panels in a 2×2 grid.\n", + "BlurbBox": "a rectangular text box with a short blurb", + "SeriesTitle": "ComicForge Adventures", + "Pose": "extreme close-up portrait", + } + + for _, name := range []string{ + "story_system.md", + "story_prompt.md", + "story_full_prompt.md", + "bible_system.md", + "blurb_system.md", + "cover_prompt.md", + "story_page_prompt.md", + "gallery_page_prompt.md", + "back_cover_prompt.md", + "panel_script_prompt.md", + "narrator_cinematic.md", + "narrator_intro_system.md", + "narrator_conclusion_system.md", + "rendering_requirement.md", + "rendering_requirement_end.md", + } { + t.Run(name, func(t *testing.T) { + got, err := cfg.RenderPrompt(name, data) + if err != nil { + t.Fatalf("RenderPrompt() error = %v", err) + } + if strings.TrimSpace(got) == "" { + t.Fatal("RenderPrompt() = empty string, want rendered prompt") + } + }) + } +} + +func TestRenderPromptMissingTemplateReturnsError(t *testing.T) { + cfg := DefaultConfig() + cfg.PromptsDir = t.TempDir() + + _, err := cfg.RenderPrompt("missing_prompt.md", map[string]any{}) + if err == nil { + t.Fatal("RenderPrompt() error = nil, want error") + } + if !strings.Contains(err.Error(), "read embedded prompt") { + t.Fatalf("RenderPrompt() error = %v, want embedded read error", err) + } +} + func TestLoadRejectsUnknownProvider(t *testing.T) { tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "config.yaml") |
