# E2E Test Suite Documentation

## Overview
Comprehensive end-to-end test suite for WorkRoot IT Solutions website covering all critical user journeys and interactions.

## Test Suites

### 1. **Smoke Suite** (`e2e-smoke-suite.spec.ts`)
**Priority:** P0 - Must pass before any deployment
**Runtime:** < 2 minutes
**Purpose:** Rapid verification of critical functionality

#### Coverage:
- All critical pages load (9 pages)
- Core navigation flows work
- Contact form basic submission
- Blog navigation basics
- Performance checks (< 3s load time)
- No JavaScript errors
- Responsive layout (Mobile/Tablet/Desktop)
- SEO basics (meta tags)
- Security headers present
- Accessibility basics
- Critical assets load

**When to run:** Every commit, before deployment, CI/CD pipeline

---

### 2. **Critical User Journeys** (`e2e-critical-paths.spec.ts`)
**Priority:** P0
**Runtime:** 3-5 minutes
**Purpose:** Test complete user flows from entry to conversion

#### User Journeys Tested:
1. **First Time Visitor → Contact**
   - Homepage → Services → Contact → Form Submission

2. **Technical Reader → Blog → Contact**
   - Homepage → Blog → Read Post → Contact

3. **Portfolio Exploration**
   - Portfolio → About → Contact

4. **Mobile First-Time Visitor**
   - Mobile navigation → Services → Contact form

5. **Quick Information Seeker**
   - Footer links → Privacy → Terms → Home

6. **Return Visitor - Direct Blog Access**
   - Bookmark/Search → Blog Post → Listing

7. **Security & Trust Verification**
   - HTTPS check → Privacy Policy → Terms

8. **Multi-page Session**
   - All pages visited in sequence
   - No console errors
   - No layout shifts

---

### 3. **Form Interactions** (`e2e-form-interactions.spec.ts`)
**Priority:** P1
**Runtime:** 4-6 minutes
**Purpose:** Deep testing of contact form functionality

#### Coverage:
- **Happy Path:**
  - Successful submission with all fields
  - Loading states
  - Success messages
  - Form clearing

- **Validation:**
  - Empty submission
  - Invalid email format
  - Name too short
  - Message too short
  - Real-time validation
  - Error message display

- **Security:**
  - Honeypot protection (bot detection)
  - Multiple submission prevention

- **UX Features:**
  - Phone field formats
  - Subject dropdown
  - Focus states
  - Keyboard navigation (Tab order)

- **Accessibility:**
  - Labels associated with inputs
  - Error announcements
  - Submit button states

- **Mobile:**
  - Touch interactions
  - Keyboard types (email, tel)
  - Viewport fit

---

### 4. **Blog Navigation** (`e2e-blog-navigation.spec.ts`)
**Priority:** P1
**Runtime:** 5-7 minutes
**Purpose:** Comprehensive blog functionality testing

#### Coverage:
- **Navigation Flows:**
  - Homepage → Blog → Post → Back
  - Multiple post reading
  - Direct URL access

- **Reading Experience:**
  - Deep reading (scrolling)
  - Content structure
  - Typography
  - Image loading
  - Code blocks

- **Metadata & SEO:**
  - Dates visible
  - Categories/tags
  - Social sharing

- **Mobile Reading:**
  - Responsive layout
  - Font sizes
  - Image adaptation
  - Scroll performance

- **Reading Patterns:**
  - Skimming behavior
  - Deep reading scroll
  - Code block interaction

- **Performance:**
  - Listing load time < 3s
  - Post load time < 3s
  - Lazy loading

- **Edge Cases:**
  - Direct URL access
  - 404 handling
  - Empty state

---

## Test Execution

### Quick Start
```bash
# Run all E2E tests
npm run test

# Run only smoke tests (fast)
npm run test tests/e2e-smoke-suite.spec.ts

# Run specific suite
npm run test tests/e2e-critical-paths.spec.ts

# Run on specific browser
npm run test:chromium
npm run test:firefox
npm run test:webkit

# Mobile testing
npm run test:mobile
```

### CI/CD Integration
```bash
# Pre-commit: Smoke suite only
npm run test tests/e2e-smoke-suite.spec.ts -- --project=chromium

# Pre-merge: All critical tests
npm run test tests/e2e-smoke-suite.spec.ts tests/e2e-critical-paths.spec.ts

# Nightly: Full regression
npm run test
```

### Test Reports
```bash
# View HTML report
npm run test:report

# Generate JSON report (for CI)
npm run test -- --reporter=json > test-results/report.json
```

---

## Test Environment

### Prerequisites
- Node.js installed
- Dependencies installed (`npm install`)
- Server running on `http://localhost:10000`

### Starting the server
```bash
# Terminal 1: Start server
npm run dev

# Terminal 2: Run tests
npm run test
```

### Environment Variables
No environment variables required for E2E tests.

---

## Test Data

### Blog Posts Used
- `getting-started-with-astro` - Main test post

### Form Test Data
```javascript
{
  name: "John Doe",
  email: "john.doe@example.com",
  phone: "+1 555-123-4567",
  subject: "web-development",
  message: "I am interested in..."
}
```

---

## Coverage Matrix

| Feature | Smoke | Critical Paths | Form | Blog | Total Tests |
|---------|-------|----------------|------|------|-------------|
| Page Loads | ✅ 9 | ✅ 6 | ✅ 1 | ✅ 3 | 19 |
| Navigation | ✅ 2 | ✅ 8 | - | ✅ 7 | 17 |
| Forms | ✅ 1 | ✅ 3 | ✅ 20 | - | 24 |
| Mobile | ✅ 3 | ✅ 1 | ✅ 2 | ✅ 2 | 8 |
| Performance | ✅ 2 | ✅ 1 | - | ✅ 3 | 6 |
| Accessibility | ✅ 2 | - | ✅ 3 | ✅ 1 | 6 |
| Security | ✅ 1 | ✅ 1 | ✅ 2 | - | 4 |
| **Total** | **20** | **20** | **28** | **16** | **84** |

---

## Browser Support

### Tested Browsers
- ✅ **Chromium** (Chrome, Edge, Brave)
- ✅ **Firefox**
- ✅ **WebKit** (Safari)
- ✅ **Mobile Chrome** (Pixel 5)
- ✅ **Mobile Safari** (iPhone 12)
- ✅ **Tablet** (iPad Pro 11)

### Test Matrix Strategy
- **Smoke Suite:** Chromium only (speed)
- **Critical Paths:** All browsers
- **Form Tests:** Chromium + Mobile
- **Blog Tests:** Chromium + Mobile Safari

---

## Flaky Test Prevention

### Strategies Implemented
1. **Explicit Waits:** `waitForLoadState('networkidle')`
2. **Element Visibility Checks:** Before interaction
3. **Retry Logic:** Playwright built-in (2 retries in CI)
4. **Stable Selectors:** Semantic selectors over CSS classes
5. **Timeouts:** Generous timeouts for slow environments

### Known Issues
- None currently identified

---

## Debugging Failed Tests

### Screenshot on Failure
Screenshots automatically saved to `test-results/` on failure.

### Video Recording
```bash
# Enable video for all tests
npm run test -- --video=on
```

### Trace Viewer
```bash
# Tests run with trace on first retry
# View trace:
npx playwright show-trace test-results/.../trace.zip
```

### Debug Mode
```bash
# Run in headed mode with slow-mo
npm run test -- --headed --slow-mo=1000
```

---

## Maintenance

### Adding New Tests
1. Identify user journey or feature
2. Choose appropriate suite file
3. Write test following existing patterns
4. Run locally: `npm run test path/to/test.spec.ts`
5. Update this README with coverage

### Updating Selectors
When UI changes:
1. Run tests to identify failures
2. Update selectors in failed tests
3. Prefer semantic selectors (`getByRole`, `getByLabel`)
4. Verify across all browsers

### Performance Benchmarks
Current baselines:
- Homepage load: < 3s
- Blog listing load: < 3s
- Blog post load: < 3s
- Form submission: < 2s

Update these if intentional changes occur.

---

## Best Practices

### DO ✅
- Use semantic selectors
- Wait for element visibility
- Test user journeys, not implementation
- Keep tests independent
- Clean up test data
- Use descriptive test names

### DON'T ❌
- Use fixed delays (`waitForTimeout` sparingly)
- Test implementation details
- Make tests depend on each other
- Hardcode credentials
- Ignore flaky tests

---

## CI/CD Pipeline Integration

### GitHub Actions Example
```yaml
name: E2E Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npm run build
      - run: npm run preview &
      - run: npx wait-on http://localhost:10000
      - run: npm run test
      - uses: actions/upload-artifact@v3
        if: always()
        with:
          name: test-results
          path: test-results/
```

---

## Contact & Support

For questions about E2E tests:
- Check test file comments for specific test logic
- Review Playwright documentation: https://playwright.dev
- Contact QA team for test strategy questions

---

## Changelog

### 2026-03-21
- ✅ Initial E2E test suite creation
- ✅ 84 comprehensive tests across 4 suites
- ✅ Full coverage of critical user journeys
- ✅ Mobile and desktop testing
- ✅ Performance and security checks
- ✅ Accessibility validation
