Skip to content

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_MATCHING với prize_id → receive JOIN_QUEUE_SUCCESS
  • [ ] Verify matching record created in Redis (key: matching:{settingId}:{prizeId}:{userId} hoặc tương đương)
  • [ ] Send LEAVE_QUEUE_MATCH_MATCHING → receive LEAVE_QUEUE_SUCCESS
  • [ ] Verify matching record removed from Redis

Graceful leave (liên quan task-1-1 và task-1-2)

  • [ ] Send LEAVE_QUEUE_MATCH_MATCHING khi không có matching record → không receive error event
  • [ ] Chỉ log warning phía server: verify [MATCHING] No matching record found for user trong 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-delay ms + buffer) → cả 2 receive MATCH_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