Skip to content
quarry Artifact [be77310b78]
Login

Artifact [be77310b78]

Artifact be77310b78acff52e6bbb7333317799d9978f5abda8195f3dbd2862009cb7d1d:


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")
	}
}