Task 3-1: Integration Test - Single Prize Matching Flow
Phase: 3 - Testing Priority: Medium Depends on: task-1-1 Reference: docs/BountyHunter-Backend/details/feature-matching-matchmaking/SPEC.md
Background
Test end-to-end cho luồng auto-matching với single prizeId (backward compatible mode).
Test scenarios
Join/Leave flow
- [ ] Send
JOIN_QUEUE_MATCH_MATCHINGvớiprize_id→ receiveJOIN_QUEUE_SUCCESS - [ ] Verify matching record created in Redis (key:
matching:{settingId}:{prizeId}:{userId}hoặc tương đương) - [ ] Send
LEAVE_QUEUE_MATCH_MATCHING→ receiveLEAVE_QUEUE_SUCCESS - [ ] Verify matching record removed from Redis
Graceful leave (liên quan task-1-1 và task-1-2)
- [ ] Send
LEAVE_QUEUE_MATCH_MATCHINGkhi không có matching record → không receive error event - [ ] Chỉ log warning phía server: verify
[MATCHING] No matching record found for usertrong logs - [ ] WebSocket connection vẫn còn alive sau graceful leave
Matchmaking scheduler
- [ ] 2 users join cùng queue với cùng
playableGameBoothSettingId+prizeId - [ ] Wait for scheduler tick (tối đa
fixed-delayms + buffer) → cả 2 receiveMATCH_FOUND - [ ] Room được tạo với đúng prizeId
- [ ] Redis matching records của cả 2 users được cleanup sau match
Error event format (liên quan task-1-1)
- [ ] Validation failures sử dụng
MatchingReasonCode.*constants — verify bằng cách trigger validation error và check response reason code
Verification / Acceptance Criteria
- [ ] Join/Leave happy path: đúng events nhận được, Redis state đúng
- [ ] Graceful leave: không có error event tới client, không WebSocket disconnect
- [ ] Match found: cả 2 users nhận
MATCH_FOUND, room được tạo với đúng prizeId - [ ] Error reason codes dùng constants từ
MatchingReasonCode, không phải hardcoded strings
Files to Modify
- Test files trong
websocket/src/test/hoặc integration test module