Go 62 lines
package cockpit
import (
"strings"
"testing"
)
func TestFidelityOf_PerTarget(t *testing.T) {
cases := map[string]Enforcement{
"claude": EnforcementEnforced,
"cursor": EnforcementAdvisory,
"agents": EnforcementAdvisory,
"gemini": EnforcementAdvisory,
}
for target, want := range cases {
got, ok := TargetFidelity(target)
if !ok {
t.Errorf("%s: not a known target", target)
continue
}
if got != want {
t.Errorf("%s fidelity = %v, want %v", target, got, want)
}
}
if _, ok := TargetFidelity("nosuch"); ok {
t.Error("unknown target reported as known")
}
}
func TestEnforcementString(t *testing.T) {
if EnforcementEnforced.String() != "enforced" || EnforcementAdvisory.String() != "advisory" {
t.Error("Enforcement.String mismatch")
}
}
// TestAdvisoryMessageSuffix: an advisory generate result flags itself; an
// enforced one does not.
func TestAdvisoryMessageSuffix(t *testing.T) {
adv := GenerateResult{Path: "/p", Action: "generated", Fidelity: EnforcementAdvisory}
if !strings.Contains(adv.Message(), "advisory") {
t.Errorf("advisory message missing the advisory note: %q", adv.Message())
}
enf := GenerateResult{Path: "/p", Action: "generated", Fidelity: EnforcementEnforced}
if strings.Contains(enf.Message(), "advisory") {
t.Errorf("enforced message should carry no advisory note: %q", enf.Message())
}
}
// TestBannerPresentRegression guards the honesty banner against silent
// removal — every advisory renderer must embed it.
func TestBannerPresentRegression(t *testing.T) {
pb := loadHandover(t)
cur, _ := cursorRenderer{}.Render(pb)
ag, _ := agentsRenderer{}.RenderAll([]Playbook{pb})
gm, _ := geminiRenderer{}.RenderAll([]Playbook{pb})
for name, out := range map[string][]byte{"cursor": cur, "agents": ag, "gemini": gm} {
if !strings.Contains(string(out), advisoryBanner) {
t.Errorf("%s render dropped the ADVISORY banner", name)
}
}
}