Go 84 lines
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")
}
}