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") } }