@athenaflow/plugin-e2e-test-builder 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/.claude-plugin/plugin.json +20 -0
  2. package/.codex-plugin/plugin.json +15 -0
  3. package/dist/2.0.8/.agents/plugins/marketplace.json +14 -0
  4. package/dist/2.0.8/claude/plugin/.claude-plugin/plugin.json +20 -0
  5. package/dist/2.0.8/claude/plugin/package.json +9 -0
  6. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/SKILL.md +217 -0
  7. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/agents/claude.yaml +1 -0
  8. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  9. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  10. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  11. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  12. package/dist/2.0.8/claude/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  13. package/dist/2.0.8/claude/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  14. package/dist/2.0.8/claude/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  15. package/dist/2.0.8/claude/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  16. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  17. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  18. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  19. package/dist/2.0.8/claude/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  20. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/SKILL.md +184 -0
  21. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  22. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  23. package/dist/2.0.8/claude/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  24. package/dist/2.0.8/claude/plugin/skills/plan-test-coverage/SKILL.md +116 -0
  25. package/dist/2.0.8/claude/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  26. package/dist/2.0.8/claude/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  27. package/dist/2.0.8/claude/plugin/skills/review-test-cases/SKILL.md +147 -0
  28. package/dist/2.0.8/claude/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  29. package/dist/2.0.8/claude/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  30. package/dist/2.0.8/claude/plugin/skills/review-test-code/SKILL.md +189 -0
  31. package/dist/2.0.8/claude/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  32. package/dist/2.0.8/claude/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  33. package/dist/2.0.8/claude/plugin/skills/write-test-code/SKILL.md +227 -0
  34. package/dist/2.0.8/claude/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  35. package/dist/2.0.8/claude/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  36. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  37. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  38. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  39. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  40. package/dist/2.0.8/claude/plugin/skills/write-test-code/references/network-interception.md +56 -0
  41. package/dist/2.0.8/codex/plugin/.codex-plugin/plugin.json +15 -0
  42. package/dist/2.0.8/codex/plugin/package.json +9 -0
  43. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/SKILL.md +217 -0
  44. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/agents/claude.yaml +1 -0
  45. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  46. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  47. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  48. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  49. package/dist/2.0.8/codex/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  50. package/dist/2.0.8/codex/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  51. package/dist/2.0.8/codex/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  52. package/dist/2.0.8/codex/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  53. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  54. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  55. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  56. package/dist/2.0.8/codex/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  57. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/SKILL.md +184 -0
  58. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  59. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  60. package/dist/2.0.8/codex/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  61. package/dist/2.0.8/codex/plugin/skills/plan-test-coverage/SKILL.md +116 -0
  62. package/dist/2.0.8/codex/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  63. package/dist/2.0.8/codex/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  64. package/dist/2.0.8/codex/plugin/skills/review-test-cases/SKILL.md +147 -0
  65. package/dist/2.0.8/codex/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  66. package/dist/2.0.8/codex/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  67. package/dist/2.0.8/codex/plugin/skills/review-test-code/SKILL.md +189 -0
  68. package/dist/2.0.8/codex/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  69. package/dist/2.0.8/codex/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  70. package/dist/2.0.8/codex/plugin/skills/write-test-code/SKILL.md +227 -0
  71. package/dist/2.0.8/codex/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  72. package/dist/2.0.8/codex/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  73. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  74. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  75. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  76. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  77. package/dist/2.0.8/codex/plugin/skills/write-test-code/references/network-interception.md +56 -0
  78. package/dist/2.0.8/release.json +18 -0
  79. package/dist/2.0.9/.agents/plugins/marketplace.json +14 -0
  80. package/dist/2.0.9/claude/plugin/.claude-plugin/plugin.json +20 -0
  81. package/dist/2.0.9/claude/plugin/package.json +9 -0
  82. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/SKILL.md +215 -0
  83. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/agents/claude.yaml +3 -0
  84. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  85. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  86. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  87. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  88. package/dist/2.0.9/claude/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  89. package/dist/2.0.9/claude/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  90. package/dist/2.0.9/claude/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  91. package/dist/2.0.9/claude/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  92. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  93. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  94. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  95. package/dist/2.0.9/claude/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  96. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/SKILL.md +184 -0
  97. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  98. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  99. package/dist/2.0.9/claude/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  100. package/dist/2.0.9/claude/plugin/skills/plan-test-coverage/SKILL.md +117 -0
  101. package/dist/2.0.9/claude/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  102. package/dist/2.0.9/claude/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  103. package/dist/2.0.9/claude/plugin/skills/review-test-cases/SKILL.md +147 -0
  104. package/dist/2.0.9/claude/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  105. package/dist/2.0.9/claude/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  106. package/dist/2.0.9/claude/plugin/skills/review-test-code/SKILL.md +189 -0
  107. package/dist/2.0.9/claude/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  108. package/dist/2.0.9/claude/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  109. package/dist/2.0.9/claude/plugin/skills/write-test-code/SKILL.md +227 -0
  110. package/dist/2.0.9/claude/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  111. package/dist/2.0.9/claude/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  112. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  113. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  114. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  115. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  116. package/dist/2.0.9/claude/plugin/skills/write-test-code/references/network-interception.md +56 -0
  117. package/dist/2.0.9/codex/plugin/.codex-plugin/plugin.json +15 -0
  118. package/dist/2.0.9/codex/plugin/package.json +9 -0
  119. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/SKILL.md +215 -0
  120. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/agents/claude.yaml +3 -0
  121. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/agents/openai.yaml +10 -0
  122. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/authentication.md +8 -0
  123. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/error-recovery.md +43 -0
  124. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/scaffolding.md +12 -0
  125. package/dist/2.0.9/codex/plugin/skills/add-e2e-tests/references/tracker-template.md +53 -0
  126. package/dist/2.0.9/codex/plugin/skills/analyze-test-codebase/SKILL.md +142 -0
  127. package/dist/2.0.9/codex/plugin/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  128. package/dist/2.0.9/codex/plugin/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  129. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/SKILL.md +160 -0
  130. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  131. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  132. package/dist/2.0.9/codex/plugin/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  133. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/SKILL.md +184 -0
  134. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/agents/claude.yaml +3 -0
  135. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/agents/openai.yaml +10 -0
  136. package/dist/2.0.9/codex/plugin/skills/generate-test-cases/references/scenario-categories.md +36 -0
  137. package/dist/2.0.9/codex/plugin/skills/plan-test-coverage/SKILL.md +117 -0
  138. package/dist/2.0.9/codex/plugin/skills/plan-test-coverage/agents/claude.yaml +3 -0
  139. package/dist/2.0.9/codex/plugin/skills/plan-test-coverage/agents/openai.yaml +10 -0
  140. package/dist/2.0.9/codex/plugin/skills/review-test-cases/SKILL.md +147 -0
  141. package/dist/2.0.9/codex/plugin/skills/review-test-cases/agents/claude.yaml +3 -0
  142. package/dist/2.0.9/codex/plugin/skills/review-test-cases/agents/openai.yaml +10 -0
  143. package/dist/2.0.9/codex/plugin/skills/review-test-code/SKILL.md +189 -0
  144. package/dist/2.0.9/codex/plugin/skills/review-test-code/agents/claude.yaml +3 -0
  145. package/dist/2.0.9/codex/plugin/skills/review-test-code/agents/openai.yaml +10 -0
  146. package/dist/2.0.9/codex/plugin/skills/write-test-code/SKILL.md +227 -0
  147. package/dist/2.0.9/codex/plugin/skills/write-test-code/agents/claude.yaml +3 -0
  148. package/dist/2.0.9/codex/plugin/skills/write-test-code/agents/openai.yaml +10 -0
  149. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/anti-patterns.md +88 -0
  150. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/api-setup-teardown.md +83 -0
  151. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/auth-patterns.md +63 -0
  152. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/mapping-tables.md +56 -0
  153. package/dist/2.0.9/codex/plugin/skills/write-test-code/references/network-interception.md +56 -0
  154. package/dist/2.0.9/release.json +18 -0
  155. package/package.json +13 -0
  156. package/skills/add-e2e-tests/SKILL.md +215 -0
  157. package/skills/add-e2e-tests/agents/claude.yaml +3 -0
  158. package/skills/add-e2e-tests/agents/openai.yaml +10 -0
  159. package/skills/add-e2e-tests/references/authentication.md +8 -0
  160. package/skills/add-e2e-tests/references/error-recovery.md +43 -0
  161. package/skills/add-e2e-tests/references/scaffolding.md +12 -0
  162. package/skills/add-e2e-tests/references/tracker-template.md +53 -0
  163. package/skills/analyze-test-codebase/SKILL.md +142 -0
  164. package/skills/analyze-test-codebase/agents/claude.yaml +3 -0
  165. package/skills/analyze-test-codebase/agents/openai.yaml +4 -0
  166. package/skills/fix-flaky-tests/SKILL.md +160 -0
  167. package/skills/fix-flaky-tests/agents/claude.yaml +3 -0
  168. package/skills/fix-flaky-tests/agents/openai.yaml +10 -0
  169. package/skills/fix-flaky-tests/references/fix-patterns.md +91 -0
  170. package/skills/generate-test-cases/SKILL.md +184 -0
  171. package/skills/generate-test-cases/agents/claude.yaml +3 -0
  172. package/skills/generate-test-cases/agents/openai.yaml +10 -0
  173. package/skills/generate-test-cases/references/scenario-categories.md +36 -0
  174. package/skills/plan-test-coverage/SKILL.md +117 -0
  175. package/skills/plan-test-coverage/agents/claude.yaml +3 -0
  176. package/skills/plan-test-coverage/agents/openai.yaml +10 -0
  177. package/skills/review-test-cases/SKILL.md +147 -0
  178. package/skills/review-test-cases/agents/claude.yaml +3 -0
  179. package/skills/review-test-cases/agents/openai.yaml +10 -0
  180. package/skills/review-test-code/SKILL.md +189 -0
  181. package/skills/review-test-code/agents/claude.yaml +3 -0
  182. package/skills/review-test-code/agents/openai.yaml +10 -0
  183. package/skills/write-test-code/SKILL.md +227 -0
  184. package/skills/write-test-code/agents/claude.yaml +3 -0
  185. package/skills/write-test-code/agents/openai.yaml +10 -0
  186. package/skills/write-test-code/references/anti-patterns.md +88 -0
  187. package/skills/write-test-code/references/api-setup-teardown.md +83 -0
  188. package/skills/write-test-code/references/auth-patterns.md +63 -0
  189. package/skills/write-test-code/references/mapping-tables.md +56 -0
  190. package/skills/write-test-code/references/network-interception.md +56 -0
@@ -0,0 +1,63 @@
1
+ # Authentication Setup Patterns
2
+
3
+ Choose the right auth strategy based on the project's needs.
4
+
5
+ ## Strategy 1: storageState (Recommended for most projects)
6
+
7
+ Log in once in global setup, save cookies/localStorage to a JSON file, and reuse across all tests:
8
+
9
+ ```typescript
10
+ // global-setup.ts
11
+ import { chromium, FullConfig } from '@playwright/test';
12
+
13
+ async function globalSetup(config: FullConfig) {
14
+ const browser = await chromium.launch();
15
+ const page = await browser.newPage();
16
+ await page.goto('/login');
17
+ await page.getByLabel(/email/i).fill(process.env.TEST_USER_EMAIL!);
18
+ await page.getByLabel(/password/i).fill(process.env.TEST_USER_PASSWORD!);
19
+ await page.getByRole('button', { name: /sign in/i }).click();
20
+ await page.waitForURL('/dashboard');
21
+ await page.context().storageState({ path: 'tests/.auth/user.json' });
22
+ await browser.close();
23
+ }
24
+ export default globalSetup;
25
+ ```
26
+
27
+ Reference in config: `use: { storageState: 'tests/.auth/user.json' }`
28
+
29
+ ## Strategy 2: Worker-scoped fixture (for parallel workers needing separate accounts)
30
+
31
+ ```typescript
32
+ export const test = base.extend<{}, { workerStorageState: string }>({
33
+ storageState: ({ workerStorageState }, use) => use(workerStorageState),
34
+ workerStorageState: [async ({ browser }, use, testInfo) => {
35
+ const page = await browser.newPage({ storageState: undefined });
36
+ // Login with worker-specific account...
37
+ const path = `tests/.auth/worker-${testInfo.parallelIndex}.json`;
38
+ await page.context().storageState({ path });
39
+ await use(path);
40
+ await page.close();
41
+ }, { scope: 'worker' }],
42
+ });
43
+ ```
44
+
45
+ ## Strategy 3: Multi-role testing (admin + user in same test)
46
+
47
+ ```typescript
48
+ test('TC-ADMIN-001: Admin sees user profile', async ({ browser }) => {
49
+ const adminContext = await browser.newContext({ storageState: 'tests/.auth/admin.json' });
50
+ const userContext = await browser.newContext({ storageState: 'tests/.auth/user.json' });
51
+ const adminPage = await adminContext.newPage();
52
+ const userPage = await userContext.newPage();
53
+ // Interact with both pages...
54
+ await adminContext.close();
55
+ await userContext.close();
56
+ });
57
+ ```
58
+
59
+ ## Strategy 4: Per-test login
60
+
61
+ Only when testing login itself or permission-specific scenarios.
62
+
63
+ Never hardcode tokens. Use environment variables or `.env.test`.
@@ -0,0 +1,56 @@
1
+ # Mapping Tables
2
+
3
+ Standard translations for converting journey specs and exploration results to Playwright API calls.
4
+
5
+ ## Scope-to-Locator
6
+
7
+ | Journey Scope | Playwright Scoping |
8
+ |---------------|-------------------|
9
+ | `page` | No scoping needed |
10
+ | `header` | `page.locator('header')` |
11
+ | `main` | `page.locator('main')` |
12
+ | `nav` | `page.locator('nav')` |
13
+ | `dialog` | `page.locator('[role="dialog"]')` |
14
+
15
+ ## Action-to-Playwright
16
+
17
+ | Journey Action | Playwright Code |
18
+ |----------------|-----------------|
19
+ | `goto` | `await page.goto(url)` |
20
+ | `click` | `await locator.click()` |
21
+ | `fill` | `await locator.fill(value)` |
22
+ | `select` | `await locator.selectOption(value)` |
23
+ | `assert` | `await expect(locator).toBeVisible()` |
24
+
25
+ ## Assertion Mapping
26
+
27
+ | Observed Effect | Playwright Assertion |
28
+ |----------------|---------------------|
29
+ | `url changed to /cart` | `await expect(page).toHaveURL(/cart/)` |
30
+ | `text 'Added' visible` | `await expect(page.getByText(/added/i)).toBeVisible()` |
31
+ | `radio 256GB checked` | `await expect(locator).toBeChecked()` |
32
+ | `button now enabled` | `await expect(locator).toBeEnabled()` |
33
+
34
+ ## Target Kind to Locator
35
+
36
+ | Target Kind | Value Pattern | Playwright Locator |
37
+ |-------------|--------------|-------------------|
38
+ | `role` | `button name~Add to Bag` | `getByRole('button', { name: /add to bag/i })` |
39
+ | `role` | `radio name~256GB` | `getByRole('radio', { name: /256gb/i })` |
40
+ | `label` | `Email address` | `getByLabel(/email address/i)` |
41
+ | `testid` | `checkout-button` | `getByTestId('checkout-button')` |
42
+
43
+ ## Low Confidence Handling (<0.7)
44
+
45
+ When journey step confidence is low:
46
+ 1. Add extra assertions to verify state
47
+ 2. Include fallback locators as comments
48
+ 3. Consider retry logic for flaky interactions
49
+
50
+ ```typescript
51
+ // Primary locator
52
+ const storageRadio = page.getByRole('radio', { name: /256gb/i });
53
+ // Fallback: page.getByLabel(/256gb/i)
54
+ await storageRadio.click();
55
+ await expect(storageRadio).toBeChecked({ timeout: 5000 });
56
+ ```
@@ -0,0 +1,56 @@
1
+ # Network Interception and Error Path Testing
2
+
3
+ ## Network Interception
4
+
5
+ Use `page.route()` to intercept and mock network requests for deterministic error testing.
6
+
7
+ **Mock server errors:**
8
+ ```typescript
9
+ await page.route('**/api/checkout', route =>
10
+ route.fulfill({ status: 500, body: JSON.stringify({ error: 'Payment declined' }) })
11
+ );
12
+ ```
13
+
14
+ **Patch real responses (modify, don't replace):**
15
+ ```typescript
16
+ await page.route('**/api/products', async route => {
17
+ const response = await route.fetch();
18
+ const json = await response.json();
19
+ json.results = json.results.slice(0, 1); // reduce to 1 item
20
+ await route.fulfill({ response, json });
21
+ });
22
+ ```
23
+
24
+ **Assert backend was called:**
25
+ ```typescript
26
+ const [response] = await Promise.all([
27
+ page.waitForResponse(resp =>
28
+ resp.url().includes('/api/order') && resp.status() === 201
29
+ ),
30
+ page.getByRole('button', { name: /place order/i }).click(),
31
+ ]);
32
+ expect(response.status()).toBe(201);
33
+ ```
34
+
35
+ **Block heavy resources to speed up tests:**
36
+ ```typescript
37
+ await page.route('**/*.{png,jpg,jpeg,gif,svg}', route => route.abort());
38
+ ```
39
+
40
+ ## Error Path Testing
41
+
42
+ Every feature needs error path tests. Use network interception (see above) to simulate failures. At minimum, every feature test suite should cover:
43
+
44
+ - **Server error** — `route.fulfill({ status: 500, ... })` — verify error UI appears
45
+ - **Network timeout** — `route.abort('timedout')` — verify retry option or error message
46
+ - **Empty state** — `route.fulfill({ status: 200, json: { items: [] } })` — verify empty state UI
47
+
48
+ ```typescript
49
+ test('TC-DASHBOARD-005: Shows empty state when no data', async ({ page }) => {
50
+ await page.route('**/api/items', route =>
51
+ route.fulfill({ status: 200, json: { items: [] } })
52
+ );
53
+ await page.goto('/dashboard');
54
+ await expect(page.getByText(/no items/i)).toBeVisible();
55
+ });
56
+ ```