Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
232 lines
5.6 KiB
Markdown
232 lines
5.6 KiB
Markdown
# Persistent E2E Test Harness
|
|
|
|
This guide explains how to use the persistent E2E test harness for faster and more efficient testing.
|
|
|
|
## Overview
|
|
|
|
The persistent test harness starts all required services once and keeps them running while you run multiple test suites. This eliminates the overhead of starting/stopping Docker containers for each test run, making E2E tests much faster.
|
|
|
|
## Architecture
|
|
|
|
### Services Included
|
|
- **PostgreSQL** (port 5433) - Test database
|
|
- **Redis** (port 6380) - Test cache and workflow events
|
|
- **MailHog** (ports 1025/8025) - Email capture for testing
|
|
- **Workflow Worker** (port 4001) - Processes workflow events
|
|
- **Webhook Mock** (port 8080) - Mock external webhooks
|
|
|
|
### Test Optimization
|
|
- Services start once and stay running
|
|
- Only test data is cleaned between tests
|
|
- Database connections are reused
|
|
- Faster service health checks
|
|
- Reduced timeouts for warm services
|
|
|
|
## Quick Start
|
|
|
|
### 1. Start the Test Harness
|
|
```bash
|
|
npm run test:harness:start
|
|
```
|
|
|
|
This will:
|
|
- Start all Docker services
|
|
- Wait for health checks to pass
|
|
- Display service status
|
|
- Keep services running in the background
|
|
|
|
### 2. Run E2E Tests
|
|
```bash
|
|
# Run optimized email processing tests
|
|
npm test src/test/e2e/email-processing-persistent.test.ts
|
|
|
|
# Or run any E2E test against the persistent harness
|
|
npm test src/test/e2e/
|
|
```
|
|
|
|
### 3. Check Service Status
|
|
```bash
|
|
npm run test:harness:status
|
|
```
|
|
|
|
### 4. Stop the Test Harness (when done)
|
|
```bash
|
|
npm run test:harness:stop
|
|
```
|
|
|
|
## Available Commands
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `npm run test:harness:start` | Start all test services |
|
|
| `npm run test:harness:stop` | Stop all test services |
|
|
| `npm run test:harness:restart` | Restart all test services |
|
|
| `npm run test:harness:status` | Check service health status |
|
|
| `npm run test:harness:logs` | View logs from all services |
|
|
| `npm run test:harness:logs mailhog` | View logs from specific service |
|
|
| `npm run test:harness:reset` | Reset test data without restarting services |
|
|
|
|
## Performance Comparison
|
|
|
|
### Traditional E2E Tests
|
|
- **Setup time**: 30-60 seconds per test suite
|
|
- **Teardown time**: 10-20 seconds per test suite
|
|
- **Total overhead**: 40-80 seconds per test suite
|
|
|
|
### Persistent Harness E2E Tests
|
|
- **Setup time**: 2-5 seconds per test suite
|
|
- **Teardown time**: 1-2 seconds per test suite
|
|
- **Total overhead**: 3-7 seconds per test suite
|
|
|
|
**Result**: 80-90% reduction in test overhead time!
|
|
|
|
## Usage Patterns
|
|
|
|
### Development Workflow
|
|
```bash
|
|
# Start harness once in the morning
|
|
npm run test:harness:start
|
|
|
|
# Run tests throughout the day
|
|
npm test src/test/e2e/email-processing-persistent.test.ts
|
|
npm test src/test/e2e/workflow-integration.test.ts
|
|
|
|
# Stop harness at end of day
|
|
npm run test:harness:stop
|
|
```
|
|
|
|
### CI/CD Pipeline
|
|
```bash
|
|
# In your CI script
|
|
npm run test:harness:start
|
|
npm test src/test/e2e/
|
|
npm run test:harness:stop
|
|
```
|
|
|
|
### Debugging
|
|
```bash
|
|
# Start harness
|
|
npm run test:harness:start
|
|
|
|
# View logs while running tests
|
|
npm run test:harness:logs
|
|
|
|
# Check specific service
|
|
npm run test:harness:logs workflow-worker-test
|
|
```
|
|
|
|
## Test Files
|
|
|
|
### Optimized Tests
|
|
- `email-processing-persistent.test.ts` - Email processing with persistent harness
|
|
- Use `PersistentE2ETestContext` for faster setup/teardown
|
|
|
|
### Traditional Tests (still available)
|
|
- `email-processing.test.ts` - Email processing with service startup/shutdown
|
|
- Use `E2ETestContext` for isolated service management
|
|
|
|
## Troubleshooting
|
|
|
|
### Services Not Starting
|
|
```bash
|
|
# Check Docker is running
|
|
docker info
|
|
|
|
# Check port conflicts
|
|
lsof -i :5433 # PostgreSQL
|
|
lsof -i :6380 # Redis
|
|
lsof -i :8025 # MailHog
|
|
lsof -i :4001 # Workflow Worker
|
|
|
|
# View detailed logs
|
|
npm run test:harness:logs
|
|
```
|
|
|
|
### Test Failures
|
|
```bash
|
|
# Check service health
|
|
npm run test:harness:status
|
|
|
|
# Reset test data
|
|
npm run test:harness:reset
|
|
|
|
# Restart if needed
|
|
npm run test:harness:restart
|
|
```
|
|
|
|
### Port Conflicts
|
|
If you have conflicts with existing services:
|
|
|
|
1. Stop conflicting services
|
|
2. Or modify ports in `docker-compose.e2e-with-worker.yaml`
|
|
3. Update corresponding URLs in test configuration
|
|
|
|
## Best Practices
|
|
|
|
### 1. Start Harness Before Development
|
|
Always start the harness at the beginning of your development session:
|
|
```bash
|
|
npm run test:harness:start
|
|
```
|
|
|
|
### 2. Monitor Service Health
|
|
Periodically check that services are healthy:
|
|
```bash
|
|
npm run test:harness:status
|
|
```
|
|
|
|
### 3. Reset Data When Needed
|
|
If tests start behaving unexpectedly, reset the data:
|
|
```bash
|
|
npm run test:harness:reset
|
|
```
|
|
|
|
### 4. Use Persistent Tests
|
|
For regular development, use the optimized persistent test files:
|
|
```bash
|
|
npm test src/test/e2e/email-processing-persistent.test.ts
|
|
```
|
|
|
|
### 5. Clean Shutdown
|
|
Always stop the harness when done to free resources:
|
|
```bash
|
|
npm run test:harness:stop
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Service Ports
|
|
- PostgreSQL: 5433 (different from production 5432)
|
|
- Redis: 6380 (different from production 6379)
|
|
- MailHog SMTP: 1025
|
|
- MailHog Web: 8025
|
|
- Workflow Worker: 4001
|
|
- Webhook Mock: 8080
|
|
|
|
### Environment Variables
|
|
The persistent harness automatically sets:
|
|
- `DB_HOST=localhost`
|
|
- `DB_PORT=5433`
|
|
- `DB_NAME_SERVER=server`
|
|
- `REDIS_HOST=localhost`
|
|
- `REDIS_PORT=6380`
|
|
- `EMAIL_HOST=localhost`
|
|
- `EMAIL_PORT=1025`
|
|
|
|
## Extending the Harness
|
|
|
|
### Adding New Services
|
|
1. Add service to `docker-compose.e2e-with-worker.yaml`
|
|
2. Add health check to `scripts/test-harness.js`
|
|
3. Update `PersistentE2ETestContext.verifyServicesRunning()`
|
|
|
|
### Custom Test Context
|
|
Create your own persistent test context by extending `PersistentE2ETestContext`:
|
|
|
|
```typescript
|
|
import { PersistentE2ETestContext } from './utils/persistent-test-context';
|
|
|
|
export class MyCustomTestContext extends PersistentE2ETestContext {
|
|
// Add custom setup/teardown logic
|
|
}
|
|
``` |