package prompts import ( "strings" "testing" ) func TestNames(t *testing.T) { got := Names() want := []string{"get-project-type", "manifest-summary"} if len(got) != len(want) { t.Fatalf("Names() = %v, want %v", got, want) } for i := range want { if got[i] != want[i] { t.Fatalf("Names() = %v, want %v", got, want) } } } func TestGetRaw(t *testing.T) { body, err := Get(GetProjectType) if err != nil { t.Fatal(err) } if !strings.Contains(body, "{{") { t.Fatal("raw template body should retain template markers") } if !strings.Contains(body, "classifier") { t.Fatalf("unexpected body: %q", body) } } func TestGetUnknown(t *testing.T) { if _, err := Get("does-not-exist"); err == nil { t.Fatal("want error for unknown prompt") } } func TestRenderGetProjectType(t *testing.T) { data := GetProjectTypeData{ Categories: []Category{ {Category: "cli", Description: "command-line tool", PickWhen: "binary entrypoint", Dirs: []string{"cmd", "internal"}}, {Category: "generic", Description: "fallback"}, }, Tree: []string{"go.mod", "cmd/"}, Description: "free text", } out, err := Render(GetProjectType, data) if err != nil { t.Fatal(err) } for _, w := range []string{"command-line tool", "cmd, internal", "go.mod", "free text", "JSON object", "generic"} { if !strings.Contains(out, w) { t.Fatalf("rendered prompt missing %q in:\n%s", w, out) } } if strings.Contains(out, "{{") { t.Fatalf("rendered output still has template markers:\n%s", out) } } func TestRenderManifestSummary(t *testing.T) { data := ManifestSummaryData{ Dir: "frontend", Items: []ManifestItem{{Path: "App.tsx", Kind: "file"}, {Path: "routes/", Kind: "dir"}}, } out, err := Render(ManifestSummary, data) if err != nil { t.Fatal(err) } for _, w := range []string{"frontend", "App.tsx", "routes/", "purpose", "find_when"} { if !strings.Contains(out, w) { t.Fatalf("rendered prompt missing %q in:\n%s", w, out) } } } func TestRenderUnknown(t *testing.T) { if _, err := Render("does-not-exist", nil); err == nil { t.Fatal("want error for unknown prompt") } }