|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- ---
- name: 'step-03b-subagent-e2e'
- description: 'Subagent: Generate E2E tests only'
- subagent: true
- outputFile: '/tmp/tea-automate-e2e-tests-{{timestamp}}.json'
- ---
-
- # Subagent 3B: Generate E2E Tests
-
- ## SUBAGENT CONTEXT
-
- This is an **isolated subagent** running in parallel with API test generation.
-
- **What you have from parent workflow:**
-
- - Target features/user journeys identified in Step 2
- - Knowledge fragments loaded: fixture-architecture, network-first, selector-resilience, playwright-cli
- - Config: test framework, Playwright Utils enabled/disabled
- - Coverage plan: which user journeys need E2E testing
-
- **Your task:** Generate E2E tests ONLY (not API, not fixtures, not other test types).
-
- ---
-
- ## MANDATORY EXECUTION RULES
-
- - 📖 Read this entire subagent file before acting
- - ✅ Generate E2E tests ONLY
- - ✅ Output structured JSON to temp file
- - ✅ Follow knowledge fragment patterns
- - ❌ Do NOT generate API tests (that's subagent 3A)
- - ❌ Do NOT run tests (that's step 4)
- - ❌ Do NOT generate fixtures yet (that's step 3C aggregation)
-
- ---
-
- ## SUBAGENT TASK
-
- ### 1. Identify User Journeys
-
- From the coverage plan (Step 2 output), identify:
-
- - Which user journeys need E2E coverage
- - Critical user paths (authentication, checkout, profile, etc.)
- - UI interactions required
- - Expected visual states
-
- ### 2. Browser Interaction (Selector Verification)
-
- **Automation mode:** `config.tea_browser_automation`
-
- If `auto` (fall back to MCP if CLI unavailable; if neither available, generate from best practices):
-
- - Open the target page first, then verify selectors with a snapshot:
- `playwright-cli -s=tea-automate-{{timestamp}} open <target_url>`
- `playwright-cli -s=tea-automate-{{timestamp}} snapshot` → map refs to Playwright locators
- - ref `{role: "button", name: "Submit"}` → `page.getByRole('button', { name: 'Submit' })`
- - ref `{role: "textbox", name: "Email"}` → `page.getByRole('textbox', { name: 'Email' })`
- - `playwright-cli -s=tea-automate-{{timestamp}} close` when done
-
- If `cli` (CLI only — do NOT fall back to MCP; generate from best practices if CLI unavailable):
-
- - Open the target page first, then verify selectors with a snapshot:
- `playwright-cli -s=tea-automate-{{timestamp}} open <target_url>`
- `playwright-cli -s=tea-automate-{{timestamp}} snapshot` → map refs to Playwright locators
- - ref `{role: "button", name: "Submit"}` → `page.getByRole('button', { name: 'Submit' })`
- - ref `{role: "textbox", name: "Email"}` → `page.getByRole('textbox', { name: 'Email' })`
- - `playwright-cli -s=tea-automate-{{timestamp}} close` when done
-
- > **Session Hygiene:** Always close sessions using `playwright-cli -s=tea-automate-{{timestamp}} close`. Do NOT use `close-all` — it kills every session on the machine and breaks parallel execution.
-
- If `mcp`:
-
- - Use MCP tools for selector verification (current behavior)
-
- If `none`:
-
- - Generate selectors from best practices without browser verification
-
- ### 3. Generate E2E Test Files
-
- For each user journey, create test file in `tests/e2e/[feature].spec.ts`:
-
- **Test Structure:**
-
- ```typescript
- import { test, expect } from '@playwright/test';
-
- test.describe('[Feature] E2E User Journey', () => {
- test('[P0] should complete [user journey]', async ({ page }) => {
- // Navigate to starting point
- await page.goto('/feature');
-
- // Interact with UI
- await page.getByRole('button', { name: 'Submit' }).click();
-
- // Assert expected state
- await expect(page.getByText('Success')).toBeVisible();
- });
-
- test('[P1] should handle [edge case]', async ({ page }) => {
- // Test edge case scenario
- });
- });
- ```
-
- **Requirements:**
-
- - ✅ Follow fixture architecture patterns (from fixture-architecture fragment)
- - ✅ Use network-first patterns: intercept before navigate (from network-first fragment)
- - ✅ Use resilient selectors: getByRole, getByText, getByLabel (from selector-resilience fragment)
- - ✅ Include priority tags [P0], [P1], [P2], [P3]
- - ✅ Test complete user journeys (not isolated clicks)
- - ✅ Use proper TypeScript types
- - ✅ Deterministic waits (no hard sleeps, use expect().toBeVisible())
-
- ### 4. Track Fixture Needs
-
- Identify fixtures needed for E2E tests:
-
- - Page object models (if complex)
- - Authentication fixtures (logged-in user state)
- - Network mocks/intercepts
- - Test data fixtures
-
- **Do NOT create fixtures yet** - just track what's needed for aggregation step.
-
- ---
-
- ## OUTPUT FORMAT
-
- Write JSON to temp file: `/tmp/tea-automate-e2e-tests-{{timestamp}}.json`
-
- ```json
- {
- "success": true,
- "subagent": "e2e-tests",
- "tests": [
- {
- "file": "tests/e2e/authentication.spec.ts",
- "content": "[full TypeScript test file content]",
- "description": "E2E tests for user authentication journey",
- "priority_coverage": {
- "P0": 2,
- "P1": 3,
- "P2": 2,
- "P3": 0
- }
- },
- {
- "file": "tests/e2e/checkout.spec.ts",
- "content": "[full TypeScript test file content]",
- "description": "E2E tests for checkout journey",
- "priority_coverage": {
- "P0": 3,
- "P1": 2,
- "P2": 1,
- "P3": 0
- }
- }
- ],
- "fixture_needs": ["authenticatedUserFixture", "paymentMockFixture", "checkoutDataFixture"],
- "knowledge_fragments_used": ["fixture-architecture", "network-first", "selector-resilience", "playwright-cli"],
- "test_count": 15,
- "summary": "Generated 15 E2E test cases covering 5 user journeys"
- }
- ```
-
- **On Error:**
-
- ```json
- {
- "success": false,
- "subagent": "e2e-tests",
- "error": "Error message describing what went wrong",
- "partial_output": {
- /* any tests generated before error */
- }
- }
- ```
-
- ---
-
- ## EXIT CONDITION
-
- Subagent completes when:
-
- - ✅ All user journeys have E2E test files generated
- - ✅ All tests follow knowledge fragment patterns
- - ✅ JSON output written to temp file
- - ✅ Fixture needs tracked
-
- **Subagent terminates here.** Parent workflow will read output and proceed to aggregation.
-
- ---
-
- ## 🚨 SUBAGENT SUCCESS METRICS
-
- ### ✅ SUCCESS:
-
- - All E2E tests generated following patterns
- - JSON output valid and complete
- - No API/component/unit tests included (out of scope)
- - Resilient selectors used (getByRole, getByText)
- - Network-first patterns applied (intercept before navigate)
-
- ### ❌ FAILURE:
-
- - Generated tests other than E2E tests
- - Did not follow knowledge fragment patterns
- - Invalid or missing JSON output
- - Ran tests (not subagent responsibility)
- - Used brittle selectors (CSS classes, XPath)
|