workspace/projects/gamilit/apps/frontend/e2e/README.md
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00

363 lines
9.9 KiB
Markdown

# E2E Tests - GAMILIT
End-to-End tests using Playwright for the GAMILIT educational gamification platform.
## 📋 Overview
This directory contains End-to-End (E2E) tests that verify critical user flows and ensure the application works correctly from a user's perspective.
## 🚀 Running Tests
### Run all E2E tests (headless)
```bash
npm run test:e2e
```
### Run with UI (interactive mode)
```bash
npm run test:e2e:ui
```
### Run with browser visible (headed mode)
```bash
npm run test:e2e:headed
```
### Debug mode (step through tests)
```bash
npm run test:e2e:debug
```
### View test report
```bash
npm run test:e2e:report
```
### Run specific test file
```bash
npx playwright test auth.spec.ts
```
### Run tests in specific browser
```bash
npx playwright test --project=chromium
npx playwright test --project=firefox
npx playwright test --project="Mobile Chrome"
```
## 📁 Test Files
### Core Tests
- **`auth.spec.ts`** - Authentication and registration flows
- **`navigation.spec.ts`** - Basic navigation and routing
- **`student-journey.spec.ts`** - Original student journey tests (legacy)
### Critical Flow Tests (NEW)
#### `student-exercise-m4.spec.ts`
Module 4 exercise flows for students:
- Complete Quiz TikTok with time penalty tracking
- Complete Infografia Interactiva with drag-drop
- Submit exercises and view points
- Track exercise progress
#### `teacher-flow.spec.ts`
Teacher workflow tests:
- View pending submissions
- Review and grade student work
- Receive notifications for new submissions
- Filter submissions by student/exercise
- View student progress analytics
- Export reports
- Bulk grade submissions
#### `admin-flow.spec.ts`
Admin portal tests:
- Access admin dashboard
- Manage feature flags (view, toggle, create)
- Configure feature flag targeting rules
- Manage user roles and permissions
- Search and filter users
- Edit user permissions
#### `gamification-flow.spec.ts`
Gamification system tests:
- Display and track XP/levels
- Gain XP after exercise completion
- Level up animations
- View and unlock achievements
- Display leaderboard with rankings
- Filter leaderboard by period/classroom
- Earn and display ML Coins
## 🎯 Test Status
### Implemented Critical Flow Tests (NEW):
**Student Exercise Flow** - M4 Quiz TikTok with time penalty
**Student Exercise Flow** - Infografia drag-drop exercise
**Teacher Flow** - View and grade submissions
**Teacher Flow** - Notification system
**Admin Flow** - Feature flag management
**Admin Flow** - Role and permission management
**Gamification** - XP and level progression
**Gamification** - Achievement system
**Gamification** - Leaderboard functionality
### Legacy Tests (Original):
✅ Login page display
✅ Form validation
✅ Navigation basics
✅ 404 handling
✅ Protected routes redirect
✅ Performance checks
### Tests Requiring Test Data Setup:
Most new critical flow tests will run but may skip certain scenarios if:
- Test user accounts don't exist in database
- Backend API is not running
- Specific test data (exercises, achievements) is not seeded
**Note:** Tests are designed to gracefully skip scenarios when prerequisites are not met.
## 🔧 Configuration
Configuration is in `playwright.config.ts`:
- **Test directory:** `./e2e`
- **Base URL:** `http://localhost:3005`
- **Browsers:** Chromium, Firefox, Mobile Chrome
- **Retries:** 2 (on CI), 0 (local)
- **Reports:** HTML, List, JSON
## 📊 Test Coverage Status
### Critical Flows (Priority 1) 🔥
- [x] Authentication (Login/Register)
- [x] Student: Browse → Start Exercise → Complete
- [x] Student: Module 4 Quiz TikTok with time penalty
- [x] Student: Module 4 Infografia drag-drop
- [x] Teacher: View submissions → Review → Grade
- [x] Teacher: Receive notifications
- [x] Admin: Feature flag management
- [x] Admin: Role and permission management
- [x] Gamification: XP and level progression
- [x] Gamification: Achievement system
- [x] Leaderboard display and filtering
### Important Flows (Priority 2) 🟡
- [x] Student progress tracking
- [x] Teacher: Filter submissions by student/exercise
- [x] Teacher: Export reports
- [x] Teacher: Bulk grading
- [x] Admin: Search and filter users
- [ ] Profile management
- [ ] Social features (friends, classrooms)
### Nice to Have (Priority 3) 🟢
- [ ] Settings/preferences
- [ ] Advanced notifications
- [ ] Search functionality
- [ ] Mobile responsiveness
- [ ] Visual regression testing
## 🏗️ Test Data Setup
### Required Test Users
Create these users in your test database:
```javascript
// Student user
{
email: 'student@test.gamilit.com',
password: 'TestStudent123!',
role: 'student',
displayName: 'Test Student'
}
// Teacher user
{
email: 'teacher@test.gamilit.com',
password: 'TestTeacher123!',
role: 'teacher',
displayName: 'Test Teacher'
}
// Admin user
{
email: 'admin@test.gamilit.com',
password: 'TestAdmin123!',
role: 'admin',
displayName: 'Test Admin'
}
```
### Environment Setup
1. **Backend API:** Running on `http://localhost:3006`
2. **Frontend:** Running on `http://localhost:3005`
3. **Database:** Test database with seeded data
### Fixtures and Helpers (IMPLEMENTED)
All test files now use centralized fixtures and helpers:
- **`fixtures/test-users.ts`** - Test user credentials and exercise IDs
- **`fixtures/auth-helpers.ts`** - Login/logout helper functions
- **`helpers/page-helpers.ts`** - Reusable page interaction functions
### Helper Functions Available:
- `loginAsStudent(page)` - Authenticate as student
- `loginAsTeacher(page)` - Authenticate as teacher
- `loginAsAdmin(page)` - Authenticate as admin
- `waitForPageLoad(page)` - Wait for complete page load
- `waitForToast(page)` - Wait for toast notifications
- `waitForModal(page)` - Wait for modal dialogs
- `waitForLoadingToFinish(page)` - Wait for spinners to disappear
## 🎨 Visual Regression Testing
Future enhancement: Add visual regression tests using Playwright's screenshot comparison:
```typescript
test('should match homepage screenshot', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveScreenshot('homepage.png');
});
```
## 📈 CI/CD Integration
Tests are configured to run in CI with:
- Automatic retries (2 attempts)
- Screenshot on failure
- Video on failure
- HTML report generation
### GitHub Actions Example:
```yaml
- name: Run E2E tests
run: npm run test:e2e
- name: Upload test results
if: always()
uses: actions/upload-artifact@v3
with:
name: playwright-report
path: playwright-report/
```
## 🐛 Debugging Tips
### Test Failing? Try:
1. Run in headed mode: `npm run test:e2e:headed`
2. Run in debug mode: `npm run test:e2e:debug`
3. Check screenshot in `test-results/` directory
4. View video in `test-results/` directory
5. Check console errors in test output
### Common Issues:
- **Timeout errors:** Increase timeout or check if backend is running
- **Element not found:** Check if UI has changed
- **Authentication issues:** Verify test user credentials
- **Flaky tests:** Add explicit waits or check for race conditions
## 📚 Resources
- [Playwright Documentation](https://playwright.dev/)
- [Best Practices](https://playwright.dev/docs/best-practices)
- [Debugging Guide](https://playwright.dev/docs/debug)
- [Selectors Guide](https://playwright.dev/docs/selectors)
## 🎓 Writing New Tests
### Test Structure:
```typescript
import { test, expect } from '@playwright/test';
test.describe('Feature Name', () => {
test.beforeEach(async ({ page }) => {
// Setup before each test
await page.goto('/feature');
});
test('should do something', async ({ page }) => {
// Test implementation
await page.click('button');
await expect(page.locator('result')).toBeVisible();
});
});
```
### Best Practices:
- Use data-testid attributes for stable selectors
- Write descriptive test names
- Keep tests independent
- Clean up test data
- Use Page Object Model for complex flows
- Avoid hard-coded waits (use Playwright's auto-waiting)
## ✅ Definition of Done for E2E Tests
A test is "Done" when:
- [ ] Test written and passing
- [ ] Test is not flaky (runs consistently)
- [ ] Test has meaningful assertions
- [ ] Test cleans up after itself
- [ ] Test is documented (comments if complex)
- [ ] Test runs in CI
## 📦 Test Structure
```
e2e/
├── fixtures/
│ ├── test-users.ts # Test user credentials and data
│ └── auth-helpers.ts # Authentication helper functions
├── helpers/
│ └── page-helpers.ts # Reusable page interaction helpers
├── auth.spec.ts # Authentication tests
├── navigation.spec.ts # Navigation tests
├── student-journey.spec.ts # Legacy student tests
├── student-exercise-m4.spec.ts # M4 exercise flow tests (NEW)
├── teacher-flow.spec.ts # Teacher workflow tests (NEW)
├── admin-flow.spec.ts # Admin portal tests (NEW)
├── gamification-flow.spec.ts # Gamification tests (NEW)
└── README.md # This file
```
## 🎯 Quick Start
1. **Start the application:**
```bash
# Terminal 1: Start backend
cd apps/backend
npm run dev
# Terminal 2: Start frontend
cd apps/frontend
npm run dev
```
2. **Seed test data:**
```bash
# Run database seeds to create test users and data
npm run db:seed:test
```
3. **Run tests:**
```bash
# Run all tests
npm run test:e2e
# Run specific flow
npx playwright test student-exercise-m4.spec.ts
# Run with UI (recommended for development)
npm run test:e2e:ui
```
---
**Last Updated:** December 5, 2025
**Test Framework:** Playwright v1.56+
**Coverage:** 8 test files, 60+ test cases
**Critical Flows Covered:** Student Exercises, Teacher Review, Admin Management, Gamification