Files
lijiaoqiao/docs/supply_ui_test_cases_executable_v1_2026-03-25.md

343 lines
9.3 KiB
Markdown
Raw Permalink Normal View History

# 供应侧 UI-SUP 可执行测试清单v1.0
- 版本v1.0
- 日期2026-03-25
- 适用范围:`SUP-PAGE-001/002/003`(账号挂载、套餐发布、收益结算)
- 关联文档:
- `supply_button_level_prd_v1_2026-03-25.md`
- `supply_api_contract_openapi_draft_v1_2026-03-25.yaml`
- `router_core_s2_acceptance_test_cases_v1_2026-03-17.md`
- `acceptance_gate_single_source_v1_2026-03-18.md`
---
## 1. 测试环境与公共前置
## 1.1 环境
1. 环境:`staging`(含审计日志、告警、导出能力)。
2. 鉴权仅允许平台凭证header禁止 query key 入站。
3. 时区:`Asia/Shanghai`
## 1.2 测试账号
1. `supplier_owner_01`:供应方主账号(可创建/编辑)。
2. `supplier_viewer_01`:只读账号(仅查看)。
3. `platform_admin_01`:平台管理员(可处理风控态)。
## 1.3 测试数据
1. 供应账号初始状态:`pending``active``suspended` 各 1 条。
2. 套餐初始状态:`draft``active``paused``sold_out``expired` 各 1 条。
3. 结算单初始状态:`pending``processing``completed` 各 1 条。
## 1.4 通用断言
1. 每次关键按钮点击均产生审计事件。
2. 错误体不出现可复用上游凭证片段(映射 M-013
3. 所有请求 `request_id` 可追踪。
---
## 2. SUP-PAGE-001 账号挂载UI-SUP-ACC-001~006
## UI-SUP-ACC-001 立即验证成功路径
- 前置数据:
1. `supplier_owner_01` 已登录。
2. 页面字段 `provider/account_type/credential_input` 均可编辑。
- 步骤:
1. 选择 `provider=openai`
2. 选择 `account_type=api_key`
3. 输入合法凭证(测试密钥)。
4. 点击 `BTN-ACC-001 立即验证`
- 断言:
1. 发起 `POST /api/v1/supply/accounts/verify`
2. 返回 `verify_status=pass`
3. 页面显示“验证通过 + 可用额度摘要”。
4. 记录审计事件 `supply.account.verify`
## UI-SUP-ACC-002 提交挂载成功路径
- 前置数据:
1. 已完成 `UI-SUP-ACC-001` 且返回通过。
2. 勾选 `risk_ack`
- 步骤:
1. 输入 `account_alias`
2. 点击 `BTN-ACC-002 提交挂载`
- 断言:
1. 发起 `POST /api/v1/supply/accounts`
2. 返回 `201`,状态为 `pending``active`
3. 列表出现新账号记录。
4. 记录审计事件 `supply.account.create`
## UI-SUP-ACC-003 激活账号
- 前置数据:
1. 存在状态为 `pending` 的账号 A。
2. 当前用户有编辑权限。
- 步骤:
1. 在账号 A 行点击 `BTN-ACC-003 激活账号`
- 断言:
1. 发起 `POST /api/v1/supply/accounts/{id}/activate`
2. 状态从 `pending` 变为 `active`
3. 页面即时刷新该行状态。
4. 记录审计事件 `supply.account.activate`
## UI-SUP-ACC-004 暂停账号
- 前置数据:
1. 存在状态为 `active` 的账号 B。
2. 账号 B 无未结清风险单。
- 步骤:
1. 在账号 B 行点击 `BTN-ACC-004 暂停账号`
- 断言:
1. 发起 `POST /api/v1/supply/accounts/{id}/suspend`
2. 状态从 `active` 变为 `suspended`
3. 记录审计事件 `supply.account.suspend`
## UI-SUP-ACC-005 删除账号失败保护
- 前置数据:
1. 存在状态 `active` 的账号 C。
- 步骤:
1. 尝试触发 `BTN-ACC-005 删除账号`(若不可见则通过接口模拟)。
- 断言:
1. UI 层按钮不可见或不可点。
2. 若后端请求被触发,返回 `409` 冲突。
3. 页面提示“活跃账号不可删除”。
4. 不产生删除成功审计事件。
## UI-SUP-ACC-006 查看审计日志
- 前置数据:
1. 账号 D 已有至少 3 条历史操作记录。
- 步骤:
1. 点击 `BTN-ACC-006 查看审计`
- 断言:
1. 发起 `GET /api/v1/supply/accounts/{id}/audit-logs`
2. 侧边栏展示审计列表(含 operator/request_id/time
3. 列表分页正常page/page_size 生效)。
---
## 3. SUP-PAGE-002 套餐发布UI-SUP-PKG-001~006
## UI-SUP-PKG-001 保存草稿
- 前置数据:
1. 至少存在 1 个 `active` 账号。
- 步骤:
1. 选择 `supply_account_id``model`
2. 输入 `total_quota``price_per_1m_input``price_per_1m_output``valid_days`
3. 点击 `BTN-PKG-001 保存草稿`
- 断言:
1. 发起 `POST /api/v1/supply/packages/draft`
2. 返回 `201`,状态为 `draft`
3. 列表可查询到该草稿。
4. 记录审计事件 `supply.package.draft.save`
## UI-SUP-PKG-002 发布上架成功
- 前置数据:
1. 存在 `draft` 套餐 E且价格高于最低保护价。
- 步骤:
1. 点击 `BTN-PKG-002 发布上架`
- 断言:
1. 发起 `POST /api/v1/supply/packages/{id}/publish`
2. 状态由 `draft` 变更为 `active`
3. 记录审计事件 `supply.package.publish`
## UI-SUP-PKG-003 暂停售卖
- 前置数据:
1. 存在 `active` 套餐 F。
- 步骤:
1. 点击 `BTN-PKG-003 暂停售卖`
- 断言:
1. 发起 `POST /api/v1/supply/packages/{id}/pause`
2. 状态变更为 `paused`
3. 记录审计事件 `supply.package.pause`
## UI-SUP-PKG-004 下架套餐
- 前置数据:
1. 存在 `active``paused` 套餐 G。
2. 套餐 G 不存在未完成结算锁。
- 步骤:
1. 点击 `BTN-PKG-004 立即下架`
- 断言:
1. 发起 `POST /api/v1/supply/packages/{id}/unlist`
2. 状态变更为 `expired`(或按策略回到 `paused`)。
3. 记录审计事件 `supply.package.unlist`
## UI-SUP-PKG-005 批量调价部分失败
- 前置数据:
1. 选择 3 个套餐2 个可编辑1 个不可编辑(状态冲突)。
- 步骤:
1. 触发 `BTN-PKG-005 批量调价`,提交统一调价参数。
- 断言:
1. 发起 `POST /api/v1/supply/packages/batch-price`
2. 返回 `total=3``success_count=2``failed_count=1`
3. 失败项含明确 `package_id``error_code`
4. 成功项价格实际更新。
## UI-SUP-PKG-006 复制套餐
- 前置数据:
1. 存在任意套餐 H。
- 步骤:
1. 点击 `BTN-PKG-006 复制套餐`
- 断言:
1. 发起 `POST /api/v1/supply/packages/{id}/clone`
2. 返回 `201`,新套餐状态为 `draft`
3. 新套餐字段默认值与原套餐一致(除状态、创建时间)。
4. 记录审计事件 `supply.package.clone`
---
## 4. SUP-PAGE-003 结算提现UI-SUP-SET-001~005
## UI-SUP-SET-001 刷新收益数据
- 前置数据:
1. 供应方账号存在账单数据。
- 步骤:
1. 点击 `BTN-SET-001 刷新收益`
- 断言:
1. 发起 `GET /api/v1/supplier/billing`
2. 汇总卡片与趋势图刷新。
3. 刷新失败时显示可重试提示,不清空旧数据。
## UI-SUP-SET-002 发起提现成功
- 前置数据:
1. `available_amount > 0`
2. 当前无 `processing` 结算单。
- 步骤:
1. 输入提现金额、收款方式、收款账户、验证码。
2. 点击 `BTN-SET-002 发起提现`
- 断言:
1. 发起 `POST /api/v1/supply/settlements/withdraw`
2. 返回 `201`,结算状态为 `pending`
3. 提现金额从可提现余额冻结。
4. 记录审计事件 `supply.settlement.withdraw.create`
## UI-SUP-SET-003 撤销提现申请
- 前置数据:
1. 存在 `pending` 状态结算单 I。
- 步骤:
1. 点击 `BTN-SET-003 撤销申请`
- 断言:
1. 发起 `POST /api/v1/supply/settlements/{id}/cancel`
2. 状态变更为 `failed/cancelled`
3. 冻结金额回退。
4. 记录审计事件 `supply.settlement.withdraw.cancel`
## UI-SUP-SET-004 下载对账单
- 前置数据:
1. 存在任意结算单 J。
- 步骤:
1. 点击 `BTN-SET-004 下载对账单`
- 断言:
1. 发起 `GET /api/v1/supply/settlements/{id}/statement`
2. 返回可下载链接与过期时间。
3. 下载文件成功,文件命名符合规范。
4. 记录审计事件 `supply.settlement.statement.export`
## UI-SUP-SET-005 查看收益流水
- 前置数据:
1. 已生成多条收益流水记录。
- 步骤:
1. 点击 `BTN-SET-005 查看流水明细`
2. 分别使用时间区间和分页参数查询。
- 断言:
1. 发起 `GET /api/v1/supply/earnings/records`
2. 明细返回 `earnings_type/status/amount/earned_at` 字段完整。
3. 分页逻辑正确,无重复/漏项。
---
## 5. 安全专项SEC-SUP-001~002
## SEC-SUP-001 错误体与导出脱敏检查
- 前置数据:
1. 人为构造账号验证失败、发布失败、提现失败场景。
2. 准备账单导出与对账单导出样本。
- 步骤:
1. 触发上述失败场景并抓取错误响应。
2. 执行对账单下载。
3. 对错误体、导出文件运行脱敏扫描。
- 断言:
1. 任一结果中均不出现可复用上游凭证片段。
2. 命中敏感片段则标记 P0对应 M-013 失败。
## SEC-SUP-002 凭证边界回归(对齐 CB-001~CB-004
- 前置数据:
1. 平台鉴权与拦截策略已开启。
2. 出网审计与告警已开启。
- 步骤:
1. 使用平台凭证访问主路径,确认可通过。
2. 构造外部 query key 请求(含 `/v1beta/*`)。
3. 构造需求方绕过平台直连上游尝试。
- 断言:
1. `platform_credential_ingress_coverage_pct=100%`M-014
2. `query_key_external_reject_rate_pct=100%`M-016
3. `direct_supplier_call_by_consumer_events=0`M-015
4. `supplier_credential_exposure_events=0`M-013
---
## 6. 执行产物要求
每条用例至少产出:
1. 原始请求/响应日志(含 request_id
2. 页面录屏或关键截图。
3. 审计事件截图或导出。
4. 用例结论PASS/FAIL/BLOCKED与责任人签字。