Go 70 lines
package cockpit
import (
"strings"
"testing"
)
// TestStatus_FidelityLabels: Status flags advisory per-playbook targets with
// "(advisory)", aggregate records with "(aggregate, ADVISORY)", and leaves the
// enforced Claude line unsuffixed.
func TestStatus_FidelityLabels(t *testing.T) {
cfg := testConfig(t)
pb := loadHandover(t)
if _, err := Generate(cfg, pb, "claude"); err != nil {
t.Fatal(err)
}
if _, err := Generate(cfg, pb, "cursor"); err != nil {
t.Fatal(err)
}
if _, err := GenerateAll(cfg, []Playbook{pb}, "agents"); err != nil {
t.Fatal(err)
}
joined := strings.Join(Status(cfg), "\n")
for _, want := range []string{
"claude/handover: on",
"cursor/handover: on (advisory)",
"agents: on (aggregate, ADVISORY)",
} {
if !strings.Contains(joined, want) {
t.Errorf("status missing %q:\n%s", want, joined)
}
}
// The enforced line must NOT carry an advisory suffix.
for _, line := range Status(cfg) {
if strings.HasPrefix(line, "claude/handover:") && strings.Contains(line, "advisory") {
t.Errorf("enforced claude line wrongly marked advisory: %q", line)
}
}
}
// TestCursorGenerateOff_Reversible: a per-playbook advisory target emits and
// reverses cleanly through the unchanged emit machinery.
func TestCursorGenerateOff_Reversible(t *testing.T) {
cfg := testConfig(t)
pb := loadHandover(t)
res, err := Generate(cfg, pb, "cursor")
if err != nil {
t.Fatalf("Generate cursor: %v", err)
}
if res.Fidelity != EnforcementAdvisory || !strings.Contains(res.Message(), "advisory") {
t.Errorf("cursor result not flagged advisory: %q", res.Message())
}
vr, err := Verify(cfg, pb, "cursor", "")
if err != nil {
t.Fatal(err)
}
if !vr.Clean {
t.Errorf("fresh cursor emit should verify clean: %q", vr.Detail)
}
off, err := Off(cfg, pb, "cursor")
if err != nil {
t.Fatalf("Off cursor: %v", err)
}
if !off.Changed {
t.Error("Off cursor reported no change")
}
}