Restructured project from nested workspace pattern to flat single-repo layout. This eliminates redundant nesting and consolidates all project files under version control. ## Migration Summary **Before:** ``` alex/ (workspace, not versioned) ├── chess-game/ (git repo) │ ├── js/, css/, tests/ │ └── index.html └── docs/ (planning, not versioned) ``` **After:** ``` alex/ (git repo, everything versioned) ├── js/, css/, tests/ ├── index.html ├── docs/ (project documentation) ├── planning/ (historical planning docs) ├── .gitea/ (CI/CD) └── CLAUDE.md (configuration) ``` ## Changes Made ### Structure Consolidation - Moved all chess-game/ contents to root level - Removed redundant chess-game/ subdirectory - Flattened directory structure (eliminated one nesting level) ### Documentation Organization - Moved chess-game/docs/ → docs/ (project documentation) - Moved alex/docs/ → planning/ (historical planning documents) - Added CLAUDE.md (workspace configuration) - Added IMPLEMENTATION_PROMPT.md (original project prompt) ### Version Control Improvements - All project files now under version control - Planning documents preserved in planning/ folder - Merged .gitignore files (workspace + project) - Added .claude/ agent configurations ### File Updates - Updated .gitignore to include both workspace and project excludes - Moved README.md to root level - All import paths remain functional (relative paths unchanged) ## Benefits ✅ **Simpler Structure** - One level of nesting removed ✅ **Complete Versioning** - All documentation now in git ✅ **Standard Layout** - Matches open-source project conventions ✅ **Easier Navigation** - Direct access to all project files ✅ **CI/CD Compatible** - All workflows still functional ## Technical Validation - ✅ Node.js environment verified - ✅ Dependencies installed successfully - ✅ Dev server starts and responds - ✅ All core files present and accessible - ✅ Git repository functional ## Files Preserved **Implementation Files:** - js/ (3,517 lines of code) - css/ (4 stylesheets) - tests/ (87 test cases) - index.html - package.json **CI/CD Pipeline:** - .gitea/workflows/ci.yml - .gitea/workflows/release.yml **Documentation:** - docs/ (12+ documentation files) - planning/ (historical planning materials) - README.md **Configuration:** - jest.config.js, babel.config.cjs, playwright.config.js - .gitignore (merged) - CLAUDE.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
298 lines
7.3 KiB
Markdown
298 lines
7.3 KiB
Markdown
# Chess Game Testing Strategy
|
|
|
|
## Overview
|
|
|
|
This document outlines the comprehensive testing strategy for the HTML chess game implementation. The strategy follows a test pyramid approach, ensuring robust quality assurance at multiple levels.
|
|
|
|
## Testing Philosophy
|
|
|
|
- **Test-Driven Development (TDD)**: Write tests before implementation
|
|
- **Continuous Integration**: Automated test execution on every commit
|
|
- **Quality Gates**: Minimum coverage and performance thresholds
|
|
- **Shift-Left Testing**: Catch defects early in development
|
|
|
|
## Testing Pyramid
|
|
|
|
```
|
|
/\
|
|
/E2E\ <- 10% (Critical user journeys)
|
|
/------\
|
|
/Integr.\ <- 20% (Component interactions)
|
|
/----------\
|
|
/ Unit \ <- 70% (Individual functions/components)
|
|
/--------------\
|
|
```
|
|
|
|
### 1. Unit Tests (70% of test suite)
|
|
|
|
**Scope**: Individual functions, classes, and components in isolation
|
|
|
|
**Coverage Areas**:
|
|
- Chess logic (piece movements, rules validation)
|
|
- Game state management
|
|
- UI component rendering
|
|
- Utility functions
|
|
- Helper methods
|
|
|
|
**Tools**:
|
|
- Jest for JavaScript testing
|
|
- JSDOM for DOM manipulation testing
|
|
- Mock objects for dependencies
|
|
|
|
**Execution**:
|
|
- Run on every file save (watch mode)
|
|
- Must pass before commit (pre-commit hook)
|
|
- Target: <50ms per test
|
|
|
|
### 2. Integration Tests (20% of test suite)
|
|
|
|
**Scope**: Multiple components working together
|
|
|
|
**Coverage Areas**:
|
|
- Board + pieces interaction
|
|
- Game engine + UI synchronization
|
|
- Move validation + state updates
|
|
- Event handling flows
|
|
- Data persistence + retrieval
|
|
|
|
**Tools**:
|
|
- Jest with integration test configuration
|
|
- Testing Library for component integration
|
|
- LocalStorage mocking
|
|
|
|
**Execution**:
|
|
- Run before push (pre-push hook)
|
|
- Target: <200ms per test
|
|
|
|
### 3. End-to-End Tests (10% of test suite)
|
|
|
|
**Scope**: Complete user workflows in real browser
|
|
|
|
**Coverage Areas**:
|
|
- Full game scenarios (opening to checkmate)
|
|
- User interactions (drag-drop, click-to-move)
|
|
- Visual feedback and animations
|
|
- Save/load game functionality
|
|
- Error handling and edge cases
|
|
|
|
**Tools**:
|
|
- Playwright for cross-browser testing
|
|
- Visual regression with Percy or Chromatic
|
|
- Accessibility testing with axe-core
|
|
|
|
**Execution**:
|
|
- Run in CI/CD pipeline
|
|
- Nightly runs for full browser matrix
|
|
- Target: <5s per test
|
|
|
|
## Test Categories
|
|
|
|
### A. Functional Testing
|
|
|
|
#### Chess Rules Validation
|
|
- **Movement Rules**: Each piece type follows correct patterns
|
|
- **Capture Mechanics**: Pieces capture opponent pieces correctly
|
|
- **Special Moves**: Castling, en passant, pawn promotion
|
|
- **Game State**: Check, checkmate, stalemate detection
|
|
- **Illegal Moves**: System prevents invalid moves
|
|
|
|
#### Game Flow
|
|
- **Turn Management**: Alternating white/black turns
|
|
- **Move History**: Track and display all moves
|
|
- **Undo/Redo**: Revert and reapply moves
|
|
- **Time Controls**: Clock management (if implemented)
|
|
- **Game Termination**: Resignation, timeout, draw offers
|
|
|
|
### B. Non-Functional Testing
|
|
|
|
#### Performance
|
|
- **Initial Load**: <2 seconds to interactive
|
|
- **Move Calculation**: <100ms for legal move generation
|
|
- **Rendering**: 60 FPS during animations
|
|
- **Memory**: No leaks over extended gameplay
|
|
|
|
#### Usability
|
|
- **Drag-and-Drop**: Smooth piece movement
|
|
- **Visual Feedback**: Highlight valid moves, check state
|
|
- **Responsive Design**: Mobile, tablet, desktop layouts
|
|
- **Keyboard Navigation**: Accessible controls
|
|
|
|
#### Accessibility
|
|
- **WCAG 2.1 AA**: Screen reader support
|
|
- **Keyboard Controls**: Full functionality without mouse
|
|
- **Color Contrast**: Minimum 4.5:1 ratio
|
|
- **Focus Management**: Clear visual indicators
|
|
|
|
### C. Cross-Browser Testing
|
|
|
|
**Target Browsers**:
|
|
- Chrome (latest, -1, -2)
|
|
- Firefox (latest, -1)
|
|
- Safari (latest, -1)
|
|
- Edge (latest)
|
|
- Mobile: iOS Safari, Chrome Android
|
|
|
|
**Test Matrix**:
|
|
- Desktop: Windows 10/11, macOS, Linux
|
|
- Mobile: iOS 15+, Android 10+
|
|
|
|
## Test Data Management
|
|
|
|
### Static Test Data
|
|
- **Famous Positions**: Fool's Mate, Scholar's Mate, Opera Game
|
|
- **Edge Cases**: Three-fold repetition, 50-move rule
|
|
- **Endgames**: King+Rook vs King, King+Queen vs King
|
|
|
|
### Dynamic Test Data
|
|
- **Generated Positions**: Random legal board states
|
|
- **PGN Files**: Real games for replay testing
|
|
- **FEN Strings**: Specific test scenarios
|
|
|
|
### Test Data Location
|
|
- `/docs/testing/test-data/positions/` - FEN strings
|
|
- `/docs/testing/test-data/games/` - PGN files
|
|
- `/docs/testing/test-data/scenarios/` - JSON test cases
|
|
|
|
## Quality Gates
|
|
|
|
### Code Coverage Thresholds
|
|
```json
|
|
{
|
|
"statements": 85,
|
|
"branches": 80,
|
|
"functions": 85,
|
|
"lines": 85
|
|
}
|
|
```
|
|
|
|
### Performance Budgets
|
|
- Initial bundle size: <150KB (gzipped)
|
|
- Move calculation: <100ms
|
|
- UI update: <16ms (60 FPS)
|
|
- Memory usage: <50MB
|
|
|
|
### Accessibility Standards
|
|
- WCAG 2.1 Level AA compliance
|
|
- No critical axe-core violations
|
|
- Keyboard navigation complete
|
|
|
|
## CI/CD Integration
|
|
|
|
### Pre-Commit
|
|
```bash
|
|
npm run lint
|
|
npm run test:unit
|
|
npm run typecheck
|
|
```
|
|
|
|
### Pre-Push
|
|
```bash
|
|
npm run test:integration
|
|
npm run test:coverage
|
|
```
|
|
|
|
### CI Pipeline
|
|
```yaml
|
|
- Install dependencies
|
|
- Run linters
|
|
- Run unit tests
|
|
- Run integration tests
|
|
- Generate coverage report
|
|
- Run E2E tests (Chrome, Firefox)
|
|
- Visual regression tests
|
|
- Accessibility scan
|
|
- Performance audit
|
|
```
|
|
|
|
### Nightly Build
|
|
- Full browser matrix E2E tests
|
|
- Extended performance testing
|
|
- Security vulnerability scan
|
|
- Dependency updates check
|
|
|
|
## Test Maintenance
|
|
|
|
### Test Review Criteria
|
|
- Each test has clear description
|
|
- Tests are independent and isolated
|
|
- No hardcoded values (use constants/fixtures)
|
|
- Proper setup and teardown
|
|
- Meaningful assertions
|
|
|
|
### Flaky Test Management
|
|
- Retry failed tests (max 2 retries)
|
|
- Flag consistently flaky tests
|
|
- Weekly review and fix flaky tests
|
|
- Never skip tests permanently
|
|
|
|
### Test Documentation
|
|
- Document complex test scenarios
|
|
- Maintain test data catalog
|
|
- Keep testing tools up to date
|
|
- Share testing best practices
|
|
|
|
## Metrics and Reporting
|
|
|
|
### Key Metrics
|
|
- **Test Coverage**: Overall and per-component
|
|
- **Test Execution Time**: Track trends
|
|
- **Pass/Fail Rate**: Monitor stability
|
|
- **Bug Escape Rate**: Production issues found
|
|
|
|
### Dashboards
|
|
- Real-time test results in CI
|
|
- Coverage trends over time
|
|
- Performance benchmarks history
|
|
- Accessibility compliance score
|
|
|
|
## Risk-Based Testing
|
|
|
|
### Critical Paths (High Priority)
|
|
1. Legal move validation
|
|
2. Checkmate detection
|
|
3. Game state persistence
|
|
4. User input handling
|
|
|
|
### Medium Priority
|
|
1. Move history display
|
|
2. Undo/redo functionality
|
|
3. Visual animations
|
|
4. Board rotation
|
|
|
|
### Low Priority
|
|
1. Theme customization
|
|
2. Sound effects
|
|
3. Move suggestions
|
|
4. Game analysis
|
|
|
|
## Testing Schedule
|
|
|
|
### Sprint Activities
|
|
- **Day 1-2**: Write unit tests for new features
|
|
- **Day 3-5**: Implement features (TDD)
|
|
- **Day 6-7**: Integration testing
|
|
- **Day 8**: E2E test updates
|
|
- **Day 9**: Bug fixing
|
|
- **Day 10**: Release candidate testing
|
|
|
|
## Tools and Frameworks
|
|
|
|
See [testing-tools.md](./testing-tools.md) for detailed setup instructions.
|
|
|
|
## Success Criteria
|
|
|
|
A feature is considered "done" when:
|
|
1. All tests pass (unit, integration, E2E)
|
|
2. Code coverage meets thresholds
|
|
3. Performance budgets are met
|
|
4. Accessibility scan passes
|
|
5. Code review approved
|
|
6. Documentation updated
|
|
|
|
## References
|
|
|
|
- [Test Specifications](./test-specifications.md)
|
|
- [Quality Criteria](./quality-criteria.md)
|
|
- [Testing Tools](./testing-tools.md)
|
|
- [Test Data Catalog](./test-data/)
|