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