diff --git a/status/issues.md b/status/issues.md index 70ce69b..653201d 100644 --- a/status/issues.md +++ b/status/issues.md @@ -424,6 +424,20 @@ database, whose accumulated state no longer matches the demo dataset they were written against. Unaffected by the test-database split, which deliberately leaves the walkthroughs on the app database. Re-check after a `make stack-fresh` + `./test/seed-demo.sh`.) +(Update 2026-08-01, during `test-stack-integration-profiles` verification: +the Must-defeats-skip pattern from item (2) recurs in +`TestGrantNonPlanWalkthrough` — grant_nonplan_test.go:30 `MustElementX` +panics on timeout before the `form == nil` skip at :33 can run, so an +unseeded or aged DB fails the test instead of skipping. The parallel guard +at :47 is fine (`MustElements` returns an empty slice without panicking), +as are org_types_test.go (`MustAttribute` legitimately returns nil for an +absent attribute) and helpers_test.go (`rod.Try`). products_test.go:47 has +the same dead `== nil` check after `MustElement`, though it shadows a +failure message, not a skip. Fixed same day: both call sites converted to +non-Must variants; verified live against the aged stack DB, where +`TestGrantNonPlanWalkthrough` now skips cleanly on the exact path that +previously panicked, and `TestProductsWalkthrough` phase 1 passes through +the converted call.) ### HTMX handler file structure cleanup Labels: `refactor` diff --git a/test/e2e/operator-walkthroughs/grant_nonplan_test.go b/test/e2e/operator-walkthroughs/grant_nonplan_test.go index 995bb55..006d2b0 100644 --- a/test/e2e/operator-walkthroughs/grant_nonplan_test.go +++ b/test/e2e/operator-walkthroughs/grant_nonplan_test.go @@ -27,10 +27,10 @@ func TestGrantNonPlanWalkthrough(t *testing.T) { loginAsOperator(t, page, base, "/operator/organizations") _ = gotoFirstOrgComposite(t, page, base) - form := page.Timeout(10 * time.Second).MustElementX( + form, err := page.Timeout(10 * time.Second).ElementX( `//form[contains(@hx-post, "/grant/create")]`, ) - if form == nil { + if err != nil { t.Skip("no non-plan grant form on first org composite — possibly no add-on/usage products") } diff --git a/test/e2e/operator-walkthroughs/products_test.go b/test/e2e/operator-walkthroughs/products_test.go index 798e12b..a931841 100644 --- a/test/e2e/operator-walkthroughs/products_test.go +++ b/test/e2e/operator-walkthroughs/products_test.go @@ -43,9 +43,8 @@ func TestProductsWalkthrough(t *testing.T) { page.MustElement(`#createProductForm button[type=submit]`).MustClick() // Wait for the form re-render with at least one is-invalid field. - invalid := page.Timeout(10 * time.Second).MustElement(`#createProductForm .is-invalid`) - if invalid == nil { - t.Fatalf("phase 1: expected an .is-invalid field after empty submission") + if _, err := page.Timeout(10 * time.Second).Element(`#createProductForm .is-invalid`); err != nil { + t.Fatalf("phase 1: expected an .is-invalid field after empty submission: %v", err) } // Verify the per-field feedback markup is also rendered (per // operator-ux-conventions.md §6).