package web
import (
"strings"
"testing"
)
// A plan's page lists every step before it is approved, and after it
// runs says what became of each.
func TestARequestPageListsAPlansSteps(t *testing.T) {
render := func(s meSignOff) string {
t.Helper()
var b strings.Builder
if err := noHooks.template(signOffPageTmpl).ExecuteTemplate(&b, "content", pageData{Title: "Approve?", SignOff: &s}); err != nil {
t.Fatal(err)
}
return b.String()
}
waiting := render(meSignOff{ID: "p", Agent: "a", Summary: "t", State: "pending", Requested: "2026-11-08T10:00:00Z",
Steps: []meSignOffStep{{Sentence: "one"}, {Sentence: "two"}}})
if strings.Count(waiting, `data-hook="signoff-step"`) != 2 || !strings.Contains(waiting, `data-hook="signoff-approve"`) {
t.Errorf("FAIL: a waiting plan's page: %s", waiting)
}
ran := render(meSignOff{ID: "p", Agent: "a", Summary: "t", State: "failed", Requested: "2026-11-08T10:00:00Z",
Steps: []meSignOffStep{{Sentence: "one", State: "done"}, {Sentence: "two", State: "failed", Err: "why"}, {Sentence: "three", State: "not run"}}})
for _, want := range []string{`data-state="done"`, `data-state="failed"`, `data-state="not run"`} {
if !strings.Contains(ran, want) {
t.Errorf("FAIL: a finished plan's page lacks %s", want)
}
}
if single := render(meSignOff{ID: "s", Agent: "a", Summary: "t", State: "pending", Requested: "2026-11-08T10:00:00Z"}); strings.Contains(single, `signoff-steps`) {
t.Errorf("FAIL: a single request shows a step list")
}
}