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-cardvới valid payload → order created,status=PENDING - [ ]
POST /api/webhook/confirm-card-paymentvới validFincode-Signatureheader → coin credited,status=SUCCESS - [ ] Verify: user balance tăng đúng
coinAmountsau webhook
Idempotency
- [ ] Same webhook payload gửi 2 lần (simulate gateway retry) → lần 2 nhận
already_processedresponse (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-Signatureheader → response 4xx vớiFINCODE_SIGNATURE_IS_INVALID - [ ] Webhook không có
Fincode-Signatureheader → 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
PENDING→SUCCESS, 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