|
1 | 1 | --- |
2 | 2 | name: scout-best-practices-reviewer |
3 | | -description: Use when writing and reviewing Scout UI and API test files. |
| 3 | +description: Review Scout UI/API tests (including Scout test migrations) for best practices, reuse, and parity. |
4 | 4 | --- |
5 | 5 |
|
6 | 6 | # Scout Best Practices Reviewer |
7 | 7 |
|
8 | 8 | ## Overview |
9 | 9 |
|
10 | | -- Identify whether the spec is **UI** (`test`/`spaceTest`) or **API** (`apiTest`) and review against the relevant best practices. |
11 | | -- Keep feedback concise and actionable: focus on correctness, flake risk, and CI/runtime impact. |
12 | | -- Report findings ordered by severity and include the matching best-practice heading (from the reference) next to each finding. |
| 10 | +Perform a static PR review of Scout UI and API test files (`*.spec.ts`) against Scout best practices and existing Scout abstractions (fixtures, page objects, API helpers). Produce actionable, PR-review-ready feedback that pushes for reuse over one-off implementations. |
13 | 11 |
|
14 | | -## References |
| 12 | +Important: Do not post GitHub comments unless explicitly stated. |
15 | 13 |
|
16 | | -Open only what you need: |
| 14 | +### Inputs |
17 | 15 |
|
18 | | -- Review checklist (tagging, structure, auth, flake control): `references/scout-best-practices.md` |
| 16 | +1. Changed `*.spec.ts` files (and imported helpers/fixtures). |
| 17 | + - UI Tests: Use `test` / `spaceTest` (usually in `**/test/scout/ui/**`). |
| 18 | + - API Tests: Use `apiTest` (usually in `**/test/scout/api/**`). |
| 19 | +2. Neighboring Scout code in the same plugin/solution (existing specs + `test/scout/**/fixtures/**`) to spot reuse opportunities and avoid duplicating helpers. |
| 20 | +3. Removed/previous tests (if this is a migration) to verify behavior parity. |
| 21 | +4. Scout docs (open only what you need): |
| 22 | + - Best practices: `docs/extend/scout/best-practices.md` |
| 23 | + - Core concepts & fixtures: `docs/extend/scout/core-concepts.md`, `docs/extend/scout/fixtures.md` |
| 24 | + - Reuse surfaces: `docs/extend/scout/page-objects.md`, `docs/extend/scout/api-services.md` |
| 25 | + - Type-specific guides: `docs/extend/scout/write-ui-tests.md`, `docs/extend/scout/write-api-tests.md` |
| 26 | + - As needed: `docs/extend/scout/api-auth.md`, `docs/extend/scout/browser-auth.md`, `docs/extend/scout/parallelism.md`, `docs/extend/scout/deployment-tags.md`, `docs/extend/scout/a11y-checks.md`, `docs/extend/scout/debugging.md`, `docs/extend/scout/run-tests.md` |
| 27 | + |
| 28 | +## Scope (be comprehensive) |
| 29 | + |
| 30 | +- Don’t limit the review to the diff. Look for duplication and missed reuse by scanning: |
| 31 | + - existing Scout specs in the same area (and similar suites elsewhere in the repo) |
| 32 | + - available fixtures (`docs/extend/scout/fixtures.md` + local `test/scout/**/fixtures`) |
| 33 | + - existing page objects, API services, and fixtures (in `@kbn/scout`, solution Scout packages, and plugin-local `test/scout/**`) before suggesting brand-new helpers |
| 34 | + |
| 35 | +### Quick checklist (details live in `docs/extend/scout/best-practices.md`) |
| 36 | + |
| 37 | +- **Reuse-first**: prefer existing `pageObjects`, fixtures, and `apiServices`; if adding helpers/page objects, place them in the right scope (plugin vs solution vs `@kbn/scout`) and register via fixtures. |
| 38 | +- **Fixture boundaries**: `apiClient` for the endpoint under test; `apiServices`/`kbnClient` for setup/teardown only; correct auth + common headers. |
| 39 | +- **Correctness**: guardrail assertions before dereferencing response fields; validate contract + side effects; stable error assertions. |
| 40 | +- **UI scope**: UI tests should focus on user interactions and rendering; avoid “data correctness” assertions (for example exact API response shapes or exact table cell values) unless the UI behavior depends on them. Prefer Scout API tests (or unit/integration) for data correctness coverage. |
| 41 | +- **Isolation**: parallel-safe data and resilient cleanup in hooks; no reliance on file ordering or shared mutable state. |
| 42 | +- **RBAC / realism**: minimal permissions (avoid `admin` unless required); space-aware behavior covered or explicitly out of scope. |
| 43 | +- **Flake traps**: avoid `waitForTimeout()` and time-based assertions/retries; rely on auto-waiting + explicit readiness signals. |
| 44 | +- **Cost**: avoid repeating expensive setup; consider a global setup hook for shared one-time operations. |
| 45 | +- **Tags / environment**: validate deployment tags and avoid assumptions that only hold in specific environments. |
| 46 | + |
| 47 | +### Migration parity analysis (required when migration is detected) |
| 48 | + |
| 49 | +- **Detect migration** when the PR removes/changes FTR tests (for example `test/functional/**`, `loadTestFile()`, FTR configs) alongside new/changed Scout specs. |
| 50 | +- **If migration is detected**: |
| 51 | + - Treat parity gaps as `blocker` unless explicitly de-scoped. |
| 52 | + - Confirm the suite is the right **test type** (UI vs API): if the old FTR suite is primarily “data correctness”, prefer migrating it to a Scout API test (or unit/integration) rather than a Scout UI test. |
| 53 | + - Build a parity map from old scenarios → new Scout coverage (roles, setup/teardown, assertions, cleanup). |
| 54 | + - Call out missing behaviors (including error paths) and recommend exactly where to add coverage. |
| 55 | + - Escalate meaningful **Scout vs FTR deltas** when they could change what’s actually being tested, weaken coverage, or increase flake risk. Treat these as parity issues that require action (code change or explicit de-scope/sign-off), and include them in the “Migration parity” output section. |
| 56 | + - auth/roles used (e.g., `admin` vs viewer), spaces behavior, and permission realism |
| 57 | + - headers/internal origin/REST versioning and any other request shaping differences |
| 58 | + - retries and error handling differences (e.g., helper methods with `ignoreErrors`, automatic retries) |
| 59 | + - parallelism/isolation differences (worker-scoped fixtures, shared state, cleanup semantics) |
| 60 | + - classic vs serverless coverage changes (suite removed from one environment but not the other) |
| 61 | + - assertion strength changes (weaker/stronger checks, removal of side-effect validation) |
| 62 | + - Verify suite wiring/discovery (new specs are picked up by Scout/Playwright config; no orphaned `loadTestFile()`). |
| 63 | + - Ensure any intentional de-scopes are explicit, and that tags/permissions remain equivalent and cloud/serverless compatible where applicable. |
| 64 | +- **Output**: include the “Migration parity” section only when action is required; otherwise omit it. |
| 65 | + |
| 66 | +## Output format |
| 67 | + |
| 68 | +Output **only** the applicable sections below. Use headings and lists (**no tables**). Group issues by priority: `blocker` → `major` → `minor` → `nit`. Omit empty priorities. |
| 69 | + |
| 70 | +### 1. Findings |
| 71 | + |
| 72 | +#### Blocker |
| 73 | + |
| 74 | +- **<Concern (use exact checklist heading)> — <short summary>** |
| 75 | + - **Explanation**: <1-3 concise, actionable sentences> |
| 76 | + - **Evidence**: `<file:line>` (add multiple as needed) |
| 77 | + - **Suggested change**: <Specific code edit; include a small snippet if helpful> |
| 78 | + |
| 79 | +#### Major |
| 80 | + |
| 81 | +- **<Concern (use exact checklist heading)> — <short summary>** |
| 82 | + - **Explanation**: <...> |
| 83 | + - **Evidence**: `<file:line>` |
| 84 | + - **Suggested change**: <...> |
| 85 | + |
| 86 | +#### Minor |
| 87 | + |
| 88 | +- **<Concern (use exact checklist heading)> — <short summary>** |
| 89 | + - **Explanation**: <...> |
| 90 | + - **Evidence**: `<file:line>` |
| 91 | + - **Suggested change**: <...> |
| 92 | + |
| 93 | +#### Nit |
| 94 | + |
| 95 | +- **<Concern (use exact checklist heading)> — <short summary>** |
| 96 | + - **Explanation**: <...> |
| 97 | + - **Evidence**: `<file:line>` |
| 98 | + - **Suggested change**: <...> |
| 99 | + |
| 100 | +### 2. Migration parity (only if a test migration is detected and action is required) |
| 101 | + |
| 102 | +Include this section only when the PR removes/changes FTR tests alongside new/changed Scout specs **and** you found at least one parity issue that requires someone to step in (code change or an explicit de-scope/sign-off decision). |
| 103 | +Do **not** output an FYI parity map. If everything is equivalent (or differences are clearly benign), omit this section. |
| 104 | + |
| 105 | +#### Blocker / Major / Minor / Nit |
| 106 | + |
| 107 | +- **<Concern (use exact checklist heading)> — <scenario name>** |
| 108 | + - **Issue**: <Coverage gap or behavior delta that needs action> |
| 109 | + - **Old behavior**: <...> |
| 110 | + - **New behavior**: <...> |
| 111 | + - **Why it matters**: <1-2 sentences on risk/coverage impact> |
| 112 | + - **Suggested fix / decision**: <Required. Either a code change or an explicit de-scope/sign-off the reviewer must confirm.> |
| 113 | + - **Evidence**: `<file:line>` |
| 114 | + |
| 115 | +## Follow-up |
| 116 | + |
| 117 | +Offer to generate the updated code, fully incorporating the suggested improvements and resolving any parity gaps. |
0 commit comments