From 15639ba3508ab92599bd1884ba07139c73b2dac0 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 22 Apr 2026 08:29:14 +0300 Subject: Add manual prompt image mode --- internal/comic/comic_test.go | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'internal/comic/comic_test.go') diff --git a/internal/comic/comic_test.go b/internal/comic/comic_test.go index 4d0e019..29f2a31 100644 --- a/internal/comic/comic_test.go +++ b/internal/comic/comic_test.go @@ -436,6 +436,55 @@ func TestArtistAndRunnerEndToEndWithFakes(t *testing.T) { } } +func TestRunnerRunPromptWritesSingleAsset(t *testing.T) { + t.Parallel() + + originalLeakValidation := validateImagePromptLeakageFn + validateImagePromptLeakageFn = func(context.Context, string, string, string) error { return nil } + t.Cleanup(func() { + validateImagePromptLeakageFn = originalLeakValidation + }) + + tmpDir := t.TempDir() + runner := NewRunner(&RunnerConfig{ + ImageProvider: fakeImageProvider{t: t}, + Prompts: fakePromptRenderer{}, + OutputDir: tmpDir, + Slug: "manual-robot", + UltraRealistic: boolPtr(false), + PageMaxRetries: 1, + PageRetryBase: time.Second, + }) + + if err := runner.RunPrompt(context.Background(), "a robot reading a newspaper"); err != nil { + t.Fatalf("RunPrompt() error = %v", err) + } + if _, err := os.Stat(filepath.Join(tmpDir, "comics", "assets", "manual-robot", "prompt.png")); err != nil { + t.Fatalf("prompt image missing: %v", err) + } + if _, err := os.Stat(filepath.Join(tmpDir, "comics", "PDF")); !os.IsNotExist(err) { + t.Fatalf("PDF directory exists unexpectedly: %v", err) + } + if _, err := os.Stat(filepath.Join(tmpDir, "comics", "gallery")); !os.IsNotExist(err) { + t.Fatalf("gallery directory exists unexpectedly: %v", err) + } +} + +func TestRunnerRunPromptRejectsEmptyPrompt(t *testing.T) { + t.Parallel() + + runner := NewRunner(&RunnerConfig{ + ImageProvider: fakeImageProvider{t: t}, + Prompts: fakePromptRenderer{}, + OutputDir: t.TempDir(), + UltraRealistic: boolPtr(false), + }) + + if err := runner.RunPrompt(context.Background(), " "); err == nil { + t.Fatal("RunPrompt() error = nil, want validation failure") + } +} + func TestNewRunnerUsesRealisticWeightWhenUltraRealisticUnset(t *testing.T) { t.Parallel() @@ -931,3 +980,7 @@ func (p *recordingTTSProvider) GenerateAudio(_ context.Context, text, outputFile p.calls = append(p.calls, text) return os.WriteFile(outputFile, []byte("mp3"), 0o644) } + +func boolPtr(v bool) *bool { + return &v +} -- cgit v1.2.3