# 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! 🎉**