ajhahn.de
← eeco
Go 50 lines
package cockpit

import (
	"strings"
	"testing"
)

func TestGeminiRender_Structure(t *testing.T) {
	out, err := geminiRenderer{}.RenderAll(twoPlaybooks(t))
	if err != nil {
		t.Fatalf("RenderAll: %v", err)
	}
	got := string(out)

	if strings.HasPrefix(got, "---") {
		t.Error("GEMINI.md must not carry YAML frontmatter")
	}
	for _, want := range []string{"# GEMINI.md", advisoryBanner, "## Fidelity report", ".gemini/settings.json"} {
		if !strings.Contains(got, want) {
			t.Errorf("GEMINI.md missing %q", want)
		}
	}
}

func TestGeminiRender_SetOrderStable(t *testing.T) {
	a, err := geminiRenderer{}.RenderAll([]Playbook{loadHandover(t), synthPlaybook("zeta")})
	if err != nil {
		t.Fatal(err)
	}
	b, err := geminiRenderer{}.RenderAll([]Playbook{synthPlaybook("zeta"), loadHandover(t)})
	if err != nil {
		t.Fatal(err)
	}
	if string(a) != string(b) {
		t.Error("aggregate render not stable under input reordering")
	}
}

func TestGeminiAggRelPath(t *testing.T) {
	if got := (geminiRenderer{}).AggRelPath(); got != "GEMINI.md" {
		t.Errorf("AggRelPath = %q, want GEMINI.md", got)
	}
	if !IsAggregateTarget("gemini") {
		t.Error("gemini should be an aggregate target")
	}
	if IsAggregateTarget("claude") || IsAggregateTarget("cursor") {
		t.Error("claude/cursor are per-playbook, not aggregate")
	}
}