336 lines
7.2 KiB
Markdown
336 lines
7.2 KiB
Markdown
# Platform Integration Testing Guide
|
|
|
|
## Prerequisites
|
|
|
|
Docker must be running:
|
|
```bash
|
|
# Check Docker status
|
|
docker compose ps
|
|
|
|
# If not running, start containers
|
|
make rebuild # Rebuilds with all changes
|
|
make start # Starts all services
|
|
```
|
|
|
|
## Testing Sequence
|
|
|
|
### 1. TypeScript Compilation Verification
|
|
|
|
```bash
|
|
# In backend container
|
|
docker compose exec mvp-backend npm run type-check
|
|
|
|
# Expected: No TypeScript errors
|
|
```
|
|
|
|
### 2. Linter Verification
|
|
|
|
```bash
|
|
# In backend container
|
|
docker compose exec mvp-backend npm run lint
|
|
|
|
# Expected: Zero linting issues
|
|
```
|
|
|
|
### 3. Platform Feature Unit Tests
|
|
|
|
```bash
|
|
# Run all platform unit tests
|
|
docker compose exec mvp-backend npm test -- features/platform/tests/unit
|
|
|
|
# Expected tests:
|
|
# - vin-decode.service.test.ts (VIN validation, circuit breaker, caching)
|
|
# - vehicle-data.service.test.ts (dropdown data, caching)
|
|
```
|
|
|
|
### 4. Platform Feature Integration Tests
|
|
|
|
```bash
|
|
# Run platform integration tests
|
|
docker compose exec mvp-backend npm test -- features/platform/tests/integration
|
|
|
|
# Expected tests:
|
|
# - GET /api/platform/years
|
|
# - GET /api/platform/makes?year=2024
|
|
# - GET /api/platform/models?year=2024&make_id=1
|
|
# - GET /api/platform/trims?year=2024&model_id=1
|
|
# - GET /api/platform/engines?year=2024&trim_id=1
|
|
# - GET /api/platform/vehicle?vin=1HGCM82633A123456
|
|
# - Authentication (401 without JWT)
|
|
# - Validation (400 for invalid params)
|
|
```
|
|
|
|
### 5. Vehicles Feature Integration Tests
|
|
|
|
```bash
|
|
# Run vehicles integration tests
|
|
docker compose exec mvp-backend npm test -- features/vehicles/tests/integration
|
|
|
|
# Expected: VIN decode now uses platform feature
|
|
```
|
|
|
|
### 6. End-to-End Workflow Tests
|
|
|
|
#### VIN Decode Workflow
|
|
```bash
|
|
# 1. Start containers
|
|
make start
|
|
|
|
# 2. Get auth token (via frontend or Auth0 test token)
|
|
|
|
# 3. Test VIN decode endpoint
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/vehicle?vin=1HGCM82633A123456
|
|
|
|
# Expected:
|
|
# {
|
|
# "vin": "1HGCM82633A123456",
|
|
# "success": true,
|
|
# "result": {
|
|
# "make": "Honda",
|
|
# "model": "Accord",
|
|
# "year": 2003,
|
|
# ...
|
|
# }
|
|
# }
|
|
```
|
|
|
|
#### Dropdown Cascade Workflow
|
|
```bash
|
|
# 1. Get years
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/years
|
|
|
|
# Expected: [2024, 2023, 2022, ...]
|
|
|
|
# 2. Get makes for 2024
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/makes?year=2024
|
|
|
|
# Expected: {"makes": [{"id": 1, "name": "Honda"}, ...]}
|
|
|
|
# 3. Get models for Honda 2024
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/models?year=2024&make_id=1
|
|
|
|
# Expected: {"models": [{"id": 101, "name": "Civic"}, ...]}
|
|
```
|
|
|
|
### 7. Frontend Testing
|
|
|
|
#### Desktop Testing
|
|
```bash
|
|
# 1. Open browser
|
|
open https://motovaultpro.com
|
|
|
|
# 2. Navigate to Vehicles → Add Vehicle
|
|
|
|
# 3. Test VIN decode:
|
|
# - Enter VIN: 1HGCM82633A123456
|
|
# - Click "Decode VIN"
|
|
# - Verify auto-population of make/model/year
|
|
|
|
# 4. Test manual selection:
|
|
# - Select Year: 2024
|
|
# - Select Make: Honda
|
|
# - Select Model: Civic
|
|
# - Verify cascading dropdowns work
|
|
```
|
|
|
|
#### Mobile Testing
|
|
```bash
|
|
# Use Chrome DevTools responsive mode
|
|
|
|
# Test at widths:
|
|
# - 320px (iPhone SE)
|
|
# - 375px (iPhone 12)
|
|
# - 768px (iPad)
|
|
# - 1920px (Desktop)
|
|
|
|
# Verify:
|
|
# - 44px minimum touch targets
|
|
# - No iOS zoom on input focus (16px font)
|
|
# - Dropdowns work on touch devices
|
|
# - VIN decode button accessible
|
|
# - Both workflows functional
|
|
```
|
|
|
|
### 8. Performance Testing
|
|
|
|
```bash
|
|
# Monitor response times
|
|
time curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/years
|
|
|
|
# Expected: < 500ms (first call, cache miss)
|
|
# Expected: < 100ms (second call, cache hit)
|
|
```
|
|
|
|
### 9. Cache Verification
|
|
|
|
```bash
|
|
# Connect to Redis
|
|
docker compose exec mvp-redis redis-cli
|
|
|
|
# Check cache keys
|
|
KEYS mvp:platform:*
|
|
|
|
# Expected keys:
|
|
# - mvp:platform:years
|
|
# - mvp:platform:vehicle-data:makes:2024
|
|
# - mvp:platform:vin-decode:1HGCM82633A123456
|
|
|
|
# Check TTL
|
|
TTL mvp:platform:vehicle-data:makes:2024
|
|
# Expected: ~21600 seconds (6 hours)
|
|
|
|
TTL mvp:platform:vin-decode:1HGCM82633A123456
|
|
# Expected: ~604800 seconds (7 days)
|
|
|
|
# Get cached value
|
|
GET mvp:platform:years
|
|
# Expected: JSON array of years
|
|
```
|
|
|
|
### 10. Error Handling Tests
|
|
|
|
```bash
|
|
# Test invalid VIN (wrong length)
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/vehicle?vin=INVALID
|
|
|
|
# Expected: 400 Bad Request
|
|
|
|
# Test missing auth
|
|
curl http://localhost:3001/api/platform/years
|
|
|
|
# Expected: 401 Unauthorized
|
|
|
|
# Test invalid year
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/makes?year=3000
|
|
|
|
# Expected: 400 Bad Request or empty array
|
|
```
|
|
|
|
### 11. Circuit Breaker Testing
|
|
|
|
```bash
|
|
# Monitor backend logs
|
|
make logs-backend | grep "circuit breaker"
|
|
|
|
# Should see:
|
|
# - State transitions (open/half-open/close)
|
|
# - Timeout events
|
|
# - Fallback executions
|
|
|
|
# Test with invalid VIN that requires vPIC API
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:3001/api/platform/vehicle?vin=UNKNOWNVIN1234567
|
|
|
|
# Check logs for circuit breaker activity
|
|
```
|
|
|
|
### 12. Container Health Check
|
|
|
|
```bash
|
|
# Verify 5 containers running
|
|
docker compose ps
|
|
|
|
# Expected output:
|
|
# mvp-traefik - running
|
|
# mvp-frontend - running
|
|
# mvp-backend - running
|
|
# mvp-postgres - running
|
|
# mvp-redis - running
|
|
|
|
# No mvp-platform container should exist
|
|
|
|
# Check backend health
|
|
curl http://localhost:3001/health
|
|
|
|
# Expected:
|
|
# {
|
|
# "status": "healthy",
|
|
# "features": ["vehicles", "documents", "fuel-logs", "stations", "maintenance", "platform"]
|
|
# }
|
|
```
|
|
|
|
## Success Criteria
|
|
|
|
- TypeScript compilation: Zero errors
|
|
- Linter: Zero issues
|
|
- Unit tests: All passing
|
|
- Integration tests: All passing
|
|
- VIN decode workflow: Functional
|
|
- Dropdown cascade workflow: Functional
|
|
- Mobile + desktop: Both responsive and functional
|
|
- Cache hit rate: >80% after warm-up
|
|
- Response times: <500ms VIN decode, <100ms dropdowns
|
|
- 5 containers: Running healthy
|
|
- Zero errors: In logs after 1 hour
|
|
|
|
## Troubleshooting
|
|
|
|
### TypeScript Errors
|
|
```bash
|
|
# Check compilation
|
|
docker compose exec mvp-backend npm run type-check
|
|
|
|
# If errors, review files modified by agents
|
|
```
|
|
|
|
### Test Failures
|
|
```bash
|
|
# Run specific test
|
|
docker compose exec mvp-backend npm test -- path/to/test.ts
|
|
|
|
# Check test logs for details
|
|
```
|
|
|
|
### VIN Decode Not Working
|
|
```bash
|
|
# Check backend logs
|
|
make logs-backend | grep -E "vin|platform"
|
|
|
|
# Verify vPIC API accessible
|
|
curl https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVin/1HGCM82633A123456?format=json
|
|
|
|
# Check circuit breaker state in logs
|
|
```
|
|
|
|
### Dropdowns Empty
|
|
```bash
|
|
# Check PostgreSQL vehicles schema
|
|
docker compose exec mvp-postgres psql -U postgres -d motovaultpro -c "\\dt vehicles.*"
|
|
|
|
# Query makes table
|
|
docker compose exec mvp-postgres psql -U postgres -d motovaultpro -c "SELECT COUNT(*) FROM vehicles.make;"
|
|
|
|
# Should have data
|
|
```
|
|
|
|
### Frontend Not Loading
|
|
```bash
|
|
# Check frontend logs
|
|
make logs-frontend
|
|
|
|
# Rebuild frontend
|
|
docker compose build mvp-frontend
|
|
docker compose restart mvp-frontend
|
|
```
|
|
|
|
## Next Steps After Testing
|
|
|
|
If all tests pass:
|
|
1. Create git tag: `v1.0-platform-integrated`
|
|
2. Document any issues in GitHub
|
|
3. Monitor production logs for 24 hours
|
|
4. Archive Python platform service directory
|
|
|
|
If tests fail:
|
|
1. Review failure logs
|
|
2. Fix issues
|
|
3. Re-run tests
|
|
4. Consider rollback if critical failures
|