257 lines
6.8 KiB
Markdown
257 lines
6.8 KiB
Markdown
# Phase 11: Testing & Deployment
|
|
|
|
**Status:** ⏳ Todo
|
|
**Progress:** 0/15 tasks (0%)
|
|
**Started:** -
|
|
**Completed:** -
|
|
**Assigned to:** -
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
Setup testing frameworks (Vitest, Playwright), write tests, create production Docker setup, configure CI/CD pipeline, and deploy to staging/production.
|
|
|
|
**Goal:** Fully tested MVP deployed to production with automated CI/CD.
|
|
|
|
---
|
|
|
|
## Dependencies
|
|
|
|
- ✅ All previous phases should be completed
|
|
|
|
---
|
|
|
|
## Tasks
|
|
|
|
### Unit Testing Setup
|
|
|
|
- [ ] Setup Vitest for unit tests
|
|
|
|
```bash
|
|
pnpm add -D vitest @vue/test-utils happy-dom
|
|
```
|
|
|
|
- Configure vitest.config.ts
|
|
- Add test scripts to package.json: `"test": "vitest"`
|
|
- Create `tests/` folder structure
|
|
|
|
- [ ] Write tests for auth utilities
|
|
- Test: `server/utils/pkce.ts`
|
|
- Test PKCE generation (verifier, challenge)
|
|
- Test challenge is base64url encoded SHA-256
|
|
- Test: `server/utils/jwt.ts`
|
|
- Test JWT validation (mock JWKS)
|
|
- Test expired token rejection
|
|
- Test invalid issuer/audience rejection
|
|
|
|
- [ ] Write tests for API endpoints
|
|
- Test: `/api/products/index.get.ts`
|
|
- Test returns active products only
|
|
- Test filtering by category
|
|
- Test: `/api/cart/items.post.ts`
|
|
- Test add item to cart
|
|
- Test validation (invalid product ID)
|
|
- Test: `/api/orders/index.post.ts`
|
|
- Test order creation
|
|
- Test requires authentication
|
|
- Use: `@nuxt/test-utils` for API testing
|
|
|
|
### E2E Testing Setup
|
|
|
|
- [ ] Setup Playwright for E2E
|
|
|
|
```bash
|
|
pnpm add -D @playwright/test
|
|
npx playwright install
|
|
```
|
|
|
|
- Configure playwright.config.ts
|
|
- Add e2e script: `"test:e2e": "playwright test"`
|
|
- Create `tests/e2e/` folder
|
|
|
|
- [ ] Write E2E test: user registration
|
|
- Navigate to /auth
|
|
- Click "Register" tab
|
|
- Fill registration form
|
|
- Submit form
|
|
- Verify success message (or redirect to Cidaas)
|
|
- Note: May need to mock Cidaas for E2E
|
|
|
|
- [ ] Write E2E test: complete checkout flow
|
|
- Login as user (or create test user)
|
|
- Navigate to /produkte
|
|
- Click product
|
|
- Click "In den Warenkorb"
|
|
- Navigate to /warenkorb
|
|
- Click "Zur Kasse"
|
|
- Fill checkout form
|
|
- Mock PayPal payment (or use sandbox)
|
|
- Verify order confirmation page
|
|
|
|
### Production Docker Setup
|
|
|
|
- [ ] Create Dockerfile (production)
|
|
- File: `Dockerfile`
|
|
- Multi-stage build (see docs/TECH_STACK.md#dockerfile)
|
|
- Build stage: Install deps, build Nuxt
|
|
- Production stage: Copy .output, run server
|
|
- Optimize for size (alpine, minimal layers)
|
|
|
|
- [ ] Create docker-compose.yml (production)
|
|
- File: `docker-compose.yml`
|
|
- Services: app, db, redis, worker (BullMQ worker)
|
|
- Volumes: postgres_data, redis_data
|
|
- Networks: app-network
|
|
- Health checks for all services
|
|
- Secrets for sensitive data
|
|
- See: docs/TECH_STACK.md#docker-compose
|
|
|
|
### CI/CD Pipeline
|
|
|
|
- [ ] Configure GitLab CI/CD
|
|
- File: `.gitlab-ci.yml`
|
|
- Stages: build, test, deploy-staging, deploy-production
|
|
- Build stage:
|
|
- Build Docker image
|
|
- Push to registry
|
|
- Test stage:
|
|
- Run unit tests
|
|
- Run E2E tests
|
|
- Check test coverage
|
|
- Deploy-staging stage:
|
|
- Deploy to staging automatically on main branch
|
|
- Deploy-production stage:
|
|
- Manual trigger required
|
|
- See: docs/TECH_STACK.md#gitlab-ci
|
|
|
|
- [ ] Test production build
|
|
|
|
```bash
|
|
pnpm build
|
|
pnpm preview
|
|
```
|
|
|
|
- Verify build completes without errors
|
|
- Verify production server runs
|
|
- Test production build locally with Docker:
|
|
|
|
```bash
|
|
docker build -t experimenta-app:latest .
|
|
docker run -p 3000:3000 experimenta-app:latest
|
|
```
|
|
|
|
### Deployment
|
|
|
|
- [ ] Setup staging environment
|
|
- Server: Hetzner VPS or VM (Proxmox)
|
|
- Domain: staging.my.experimenta.science
|
|
- SSL: Let's Encrypt (automatic)
|
|
- Reverse Proxy: Nginx or Traefik
|
|
- Docker Compose with staging config
|
|
- Environment: STAGING
|
|
|
|
- [ ] Deploy to staging
|
|
- Use GitLab CI/CD or manual deploy
|
|
- Verify deployment successful
|
|
- Run smoke tests on staging
|
|
- Test full user flow on staging
|
|
|
|
- [ ] Final QA on staging
|
|
- Test all features:
|
|
- User registration & login
|
|
- Product browsing
|
|
- Add to cart
|
|
- Checkout
|
|
- PayPal payment (sandbox)
|
|
- Order confirmation
|
|
- Order history
|
|
- Test on multiple devices/browsers
|
|
- Test language switching (DE/EN)
|
|
- Test error scenarios
|
|
|
|
- [ ] Document deployment process
|
|
- Document staging deployment steps
|
|
- Document production deployment steps
|
|
- Document rollback procedure
|
|
- Document database migration process
|
|
- Document secrets management
|
|
- Document monitoring and logging
|
|
|
|
- [ ] Deploy to production 🚀
|
|
- Server: Hetzner dedicated/VPS
|
|
- Domain: my.experimenta.science
|
|
- SSL: Let's Encrypt
|
|
- Reverse Proxy: Nginx or Traefik
|
|
- Docker Compose with production config
|
|
- Environment: PRODUCTION
|
|
- PayPal: LIVE mode
|
|
- X-API: Production endpoint
|
|
- Cidaas: Production credentials
|
|
- Database backups enabled
|
|
|
|
---
|
|
|
|
## Acceptance Criteria
|
|
|
|
- [x] Vitest is set up and running
|
|
- [x] Unit tests cover critical utilities and endpoints
|
|
- [x] Playwright is set up and running
|
|
- [x] E2E tests cover registration and checkout flows
|
|
- [x] Production Dockerfile is optimized and working
|
|
- [x] docker-compose.yml for production is complete
|
|
- [x] GitLab CI/CD pipeline is configured
|
|
- [x] Production build works locally
|
|
- [x] Staging environment is set up and accessible
|
|
- [x] Deployed to staging successfully
|
|
- [x] QA testing on staging passes
|
|
- [x] Deployment process is documented
|
|
- [x] Deployed to production successfully 🎉
|
|
- [x] Production app is accessible and functional
|
|
- [x] Monitoring and error tracking are active
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
- **Test Coverage Goal:** 70%+ for critical code paths
|
|
- **E2E Testing:** Focus on happy path for MVP (error scenarios in later phases)
|
|
- **Docker Production:** Use Docker Secrets for sensitive data (not env vars)
|
|
- **CI/CD:** Auto-deploy to staging, manual approval for production
|
|
- **Monitoring:** Setup Sentry or similar for error tracking (optional for MVP)
|
|
- **Backups:** Daily automated database backups with 7-day retention
|
|
|
|
---
|
|
|
|
## Blockers
|
|
|
|
- ⚠️ **Production Servers:** Need access to production servers
|
|
- ⚠️ **Production Credentials:** Need production credentials for Cidaas, PayPal, X-API
|
|
- ⚠️ **Domain DNS:** Need to point domain to production server
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [docs/TECH_STACK.md: Testing](../docs/TECH_STACK.md#12-testing)
|
|
- [docs/TECH_STACK.md: Docker](../docs/TECH_STACK.md#11-deployment--infrastructure)
|
|
- [docs/TECH_STACK.md: CI/CD](../docs/TECH_STACK.md#cicd-mit-gitlab)
|
|
- [README.md: Development Setup](../README.md#lokale-entwicklung)
|
|
|
|
---
|
|
|
|
## Post-Launch
|
|
|
|
After successful production launch:
|
|
|
|
- [ ] Monitor error rates (Sentry or logs)
|
|
- [ ] Monitor queue performance (BullBoard)
|
|
- [ ] Monitor PayPal transaction success rate
|
|
- [ ] Monitor X-API submission success rate
|
|
- [ ] Gather user feedback
|
|
- [ ] Plan Phase 2 features (Educator roles, etc.)
|
|
|
|
---
|
|
|
|
**🎉 Congratulations on launching the MVP! 🎉**
|