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