Commit Graph
1 Commits
Author SHA1 Message Date
Shrinath Rao 496c0d5842 ci(tests): pure-API Playwright spec classifier + anti-drift guard (Phase 3) (#13794)
## What

**Phase 3** of the Playwright→pytest API-test migration — the anti-drift
guardrail. (Phase 1 = Correlation #13788 / o2-ent#2419; Phase 2 = Alerts
#13791.)

> 📚 **Stacked on #13791.** Base is the Phase 2 branch so the diff shows
only these two files; GitHub auto-retargets this PR to `main` once
#13791 merges.

## Changes

- **`tests/ui-testing/scripts/classify-specs.js`** — codifies the
migration classifier. Labels each `*.spec.js` as `UI_ONLY` / `UI+SETUP`
/ `PURE_API` / `REVIEW` from UI markers (`page.goto`, `.click`,
`locator`, `getByRole`, `toBeVisible`, page-object imports, nav
helpers…) vs API markers (`page.request`, `authedRequest`,
`getAuthHeaders`, `/_json`, api-helper imports). Modes:
  - `--all` — regenerate the inventory (summary + PURE_API/REVIEW lists)
  - `--check <files>` — exit 1 if any file is pure-API (the guard)
  - `--json`
- Conservative by design: a spec is `PURE_API` only when **not one** UI
marker appears, so genuine UI tests are never nagged.
- **`.github/workflows/pure-api-spec-guard.yml`** — runs `--check` on
the **newly-added** `*.spec.js` files in a PR and **fails** if any is
pure-API (backend/API assertions with no browser). Pushes new API tests
into pytest (`tests/api-testing/`) from the start. Only added files are
checked, so editing an existing UI spec never trips it.

## Why

The migration removed 9 pure-API specs from the browser harness
(Correlation ×5, Alerts ×4). Without a guard, new API tests get authored
as Playwright specs again and the drift returns. This makes the rule
enforceable in CI instead of relying on reviewer memory.

## Verification

- Re-ran the classifier over all **257** specs → **`PURE_API: 0`** (both
phases fully removed their targets; zero drift). Sole `REVIEW` =
`cleanup.spec.js`, a teardown utility (not a test).
- Self-tested the guard: ✅ flags a synthetic pure-API spec (exit 1 +
actionable message), ✅ passes a UI spec (exit 0).
- Resolved the 6 previously-uncertain "Category C" specs → all UI or
teardown; **0 additional migrations**.
2026-08-13 05:07:55 +00:00