# BeeX 核心业务闭环冒烟测试用例

## 用例编号

SMOKE-001

## 用例名称

BeeX 核心业务闭环冒烟测试

## 测试目标

验证 BeeX 从用户进入、关系绑定、商品转链、订单归因、收益入账到提现申请的主链路是否能跑通。

本用例用于判断当前环境是否具备继续做详细功能测试、异常分支测试和端到端联调的基本条件。

## 适用范围

- App / H5 用户端。
- WhatsApp 登录和轻量查询入口。
- 商品搜索、链接识别和转链能力。
- 邀请关系、订单归因、佣金和钱包账本。
- KYC、收款账户和提现申请。
- 管理后台查询、审核和审计能力。

## 不覆盖范围

- 真实生产环境出款。
- 全量券规则和活动规则。
- 所有退款、取消、追扣和风控异常分支。
- 多国家、多币种、多语言完整兼容性。
- App Store / Google Play 分发链路。

## 前置条件

- 当前测试环境服务可访问。
- App 或 H5 可正常打开。
- WhatsApp 官方号可收发测试消息。
- 测试用户手机号或 WhatsApp 账号可用。
- 测试邀请人账号已存在，并具备可邀请资格。
- 测试商品链接可被 BeeX 识别并支持返利。
- 测试环境可以创建或同步一笔可归因订单。
- 测试用户具备可填写的 KYC 和收款账户测试数据。
- 管理后台或后台查询工具可查看用户、关系、订单、收益、钱包和提现记录。

## 测试数据

| 数据项 | 要求 |
| --- | --- |
| 邀请人 | 已注册 BeeX，具备有效邀请码 |
| 被邀请人 | 新手机号或新 WhatsApp 账号 |
| 商品链接 | TikTok / Shopee 可返利商品链接 |
| 订单 | 可在测试环境同步或模拟归因 |
| KYC | 测试实名信息 |
| 收款账户 | 测试银行卡或电子钱包账号 |

## 覆盖业务流程

| 业务流程 | 冒烟验证点 |
| --- | --- |
| 登录 / 注册 | 新用户可完成 WhatsApp 或手机号登录，并创建 BeeX 账号 |
| 邀请关系绑定 | 新用户通过邀请码或分享链接进入后，可绑定正确上级 |
| 商品搜索 / 转链 | 商品链接可识别，可展示预计返利，可生成购买链接 |
| 订单同步 / 归因 | 测试订单可归因到正确用户和正确邀请链路 |
| 佣金 / 返现分配 | 下单人收益、上级收益按规则生成记录 |
| 钱包 / 收益账本 | 收益进入钱包账本，状态和金额可查询 |
| 收益页汇总 | 收益、有效粉丝、达人等级和近 7 天直属粉丝 GMV 可一次查询，统计口径一致 |
| 我的页汇总 | 登录后只调用一次聚合接口即可展示用户资料、三种订单数量、有效优惠券数量和返佣基金领取状态 |
| KYC / 提现 | 用户完成必要资料后可提交提现申请 |
| WhatsApp 机器人 | 登录、邀请码、订单或钱包查询至少一个轻量指令可正常返回 |
| 后台管理 | 后台可查到用户、关系、订单、收益、钱包和提现申请 |

## 核心操作

1. 使用新手机号或新 WhatsApp 账号进入 BeeX。
2. 通过测试邀请人的邀请码或分享链接完成注册登录。
3. 查询后台，确认新用户已创建，并绑定到正确邀请人。
4. 在 BeeX 输入测试商品链接，确认商品可识别并生成购买链接。
5. 使用测试环境能力创建或同步一笔该用户的可归因订单。
6. 查询订单、佣金和钱包记录，确认收益已生成。
7. 调用 `GET /api/v1/earnings/{userId}/summary`，核对收益金额、当前有效直属邀请关系数、历史累计邀请订单/GMV、达人等级和近 7 天 GMV。
   - 新页面以 `earnings.effectiveTotalEarningsMinor`、`earnings.todayRecordedMinor`、`earnings.breakdown` 为准；钱包待确认和可提现金额以 `wallet` 为准。
   - 分别构造或同步 `USER_CASHBACK`、`COUPON_CASHBACK`、`ACTIVITY_CASHBACK`、`REBATE_FUND`、`DIRECT_COMMISSION` 五类记录，确认每类 `effectiveMinor = pendingMinor + confirmedMinor`，且在无历史遗留收益的测试账号中，五类 `effectiveMinor` 之和等于 `effectiveTotalEarningsMinor`。
   - 验证 `estimatedTotalEarningsMinor`、`todayEarningsMinor`、`selfPurchaseRebateMinor`、`referralRewardsMinor`、`otherEarningsMinor`、`pendingBalanceMinor`、`availableBalanceMinor` 仍返回，但 H5 不再以它们计算分类收入或钱包余额。
8. 分别准备有效粉丝数为 `0、1、4、5、9、10、99、100` 的用户，确认 `0` 命中 `CREATOR_V1`、`1–4` 命中 `CREATOR_V2`、`5–9` 命中 `CREATOR_V3`、`10–99` 命中 `CREATOR_V4`、`100+` 命中 `CREATOR_V5`；无订单日期必须补 0，`dailyGmv` 固定返回 7 项。
9. 调用 `GET /api/v1/me/summary`，确认不传 `userId`，头像、昵称、邀请码、待处理/跟踪中/成功订单数、有效优惠券数量和返佣基金领取状态与原业务数据一致。
10. 打开 H5“我的”Tab 和执行下拉刷新，确认首屏业务请求只有 `/api/v1/me/summary`；进入订单、优惠券或返佣基金详情后才调用对应详情接口。
11. 完成测试 KYC 和收款账户信息。
12. 提交一笔提现申请。
13. 查询后台，确认提现申请进入正确状态。
14. 使用 WhatsApp 官方号执行一次登录、查单或查钱包类轻量查询。

## 登录手机号国家限制验收

1. 在 `id-test` 使用 `08...`、`8...`、`62...`、`+62...` 分别创建手机 OTP，确认全部归一化为 `62...` 并成功创建 OTP。
2. 在 `id-test` 使用 `+86` 加 11 位中国大陆手机号创建手机 OTP、执行密码登录和找回密码，确认号码校验通过；后续结果由验证码、账号和密码状态决定，不得返回 `PHONE_COUNTRY_NOT_SUPPORTED`。
3. 使用生产配置运行号码策略测试，确认 `+62` 通过，`+86`、`+60` 和其他国际号码返回 HTTP `400`、`code=PHONE_COUNTRY_NOT_SUPPORTED`，且不创建 OTP、不查询账号、不签发 token。
4. 在测试环境临时关闭附加国家号配置后，用中国 WhatsApp 号码发送客户端生成的 `LOGIN SX-...`，确认 `whatsapp_login_intent.status=FAILED`，`failure_code=PHONE_COUNTRY_NOT_SUPPORTED`，且 `user_id`、`verified_at`、`consumed_at` 均为空。
5. 确认上一条入站消息仍写入 `wa_inbound_messages`，官号写入一条拒绝提示到 `wa_outbound_messages`，但不得创建用户、WhatsApp identity、钱包或登录 token。
6. 用户返回 BeeX 后调用 `POST /api/v1/auth/whatsapp/login-codes/consume`，确认 HTTP `200`、`data.status=FAILED`、`data.failureCode=PHONE_COUNTRY_NOT_SUPPORTED`，不返回 `accessToken`、`refreshToken`。
7. 确认 H5 收到 `FAILED` 后立即停止轮询、清除本地待处理登录码，不自动再次打开 WhatsApp，并显示“仅支持印度尼西亚号码（+62）”的本地化提示。
8. 确认已有非印尼账号的数据不被删除，已有登录 token 不被本次规则主动注销；token 到期后的新登录按当前环境规则校验。

通过标准：测试环境同时支持 `+62` 和 `+86`；印尼生产配置仅允许 `+62`；所有拒绝均发生在创建用户、发送 OTP、查询账号或签发 token 之前，WhatsApp 和 H5 都能得到明确提示。

## 应用商店版本同步验收

1. 启动管理后台服务，等待 `seahub.app-version-sync.initial-delay-ms`，确认定时任务使用分布式锁 `app-published-version:sync` 执行。
2. 查询 `runtime_feature_config`，确认存在 `client_type=SYSTEM` 的 `app_store_ios_published_version`，其中 `config_json.versionName`、`storeUrl`、`releaseStatus=PUBLISHED`、`syncedAt` 有效。
3. 给管理后台配置具备目标应用权限的 `SEAHUB_GOOGLE_PLAY_SERVICE_ACCOUNT_JSON`，确认生成 `google_play_android_published_version`，且 `versionCode` 等于 production track 中 `completed` 或 `inProgress` 发布的最高有效版本码。
4. 在 Google Play production track 同时准备较高的 `draft` 和较低的 `completed` 版本，确认同步任务忽略 `draft`，不把它写成已发布版本。
5. 临时模拟 Apple 或 Google API 失败，确认另一平台仍可同步，失败平台原配置不被清空或覆盖。
6. 为 iOS 配置启用 `appleLogin`，请求 `GET /api/v1/app/runtime-config`：`appVersion` 大于已发布 `versionName` 时返回 `features.appleLogin=true`，小于或等于时返回 `false`。
7. 禁用或删除 iOS 已发布版本配置后再次请求，确认普通 iOS 版本返回 `features.appleLogin=false`；`88.88.88` 内测版本仍返回 `true`。
8. 检查主业务服务日志和代码路径，确认不再调用 `itunes.apple.com` 或 Google Play API，所有实例读取相同数据库配置。

通过标准：应用商店访问和同步只发生在管理后台服务，最后成功结果持久化；业务服务重启或多实例切换后版本门控结果一致。

## 平台收益冻结验收

1. 在管理后台“邀请分佣”确认 ID 环境 TikTok 冻结天数为 `30`、Shopee 为 `60`，提现规则中不再显示“结算释放天数”。
2. 使用相同国家、用户、GMV 和佣金分别调用收益预览，TikTok 的 `USER_CASHBACK`、`DIRECT_COMMISSION`、`COUPON_CASHBACK` 返回 `releaseDelayDays=30`，Shopee 返回 `releaseDelayDays=60`。
3. 分别完成一笔 TikTok 和 Shopee 测试订单，确认 `commission_records.release_at` 等于各自 `settled_at + 30天`、`settled_at + 60天`。
4. 调用 `GET /api/v1/order-benefits/orders/{orderId}`，确认每项基础收益返回准确 `releaseAt`；活动收益仍按命中活动规则释放。
5. 重复同步订单，确认金额和 `releaseAt` 不重复、不漂移；订单释放前取消时，待结算收益正确失效并冲正。

通过标准：同一国家的平台冻结天数可独立保存、发布、回滚，预览与真实订单一致，修改新版本不追溯改变已生成收益。

## WhatsApp 查询自动回复验收

1. 配置 `runtime_feature_config`：`country_code=ID`、`client_type=SYSTEM`、`feature_key=whatsapp_auto_reply`，填写官方邀请码/注册链接、教程、客服时间/邮箱、iOS/Android/官方下载页。
2. 依次发送 `0001`、`8001`、`9001`、`1001`、`5001`、`2001`、`3001`、`6001`、`7001`、`0000`，确认菜单、回复和引导文案均不展示带负号的指令。
3. 使用旧格式输入任一指令，确认解析兼容，但回复仍只展示无负号格式。
4. 核对 `8001` 的可提现、待结算、本月个人返现、本月推广奖励；金额使用印尼格式，且只引导到 App 提现。
5. 核对 `0000` 只统计印尼时区当月订单，最近订单状态已本地化，退款引导回原电商平台。
6. 核对 `1001` 生成新的正式邀请分享短链；`6001` 不足 5 个商品时只显示实际数量，回复 `1-5` 可获得对应商品链接。
7. 临时清空各可选配置，确认不输出虚构邀请码、客服号码、商店链接或教程链接，并按规则回退到官方下载页/App 帮助中心。
8. 检查全部回复不包含固定 `Rp 500K`、永久有效、24 小时服务、5 分钟回复、直接 APK 或 WA 直接提现承诺。

通过标准：十条查询指令均按最新印尼语口径返回真实数据或明确降级结果，动态内容来自正式配置，系统输出只使用无负号指令。

## 通过标准

- 新用户账号创建成功，登录态正常。
- 邀请关系绑定到预期邀请人，未出现空上级或错误上级。
- 商品链接识别成功，预计返利和购买入口可见。
- 测试订单能被同步或模拟生成，并归因到目标用户。
- 收益记录生成成功，金额状态进入钱包账本。
- 钱包可展示待结算、可提现或冻结等明确状态。
- 收益页只统计当前登录用户；有效粉丝数等于状态为 `ACTIVE` 的直属邀请关系数，达人等级命中当前生效配置。
- 邀请累计完成订单数和 GMV 等于当前有效直属邀请关系产生的全部 `COMPLETED`、`SETTLED` 订单汇总，不受近 7 天窗口限制。
- 近 7 天 GMV 只包含当前有效直属粉丝的 `COMPLETED`、`SETTLED` 订单，按用户国家时区返回连续 7 个自然日。
- “我的”页聚合接口只读取当前登录用户；订单状态数量、有效优惠券数量和返佣基金领取状态与详情接口一致。
- “我的”Tab 首次进入和下拉刷新不再并发调用收益汇总、优惠券列表、订单跟踪列表接口。
- KYC 和收款账户可保存或识别为可用状态。
- 提现申请创建成功，后台可查询。
- WhatsApp 至少一个关键指令可收到有效回复。
- 后台可追踪本次测试涉及的用户、关系、订单、收益、钱包和提现记录。

## 阻断标准

出现以下任一情况，本轮冒烟测试判定不通过：

- 用户无法完成注册或登录。
- 邀请关系没有绑定，或绑定到错误上级。
- 商品链接无法识别，且无法继续生成购买入口。
- 订单无法创建、同步或归因。
- 收益未进入账本，或账本金额、状态明显错误。
- 收益页可越权查看其他用户，或有效粉丝数、达人等级、近 7 天 GMV 任一统计口径错误。
- “我的”页仍并发调用旧接口，或聚合接口可查询其他用户、返回的订单/券/返佣基金状态不一致。
- 提现申请无法创建，且不是因为明确的余额、KYC 或风控限制。
- 后台无法查询关键业务记录。
- WhatsApp 官方号无法完成任何关键指令回复。

## WhatsApp 分享文案配置验收

1. 在管理后台“分享文案”分别编辑商品分享、邀请用户、Honey Feed 的印尼语和中文模板，确认实时预览可以替换全部变量。
2. 输入未知变量、移除 `{{shareUrl}}` 或清空任一必填语言，确认保存或预览被服务端拒绝。
3. 保存草稿但不发布，分别生成三类新分享，确认仍使用当前线上模板。
4. 发布草稿后重新生成三类分享，确认接口返回新的 `shareMessage`、`shareTemplateVersionId` 和 `shareLocale`。
5. 商品分享调用 `POST /api/v1/affiliate-links/generate` 且 `linkMode=SHARE`；邀请分享调用 `POST /api/v1/growth/invite-shares`；Honey Feed 调用 `POST /api/v1/honey-feed/posts/{postId}/shares`。
6. 分别执行复制邀请链接、WhatsApp、Instagram、Facebook 和系统分享，确认邀请链接均为 `https://www.beexofficial.com/{环境}/invite/{shareCode}`，不再包含 `inviterUserId`、`ref`、`envCode` 等长查询参数。
7. 在 WhatsApp 打开三类分享，确认消息正文只包含一个正确承接链接，中文和印尼语与请求语言一致。
8. 打开邀请短链，确认桌面浏览器跳转对应环境 H5 `/invite/{referralCode}`；移动端优先唤起 `beex://invite/{referralCode}`，未安装 App 时回落 H5。
9. 使用邀请分享码访问 `/invite/{shareCode}`，使用商品分享码访问 `/s/{shareCode}`，确认分别返回邀请页和商品页，不得混用业务入口。
10. 使用 WhatsApp 抓取器读取邀请短链，确认 `og:image` 和 `twitter:image` 指向对应环境 H5 的 `/icon-512.png`，图片类型为 `image/png`、尺寸为 `512×512`，且图片匿名访问返回 200。
11. 在 WhatsApp 发送新生成的邀请短链，确认预览卡片包含 BeeX PNG 图标、标题和描述；不得继续使用 `favicon.svg`。旧链接可能受 WhatsApp 缓存影响，不作为验收链接。
12. 读取发布前生成的商品/Honey Feed 分享记录，确认仍返回旧文案；检查 `share_logs.target_url` 中保留 `shareMessage`、`shareTemplate`、`shareTemplateVersionId`、`shareLocale` 快照。
13. 配置一个未来生效版本，确认当前版本在未来时间前继续生效，未来版本不会被较早生效的新版本错误截断。

通过标准：三类分享均由服务端返回完整文案，邀请分享统一使用公共短链，后台发布只影响新分享，历史分享文案不漂移；服务端生成邀请短链失败时 H5 不得降级分享包含用户参数的旧长链接。

## 风险备注

- 本用例只判断主链路是否可用，不代表金额规则、异常分支和风控策略全部正确。
- 如果测试环境不能真实下单，可使用测试环境已有的订单同步、mock 支付或后台补单能力，但必须在测试记录中标明数据来源。
- 如果本轮不执行真实 Xendit 出款，提现链路只验到“提现申请创建并进入后台处理状态”。
- 如果涉及真实出款、生产环境或批量数据写入，需要单独确认环境、账号、金额和回滚方案。

## 测试记录模板

| 项目 | 记录 |
| --- | --- |
| 测试环境 |  |
| App / H5 版本 |  |
| 测试用户 |  |
| 邀请人 |  |
| 商品链接 |  |
| 订单号 |  |
| 有效粉丝数 / 达人等级 |  |
| 收益页汇总核对结果 |  |
| 提现申请号 |  |
| 测试结果 | 通过 / 不通过 |
| 阻断问题 |  |
| 备注 |  |
