# E2E Testing with Playwright - Quick Start

## ⚡ Quick Start

### Run E2E Tests
```bash
cd frontend
npm run test:e2e
```

### Open Interactive UI
```bash
npm run test:e2e:ui
```

### Generate Tests by Recording
```bash
npm run test:e2e:codegen
```

## 📖 Full Documentation

See [tests/README.md](./tests/README.md) for complete documentation.

## 🎯 What's Tested

- ✅ **Authentication**: Login, registration, logout flows
- ✅ **Onboarding**: Multi-step wizard with file upload
- ✅ **Dashboard**: Health status, action queue, purchase orders
- ✅ **Operations**: Product/recipe creation, inventory management
- 🔜 **Analytics**: Forecasting, sales analytics
- 🔜 **Settings**: Profile, team, subscription management

## 🔧 Available Commands

| Command | Description |
|---------|-------------|
| `npm run test:e2e` | Run all tests (headless) |
| `npm run test:e2e:ui` | Run with interactive UI |
| `npm run test:e2e:headed` | Run with visible browser |
| `npm run test:e2e:debug` | Debug tests step-by-step |
| `npm run test:e2e:report` | View test results report |
| `npm run test:e2e:codegen` | Record new tests |

## 🚀 CI/CD

Tests run automatically on GitHub Actions:
- Every push to `main` or `develop`
- Every pull request
- Results posted as PR comments
- Artifacts (screenshots, videos) uploaded on failure

## 🔐 Test Credentials

Set environment variables:
```bash
export TEST_USER_EMAIL="test@bakery.com"
export TEST_USER_PASSWORD="your-test-password"
```

Or create `.env` file in frontend directory:
```
TEST_USER_EMAIL=test@bakery.com
TEST_USER_PASSWORD=your-test-password
```

## 📂 Project Structure

```
frontend/tests/
├── auth/           # Login, register tests
├── onboarding/     # Wizard flow tests
├── dashboard/      # Dashboard tests
├── operations/     # Business logic tests
├── fixtures/       # Test data (CSV, etc.)
└── helpers/        # Reusable utilities
```

## 🎓 Writing Your First Test

```typescript
import { test, expect } from '@playwright/test';

test.describe('My Feature', () => {
  test.use({ storageState: 'tests/.auth/user.json' }); // Use auth

  test('should work correctly', async ({ page }) => {
    await page.goto('/app/my-page');
    await page.getByRole('button', { name: 'Click me' }).click();
    await expect(page).toHaveURL('/success');
  });
});
```

## 🐛 Debugging

```bash
# Step through test with inspector
npm run test:e2e:debug

# Run specific test
npx playwright test tests/auth/login.spec.ts

# Run with browser visible
npm run test:e2e:headed
```

## 📊 View Reports

```bash
npm run test:e2e:report
```

Opens HTML report with:
- Test results
- Screenshots on failure
- Videos on failure
- Execution traces

## 🌍 Multi-Browser Testing

Tests run on:
- ✅ Chromium (Chrome/Edge)
- ✅ Firefox
- ✅ WebKit (Safari)
- ✅ Mobile Chrome (Pixel 5)
- ✅ Mobile Safari (iPhone 13)

## 💰 Cost: $0

Playwright is 100% free and open source. No cloud subscription required.

## 📚 Learn More

- [Full Documentation](./tests/README.md)
- [Playwright Docs](https://playwright.dev)
- [Best Practices](https://playwright.dev/docs/best-practices)

---

**Need help?** Check [tests/README.md](./tests/README.md) or [Playwright Docs](https://playwright.dev)
