package main import ( "encoding/json" "os" "path/filepath" "sort" "testing" ) // The pointer digest copy (#253) Paul approved, by ID. The record must name // exactly these, and each text must be in its file byte for byte. var digestCopyIDs = []string{ "digests.rollback-resign", "digests.marker-unreadable", "digests.resign-changed", "digests.resign-unreadable", "digests.resign-no-marker", "digests.resign-intro", "digests.resign-row", "digests.resign-computed", "digests.resign-kept", "digests.resign-missing", "digests.resign-prompt", "digests.resign-done", "digests.resign-aborted", "digests.channels-header", "digests.state-yes", "digests.state-no", "digests.state-straggler", "digests.status-on", "digests.status-off", "digests.status-header", "digests.status-none-left", "digests.turned-on", "digests.turned-off", "digests.all-accounts", "digests.cli-heading-resign", "digests.cli-heading-digests", "digests.roll-note", "digests.console-no-key", "digests.console-pointer-write", "digests.console-marker-write", "digests.activity-resigned", "digests.unknown-account", "digests.status-error", } func TestDigestCopyIsApplied(t *testing.T) { raw, err := os.ReadFile("docs/superpowers/plans/2026-10-07-instance-settings-1-copy.json") if err != nil { t.Fatal(err) } var rec struct { ApprovedBy string `json:"approved_by"` ApprovedOn string `json:"approved_on"` Entries []struct{ ID, File, Text string } } if err := json.Unmarshal(raw, &rec); err != nil { t.Fatal(err) } if rec.ApprovedBy == "" || rec.ApprovedOn == "" { t.Fatal("the record has no approval") } var got []string for _, e := range rec.Entries { got = append(got, e.ID) if e.Text == "" { t.Errorf("%s: the approved text is empty", e.ID) continue } body, err := os.ReadFile(filepath.Join(".", e.File)) if err != nil { t.Errorf("%s: %v", e.ID, err) continue } if !copyApplied(e.ID, e.File, e.Text, body) { t.Errorf("%s: %s does not contain the approved text %q", e.ID, e.File, e.Text) } } want := append([]string(nil), digestCopyIDs...) sort.Strings(got) sort.Strings(want) if len(got) != len(want) { t.Fatalf("record IDs %v, want %v", got, want) } for i := range got { if got[i] != want[i] { t.Fatalf("record IDs %v, want %v", got, want) } } }