Les enseignants ont besoin de moyennes à jour immédiatement après la publication ou modification des notes, sans attendre un batch nocturne. Le système recalcule via Domain Events synchrones : statistiques d'évaluation (min/max/moyenne/médiane), moyennes matières pondérées (normalisation /20), et moyenne générale par élève. Les résultats sont stockés dans des tables dénormalisées avec cache Redis (TTL 5 min). Trois endpoints API exposent les données avec contrôle d'accès par rôle. Une commande console permet le backfill des données historiques au déploiement.
346 lines
12 KiB
Markdown
346 lines
12 KiB
Markdown
# Test Framework Setup - Validation Checklist
|
|
|
|
This checklist ensures the framework workflow completes successfully and all deliverables meet quality standards.
|
|
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
Before starting the workflow:
|
|
|
|
- [ ] Project root contains a valid project manifest (`package.json`, `pyproject.toml`, `pom.xml`, `build.gradle`, `go.mod`, `*.csproj`, `Gemfile`, or `Cargo.toml`)
|
|
- [ ] No existing test framework detected that conflicts with the target setup
|
|
- [ ] Project type identifiable (React, Vue, Angular, Next.js, Node, Python, Java, Go, .NET, Ruby, Rust, etc.)
|
|
- [ ] Bundler identifiable (Vite, Webpack, Rollup, esbuild) or not applicable (backend projects)
|
|
- [ ] User has write permissions to create directories and files
|
|
|
|
---
|
|
|
|
## Process Steps
|
|
|
|
### Step 1: Preflight Checks
|
|
|
|
- [ ] Stack type detected (`frontend`, `backend`, or `fullstack`)
|
|
- [ ] Project manifest successfully read and parsed (`package.json`, `pyproject.toml`, `pom.xml`, `go.mod`, etc.)
|
|
- [ ] Project type extracted correctly
|
|
- [ ] Bundler identified (or marked as N/A for backend projects)
|
|
- [ ] No framework conflicts detected
|
|
- [ ] Architecture documents located (if available)
|
|
|
|
### Step 2: Framework Selection
|
|
|
|
- [ ] Framework auto-detection logic executed
|
|
- [ ] Framework choice justified (Playwright vs Cypress for frontend; pytest/JUnit/Go test/xUnit/RSpec for backend)
|
|
- [ ] Framework preference respected (if explicitly set via `config.test_framework`)
|
|
- [ ] User notified of framework selection and rationale
|
|
|
|
### Step 3: Directory Structure
|
|
|
|
- [ ] `tests/` root directory created
|
|
- [ ] `tests/e2e/` directory created (or user's preferred structure)
|
|
- [ ] `tests/support/` directory created (critical pattern)
|
|
- [ ] `tests/support/fixtures/` directory created
|
|
- [ ] `tests/support/fixtures/factories/` directory created
|
|
- [ ] `tests/support/helpers/` directory created
|
|
- [ ] `tests/support/page-objects/` directory created (if applicable)
|
|
- [ ] All directories have correct permissions
|
|
|
|
**Note**: Test organization is flexible (e2e/, api/, integration/). The **support/** folder is the key pattern.
|
|
|
|
### Step 4: Configuration Files
|
|
|
|
- [ ] Framework config file created (`playwright.config.ts` or `cypress.config.ts`)
|
|
- [ ] Config file uses TypeScript (if `use_typescript: true`)
|
|
- [ ] Timeouts configured correctly (action: 15s, navigation: 30s, test: 60s)
|
|
- [ ] Base URL configured with environment variable fallback
|
|
- [ ] Trace/screenshot/video set to retain-on-failure
|
|
- [ ] Multiple reporters configured (HTML + JUnit + console)
|
|
- [ ] Parallel execution enabled
|
|
- [ ] CI-specific settings configured (retries, workers)
|
|
- [ ] Config file is syntactically valid (no compilation errors)
|
|
|
|
### Step 5: Environment Configuration
|
|
|
|
- [ ] `.env.example` created in project root
|
|
- [ ] `TEST_ENV` variable defined
|
|
- [ ] `BASE_URL` variable defined with default
|
|
- [ ] `API_URL` variable defined (if applicable)
|
|
- [ ] Authentication variables defined (if applicable)
|
|
- [ ] Feature flag variables defined (if applicable)
|
|
- [ ] `.nvmrc` created with appropriate Node version
|
|
|
|
### Step 6: Fixture Architecture
|
|
|
|
- [ ] `tests/support/fixtures/index.ts` created
|
|
- [ ] Base fixture extended from Playwright/Cypress
|
|
- [ ] Type definitions for fixtures created
|
|
- [ ] mergeTests pattern implemented (if multiple fixtures)
|
|
- [ ] Auto-cleanup logic included in fixtures
|
|
- [ ] Fixture architecture follows knowledge base patterns
|
|
|
|
### Step 7: Data Factories
|
|
|
|
- [ ] At least one factory created (e.g., UserFactory)
|
|
- [ ] Factories use @faker-js/faker for realistic data
|
|
- [ ] Factories track created entities (for cleanup)
|
|
- [ ] Factories implement `cleanup()` method
|
|
- [ ] Factories integrate with fixtures
|
|
- [ ] Factories follow knowledge base patterns
|
|
|
|
### Step 8: Sample Tests
|
|
|
|
- [ ] Example test file created (`tests/e2e/example.spec.ts`)
|
|
- [ ] Test uses fixture architecture
|
|
- [ ] Test demonstrates data factory usage
|
|
- [ ] Test uses proper selector strategy (data-testid)
|
|
- [ ] Test follows Given-When-Then structure
|
|
- [ ] Test includes proper assertions
|
|
- [ ] Network interception demonstrated (if applicable)
|
|
|
|
### Step 9: Helper Utilities
|
|
|
|
- [ ] API helper created (if API testing needed)
|
|
- [ ] Network helper created (if network mocking needed)
|
|
- [ ] Auth helper created (if authentication needed)
|
|
- [ ] Helpers follow functional patterns
|
|
- [ ] Helpers have proper error handling
|
|
|
|
### Step 10: Documentation
|
|
|
|
- [ ] `tests/README.md` created
|
|
- [ ] Setup instructions included
|
|
- [ ] Running tests section included
|
|
- [ ] Architecture overview section included
|
|
- [ ] Best practices section included
|
|
- [ ] CI integration section included
|
|
- [ ] Knowledge base references included
|
|
- [ ] Troubleshooting section included
|
|
|
|
### Step 11: Build & Test Script Updates
|
|
|
|
- [ ] Minimal test script added to appropriate config (`package.json` for frontend, `Makefile`/`pyproject.toml`/`build.gradle` for backend)
|
|
- [ ] Test framework dependency added (if not already present)
|
|
- [ ] Type definitions added (if TypeScript)
|
|
- [ ] Users can extend with additional scripts as needed
|
|
|
|
---
|
|
|
|
## Output Validation
|
|
|
|
### Configuration Validation
|
|
|
|
- [ ] Config file loads without errors
|
|
- [ ] Config file passes linting (if linter configured)
|
|
- [ ] Config file uses correct syntax for chosen framework
|
|
- [ ] All paths in config resolve correctly
|
|
- [ ] Reporter output directories exist or are created on test run
|
|
|
|
### Test Execution Validation
|
|
|
|
- [ ] Sample test runs successfully
|
|
- [ ] Test execution produces expected output (pass/fail)
|
|
- [ ] Test artifacts generated correctly (traces, screenshots, videos)
|
|
- [ ] Test report generated successfully
|
|
- [ ] No console errors or warnings during test run
|
|
|
|
### Directory Structure Validation
|
|
|
|
- [ ] All required directories exist
|
|
- [ ] Directory structure matches framework conventions
|
|
- [ ] No duplicate or conflicting directories
|
|
- [ ] Directories accessible with correct permissions
|
|
|
|
### File Integrity Validation
|
|
|
|
- [ ] All generated files are syntactically correct
|
|
- [ ] No placeholder text left in files (e.g., "TODO", "FIXME")
|
|
- [ ] All imports resolve correctly
|
|
- [ ] No hardcoded credentials or secrets in files
|
|
- [ ] All file paths use correct separators for OS
|
|
|
|
---
|
|
|
|
## Quality Checks
|
|
|
|
### Code Quality
|
|
|
|
- [ ] Generated code follows project coding standards
|
|
- [ ] TypeScript types are complete and accurate (no `any` unless necessary)
|
|
- [ ] No unused imports or variables
|
|
- [ ] Consistent code formatting (matches project style)
|
|
- [ ] No linting errors in generated files
|
|
|
|
### Best Practices Compliance
|
|
|
|
- [ ] Fixture architecture follows pure function → fixture → mergeTests pattern
|
|
- [ ] Data factories implement auto-cleanup
|
|
- [ ] Network interception occurs before navigation
|
|
- [ ] Selectors use data-testid strategy
|
|
- [ ] Artifacts only captured on failure
|
|
- [ ] Tests follow Given-When-Then structure
|
|
- [ ] No hard-coded waits or sleeps
|
|
|
|
### Knowledge Base Alignment
|
|
|
|
- [ ] Fixture pattern matches `fixture-architecture.md`
|
|
- [ ] Data factories match `data-factories.md`
|
|
- [ ] Network handling matches `network-first.md`
|
|
- [ ] Config follows `playwright-config.md` or `test-config.md`
|
|
- [ ] Test quality matches `test-quality.md`
|
|
|
|
### Pact Consumer CDC Alignment (when `tea_use_pactjs_utils` enabled)
|
|
|
|
- [ ] `vitest.config.pact.ts` is minimal (no pool/coverage/setup copied from unit config)
|
|
- [ ] Script names match pactjs-utils (`test:pact:consumer`, `publish:pact`, `can:i:deploy:consumer`, `record:consumer:deployment`)
|
|
- [ ] Scripts source `env-setup.sh` inline in package.json
|
|
- [ ] Shell scripts use `pact-broker` not `npx pact-broker`
|
|
- [ ] Shell scripts use `PACTICIPANT` env var pattern (not hardcoded service names)
|
|
- [ ] `can-i-deploy.sh` has `--retry-while-unknown=10 --retry-interval=30`
|
|
- [ ] `record-deployment.sh` has branch guard (only records on main/master)
|
|
- [ ] `env-setup.sh` uses `set -eu`; broker scripts use `set -euo pipefail` — each with explanatory comment
|
|
- [ ] CI workflow named `contract-test-consumer.yml`
|
|
- [ ] CI has workflow-level env block (not per-step)
|
|
- [ ] CI has `detect-breaking-change` step before install
|
|
- [ ] CI step numbering skips (3) — webhook-triggered provider verification
|
|
- [ ] CI can-i-deploy has `PACT_BREAKING_CHANGE != 'true'` condition
|
|
- [ ] CI has NO upload-artifact step (broker is source of truth)
|
|
- [ ] `.github/actions/detect-breaking-change/action.yml` exists
|
|
- [ ] Consumer tests use `.pacttest.ts` extension
|
|
- [ ] Consumer tests use PactV4 `addInteraction()` builder (not PactV3 fluent API)
|
|
- [ ] Consumer tests call REAL consumer code (actual API client functions), NOT raw `fetch()`
|
|
- [ ] Consumer code exposes URL injection mechanism (`setApiUrl()`, env var, or constructor param)
|
|
- [ ] Local consumer-helpers shim present if `@seontechnologies/pactjs-utils` not installed
|
|
- [ ] `.gitignore` includes `/pacts/` and `pact-logs/`
|
|
|
|
### Security Checks
|
|
|
|
- [ ] No credentials in configuration files
|
|
- [ ] .env.example contains placeholders, not real values
|
|
- [ ] Sensitive test data handled securely
|
|
- [ ] API keys and tokens use environment variables
|
|
- [ ] No secrets committed to version control
|
|
|
|
---
|
|
|
|
## Integration Points
|
|
|
|
### Status File Integration
|
|
|
|
- [ ] Framework initialization logged in Quality & Testing Progress section
|
|
- [ ] Status file updated with completion timestamp
|
|
- [ ] Status file shows framework: Playwright or Cypress
|
|
|
|
### Knowledge Base Integration
|
|
|
|
- [ ] Relevant knowledge fragments identified from tea-index.csv
|
|
- [ ] Knowledge fragments successfully loaded
|
|
- [ ] Patterns from knowledge base applied correctly
|
|
- [ ] Knowledge base references included in documentation
|
|
|
|
### Workflow Dependencies
|
|
|
|
- [ ] Can proceed to `ci` workflow after completion
|
|
- [ ] Can proceed to `test-design` workflow after completion
|
|
- [ ] Can proceed to `atdd` workflow after completion
|
|
- [ ] Framework setup compatible with downstream workflows
|
|
|
|
---
|
|
|
|
## Completion Criteria
|
|
|
|
**All of the following must be true:**
|
|
|
|
- [ ] All prerequisite checks passed
|
|
- [ ] All process steps completed without errors
|
|
- [ ] All output validations passed
|
|
- [ ] All quality checks passed
|
|
- [ ] All integration points verified
|
|
- [ ] Sample test executes successfully
|
|
- [ ] User can run the appropriate test command without errors (`npm run test:e2e`, `pytest`, `go test ./...`, etc.)
|
|
- [ ] Documentation is complete and accurate
|
|
- [ ] No critical issues or blockers identified
|
|
|
|
---
|
|
|
|
## Post-Workflow Actions
|
|
|
|
**User must complete:**
|
|
|
|
1. [ ] Copy `.env.example` to `.env`
|
|
2. [ ] Fill in environment-specific values in `.env`
|
|
3. [ ] Run `npm install` to install test dependencies
|
|
4. [ ] Run `npm run test:e2e` to verify setup
|
|
5. [ ] Review `tests/README.md` for project-specific guidance
|
|
|
|
**Recommended next workflows:**
|
|
|
|
1. [ ] Run `ci` workflow to set up CI/CD pipeline
|
|
2. [ ] Run `test-design` workflow to plan test coverage
|
|
3. [ ] Run `atdd` workflow when ready to develop stories
|
|
|
|
---
|
|
|
|
## Rollback Procedure
|
|
|
|
If workflow fails and needs to be rolled back:
|
|
|
|
1. [ ] Delete `tests/` directory
|
|
2. [ ] Remove test scripts from package.json
|
|
3. [ ] Delete `.env.example` (if created)
|
|
4. [ ] Delete `.nvmrc` (if created)
|
|
5. [ ] Delete framework config file
|
|
6. [ ] Remove test dependencies from package.json (if added)
|
|
7. [ ] Run `npm install` to clean up node_modules
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
### Common Issues
|
|
|
|
**Issue**: Config file has TypeScript errors
|
|
|
|
- **Solution**: Ensure `@playwright/test` or `cypress` types are installed
|
|
|
|
**Issue**: Sample test fails to run
|
|
|
|
- **Solution**: Check BASE_URL in .env, ensure app is running
|
|
|
|
**Issue**: Fixture cleanup not working
|
|
|
|
- **Solution**: Verify cleanup() is called in fixture teardown
|
|
|
|
**Issue**: Network interception not working
|
|
|
|
- **Solution**: Ensure route setup occurs before page.goto()
|
|
|
|
### Framework-Specific Considerations
|
|
|
|
**Playwright:**
|
|
|
|
- Requires Node.js 18+
|
|
- Browser binaries auto-installed on first run
|
|
- Trace viewer requires running `npx playwright show-trace`
|
|
|
|
**Cypress:**
|
|
|
|
- Requires Node.js 18+
|
|
- Cypress app opens on first run
|
|
- Component testing requires additional setup
|
|
|
|
### Version Compatibility
|
|
|
|
- [ ] Node.js version matches .nvmrc
|
|
- [ ] Framework version compatible with Node.js version
|
|
- [ ] TypeScript version compatible with framework
|
|
- [ ] All peer dependencies satisfied
|
|
|
|
---
|
|
|
|
**Checklist Complete**: Sign off when all items checked and validated.
|
|
|
|
**Completed by:** {name}
|
|
**Date:** {date}
|
|
**Framework:** { Playwright / Cypress or something else}
|
|
**Notes:** {notes}
|