ajhahn.de
← eeco
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")
	}
}