Skip to content

Task 3-1: Integration Test - Card Payment Flow

Phase: 3 - Testing Priority: Medium Depends on: task-1-1 Reference: docs/BountyHunter-Backend/details/feature-payment-marketplace/SPEC.md

Background

Test full Fincode card payment lifecycle qua API, bao gồm idempotency và expiry.

Test scenarios

Happy path

  • [ ] POST /api/coin/buy-by-card với valid payload → order created, status=PENDING
  • [ ] POST /api/webhook/confirm-card-payment với valid Fincode-Signature header → coin credited, status=SUCCESS
  • [ ] Verify: user balance tăng đúng coinAmount sau webhook

Idempotency

  • [ ] Same webhook payload gửi 2 lần (simulate gateway retry) → lần 2 nhận already_processed response (hoặc 200)
  • [ ] Coin không bị credit 2 lần: verify balance unchanged sau lần 2

Signature validation

  • [ ] Webhook với sai Fincode-Signature header → response 4xx với FINCODE_SIGNATURE_IS_INVALID
  • [ ] Webhook không có Fincode-Signature header → reject

Expiry batch

  • [ ] Tạo order → mock expiry (set checkout TTL = past) → batch đổi status=EXPIRED
  • [ ] Confirm webhook sau khi expired → order bị block (status guard, không phải 404)
  • [ ] Verify: coin không được credited cho expired order

Verification / Acceptance Criteria

  • [ ] Happy path: order PENDINGSUCCESS, balance credited đúng
  • [ ] Duplicate webhook: state không thay đổi, no double credit
  • [ ] Invalid signature: rejected với error code, no DB modification
  • [ ] Expired order + webhook confirm: blocked, no coin credited

Files to Modify

  • Test files trong web/src/test/ hoặc integration test module