Add comprehensive test coverage for the main game scene:
Test Coverage:
- Constructor and scene key registration
- init() method - state reset
- create() method - board setup, StateRenderer creation, event subscription
- update() loop - intentionally minimal design
- shutdown() method - cleanup and event unsubscription
- Event handling - state updates and resize events
- Event subscription lifecycle - proper bind/unbind
- Integration tests - full lifecycle execution
- Edge cases - rapid cycles, large states
Key Testing Challenges Solved:
- Phaser canvas dependency - mocked Phaser.Scene with minimal API
- gameBridge integration - mocked event system with spy functions
- StateRenderer mocking - included all necessary methods (clear, getPlayerZones, etc.)
- Container API - added removeAll() for proper cleanup testing
All 1,282 tests passing (26 new MatchScene tests).
Foundation for TEST-004 (Card rendering) and TEST-005 (StateRenderer).
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Build foundation for game engine testing with comprehensive mocks and utilities:
Infrastructure Created:
- src/test/mocks/phaser.ts (33 tests)
* MockEventEmitter - Event system with on/once/off/emit
* MockScene - Scene lifecycle and factories
* MockGame - Game instance with scale and scene manager
* MockContainer - Game object container with child management
* MockSprite - Image sprites with texture support
* MockText - Styled text objects
* MockGraphics - Shape drawing API
* MockLoader - Asset loading simulation
- src/test/helpers/gameTestUtils.ts (22 tests)
* createMockGameState() - Complete game state with players
* createMockCardDefinition() - Card definitions with type helpers
* createMockCardInstance() - Card instances with damage/status
* createGameScenario() - Full game setups with cards in zones
* setupMockScene() - Scene setup with game instance
* Type-specific helpers: createMockPokemonCard(), createMockEnergyCard(), etc.
- src/test/README.md
* Complete documentation with usage examples
* Testing patterns and best practices
* Troubleshooting guide
This infrastructure enables testing of all Phaser game objects (Board, Card, Zone,
MatchScene, etc.) without requiring WebGL/Canvas. All 1,256 tests passing.
Foundation for TEST-002 through TEST-009 (scene and state testing).
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Fix hand card rotation direction
Cards now fan outward correctly instead of curling inward
* Update StateRenderer to require MatchScene type for type safety
- Change constructor parameter from Phaser.Scene to MatchScene
- Update scene property type to MatchScene
- Add import for MatchScene type
- Update JSDoc example to reflect type-safe constructor
* Defer Board creation to StateRenderer for correct rules config
- Make board property nullable (Board | null instead of Board?)
- Remove Board and createBoard imports (now handled by StateRenderer)
- Update setupBoard() to skip Board creation
- Add setBoard() method for StateRenderer to call
- Update clearBoard() to use null instead of undefined
- Add JSDoc explaining why Board creation is deferred
* Create Board in StateRenderer with correct layout options
- Add Board and createBoard imports
- Add board property to StateRenderer
- Create Board in render() on first call with correct rules_config
- Add debug logging for Board creation and zone creation
- Update clear() to destroy Board when clearing
- Board now created after we have rules_config from first state
* Add fatal error handling with toast notification and auto-redirect
- Add 'fatal-error' event to GameBridgeEvents type
- Import and initialize useToast in GamePage
- Listen for 'fatal-error' event from Phaser
- Show error toast that persists until redirect
- Show full-screen fatal error overlay with countdown
- Auto-redirect to /play after 3 seconds
- Update StateRenderer to emit 'fatal-error' when Board creation fails
* Gate debug logging with DEV flag
- Add DEBUG_RENDERER constant gated by import.meta.env.DEV
- Update all console.log statements in StateRenderer to only log in development
- Keep console.error and console.warn as they are (always show errors)
- Debug logs now only appear during development, not in production
* Fix code audit issues - add missing imports and improve error UX
Critical fixes:
- Add missing gameBridge import to StateRenderer (fixes runtime error in fatal error handler)
- Add missing Board type import to MatchScene (fixes TypeScript compilation error)
UX improvements:
- Replace fatal error auto-redirect with manual 'Return to Menu' button
- Add toast notification when resignation fails
- Give users unlimited time to read fatal errors before returning
Addresses issues found in frontend code audit:
- errors.missing-import (StateRenderer.ts:166)
- errors.missing-type-import (MatchScene.ts:84)
- errors.catch-only-console (GamePage.vue:145)
- architecture.missing-fatal-error-handling (GamePage.vue:261)
* Add CONTRIBUTING policy and fix pre-existing lint/test errors
- Add CONTRIBUTING.md with strict policy: never use --no-verify without approval
- Add comprehensive testing documentation (TESTING.md, VISUAL-TEST-GUIDE.md)
- Add test-prize-fix.md quick test checklist and verify-fix.sh script
Lint fixes (enables pre-commit hooks):
- Remove unused imports in 9 files
- Fix unused variables (underscore convention)
- Replace 'as any' type assertions with proper VisibleGameState types
- Add missing CARD_WIDTH_MEDIUM import in layout.spec.ts
- All ESLint errors now resolved (only acceptable warnings remain)
Test fixes (all 1000 tests now passing):
- Fix layout.spec.ts: Add missing CARD_WIDTH_MEDIUM import
- Fix PlayPage.spec.ts: Update test to use actual hardcoded UUIDs
- Fix useAuth.spec.ts: Mock API profile fetch in initialization tests
- Fix PhaserGame.spec.ts: Add scenes export to mock and update createGame call expectations
This ensures pre-commit hooks work properly going forward and prevents
bypassing TypeScript/lint checks that catch errors early.
* Add comprehensive test coverage improvement plan
- Create PROJECT_PLAN_TEST_COVERAGE.json with 25 structured tasks
- Create TEST_COVERAGE_PLAN.md with executive summary and roadmap
- Plan addresses critical gaps: game engine (0%), WebSocket (27%)
- 6-week roadmap to reach 85% coverage from current 63%
- Target: Phase 1 (weeks 1-3) - critical game engine and network tests
- Includes quick wins, production blockers, and success metrics
Based on coverage analysis showing:
- Strong: Composables (84%), Components (90%), Stores (88%)
- Critical gaps: Phaser game engine (~5,500 untested lines)
- High priority: WebSocket/multiplayer reliability
See TEST_COVERAGE_PLAN.md for overview and week-by-week breakdown.
* Add coverage tooling and ignore coverage directory
- Add @vitest/coverage-v8 package for coverage analysis
- Add coverage/ directory to .gitignore
- Used during test coverage analysis for PROJECT_PLAN_TEST_COVERAGE.json