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