Files
cursor/plans/测试_register_bet_win_6f8e8ea1.plan.md
2026-05-21 18:16:26 +08:00

73 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: 测试 register bet win
overview: 设计一套不改代码的联调测试方案,覆盖 register、bet、win含中间派奖+最终结算)主流程、幂等与关键校验。输出可直接执行的请求序列和验收点。
todos:
- id: collect-endpoints
content: 整理 register/bet/win 的可调用入口与参数最小集合
status: completed
- id: define-test-cases
content: 设计主链路、幂等、参数异常三类用例
status: completed
- id: prepare-request-templates
content: 产出按执行顺序排列的请求模板与预期结果
status: completed
isProject: false
---
# Register/Bet/Win 测试计划
## 目标
- 用最小链路验证 `register -> bet -> win` 的资金变更与返回口径。
- 覆盖 `win` 的两阶段结算(`is_end=0` 中间派奖、`is_end=1` 最终结算)。
- 覆盖关键风控点:幂等(重复 `biz_id`)、参数校验(`round_id``is_end`、金额)。
## 关键实现依据(用于制定用例)
- 接口入口与兼容关系:[`app/api/controller/WalletController.php`](app/api/controller/WalletController.php)
- `wallet/bet``wallet/win` 为独立入口;`wallet/update(type=bet|win)` 复用同链路。
- 业务分发与资金处理:[`app/api/logic/WalletLogic.php`](app/api/logic/WalletLogic.php)
- `register``RegisterService::execute`
- `bet``biz_id` 做幂等。
- `win``is_end=0` 只累计待结算金额,`is_end=1` 才真正入账并清理缓存。
- 注册落账与 Lot 初始化:[`app/service/wallet/RegisterService.php`](app/service/wallet/RegisterService.php)
- 注册会初始化钱包、统计行,并按 `fee/bonus` 创建 Deposit/Bonus Lot。
- 请求参数约束:[`app/validator/Wallet2Validator.php`](app/validator/Wallet2Validator.php)
- bet/win 必传 `round_id``is_end` 仅支持 `0/1`
## 测试范围与步骤
1. **准备阶段**
- 选一个全新 `uid`(避免历史账干扰)。
- 固定 `currency/source/organization`,并准备唯一 `biz_id` 生成规则(例如带时间戳)。
2. **主链路测试Happy Path**
-`wallet/update` 发起 `register``type=register`,带 `fee``bonus`)。
-`wallet/wallet` 查询余额基线。
-`wallet/bet`(带 `round_id`)验证扣款与返回结构。
-`wallet/win``is_end=0`:确认返回中 `withdraw` 临时增加(待结算展示),但不落最终账。
-`wallet/win``is_end=1`:确认最终入账,并清理该 `round_id` 的待结算累计。
3. **幂等与异常场景**
- 重放同一 `bet.biz_id`:应命中幂等,余额不重复变化。
- 重放同一 `win.biz_id`:应命中幂等,余额不重复变化。
- 缺失 `round_id` 调 bet/win应返回参数错误。
- 传非法 `is_end`(如 2应返回参数错误。
4. **验收口径**
- 余额变化符合顺序:下注优先扣 Bonus再 Deposit再 Withdraw。
- `win` 仅在最终结算时落地资金结果;中间派奖只累计。
- 重复请求无重复记账,返回语义稳定。
## 建议请求流(逻辑顺序图)
```mermaid
flowchart TD
registerCall[register(update)] --> walletCheck1[wallet_query]
walletCheck1 --> betCall[bet]
betCall --> winMid[win_is_end_0]
winMid --> walletCheck2[wallet_query]
walletCheck2 --> winFinal[win_is_end_1]
winFinal --> walletCheck3[wallet_query]
walletCheck3 --> idemReplay[replay_same_biz_id]
```
## 交付物
- 一份可直接在 Postman/curl 执行的请求模板(含示例 body
- 一份对照清单:每一步的“预期返回 + 余额期望 + 幂等期望”。