Go 52 lines
package workflow
import (
"os"
"path/filepath"
"strings"
"testing"
"github.com/ajhahnde/eeco/internal/cockpit"
"github.com/ajhahnde/eeco/internal/config"
"github.com/ajhahnde/eeco/internal/playbooks"
)
// TestCockpitSync_AutoRegeneratesDrift: at automation=auto, a drifted artifact
// is regenerated to its clean bytes, the run reports CodeClean, and nothing is
// queued (the C4 reconcile path; orphans/safety would still queue).
func TestCockpitSync_AutoRegeneratesDrift(t *testing.T) {
cfg := newCfg(t)
cfg.UserDir = filepath.Join(cfg.RepoRoot, "tester")
cfg.Automation = config.AutomationAuto
if err := cockpit.SaveSelection(cfg, cockpit.Selection{Targets: []string{"claude"}}); err != nil {
t.Fatal(err)
}
pb, err := playbooks.Get("handover")
if err != nil {
t.Fatal(err)
}
if _, err := cockpit.Generate(cfg, pb, "claude"); err != nil {
t.Fatalf("generate: %v", err)
}
dst := filepath.Join(cfg.UserDir, ".claude", "skills", "handover", "SKILL.md")
clean, _ := os.ReadFile(dst)
if err := os.WriteFile(dst, []byte("edited\n"), 0o644); err != nil {
t.Fatal(err)
}
res, err := cockpitSync{}.Run(Env{Config: cfg})
if err != nil {
t.Fatal(err)
}
if res.Code != CodeClean {
t.Errorf("auto-regen of pure drift = Code %d (%q), want CodeClean", res.Code, res.Summary)
}
got, _ := os.ReadFile(dst)
if string(got) != string(clean) {
t.Errorf("drifted artifact not regenerated to clean bytes:\n%s", got)
}
if q := queueBody(t, cfg); strings.Contains(q, "cockpit-sync") {
t.Errorf("auto-regen of pure drift must not queue, got:\n%s", q)
}
}