4.7 KiB
4.7 KiB
MVP 完整验收报告(T-402)
日期:2026-07-03
范围:按02-requirements.md的第一版 MVP / P0 验收标准验收。
结论:P0 验收通过。同一 119 条测试按验收域拆分运行全部通过;一次单条全量manage.py test曾因远程 MySQL 连接重置中断,已登记为测试环境稳定性问题。
验收矩阵
| P0 验收项 | 结论 | 主要证据 |
|---|---|---|
| 用户注册 / 登录 | PASS | T-402 历史验收口径为 apps.portal 注册创建 0 点钱包且不写赠点流水;T-605 后注册为免邮箱验证、注册后可直接登录,邮箱仍必填且唯一。2026-07-08 新需求已登记为 T-608,后续需改为注册赠送 100 点并写 signup_bonus 流水 |
| API Key 自助管理 | PASS | apps.portal:Key 明文只显示一次、列表仅显示 prefix、删除为吊销、不可删除他人 Key;apps.api:缺失/无效 Key 为 401,吊销 Key 为 403 |
| 扫码充值 | PASS | apps.portal / apps.api:创建 pending 订单不直接加点、不写流水;二维码票据展示;状态轮询只允许本人订单;主动查单可补入账 |
| 个人中心 / 记录 | PASS | apps.portal:余额、充值总额、入账点数、消费/退款记录与实际订单/流水一致;充值记录和消费记录分页且仅见本人 |
| 生成标题 API | PASS | apps.api:有效 API Key + 合法 prompt 返回标题、扣点并写调用记录;缺失/无效 Key 返回 401 |
| 生成图片 API | PASS | apps.api:有效 API Key 返回图片 URL,图片结果不把 provider raw/base64 写入调用记录;上游错误和能力错误会退点 |
| 点数计费与扣减 | PASS | apps.billing / apps.api:按别名+分辨率计费,余额不足返回 402 且不调上游;并发扣点不超扣、不为负 |
| 余额查询 API | PASS | apps.api:余额响应与 PointsLedger.points_delta 累加一致;Web session 不能调用外部余额接口 |
| 充值转点数 | PASS | apps.api / apps.billing:微信/支付宝 mock 回调验签后幂等入账;重复回调只入账一次;签名失败或金额不一致不入账 |
| 调用记录 / 点数流水 | PASS | apps.api / apps.billing:成功、失败退点、充值、运营调整均写记录/流水;流水约束拒绝 0 变动、负余额和重复 refund/recharge |
| 运营后台 | PASS | apps.users / apps.billing / apps.ai:admin 可登录;用户、钱包、API Key、规则、汇率、订单、流水、调用记录、模型配置和审计均可管理/检索;API Key / AI key 脱敏;手工调点经计费层写 adjust 流水 |
| 可插拔模型 | PASS | apps.ai / apps.billing:ModelAlias 解析别名到当前 active AiModel;后台变更有审计;改别名指向后调用方别名不变,计费规则仍按别名生效 |
验证命令
./init.ps1:通过。py -3.12 manage.py check:通过,0 issues。py -3.12 manage.py makemigrations --check --dry-run:通过,No changes detected。py -3.12 manage.py test apps.portal --noinput --keepdb --verbosity 2:通过,21 tests OK。py -3.12 manage.py test apps.ai --noinput --keepdb --verbosity 2:通过,26 tests OK。py -3.12 manage.py test apps.api --noinput --keepdb --verbosity 2:通过,39 tests OK。py -3.12 manage.py test apps.billing apps.users --noinput --keepdb --verbosity 2:通过,33 tests OK。py -3.12 manage.py smoke_ai_generation title --recorded:通过,录制标题 smoke OK。py -3.12 manage.py smoke_ai_generation image --recorded:通过,录制图片 smoke OK。py -3.12 manage.py findstatic portal/vendor/bootstrap/bootstrap.min.css portal/vendor/qrcode/qrcode.js --verbosity 1:通过,两个本地 static 文件均可找到。py -3.12 -m compileall apps config:通过。git diff --check:通过,仅 Windows CRLF 提示。
已知限制
- 一次单条
py -3.12 manage.py test --noinput --keepdb --verbosity 2发现 119 tests,已运行 98 tests 后远程 MySQL 在apps.portal.tests.PortalAccountFlowTests.setUpClass阶段连接重置;已通过用例无断言失败。随后按portal/ai/api/billing+users四组拆分,合计同一 119 条测试全部通过。 - 测试阶段仍有 allauth
account.EmailAddress条件唯一约束在 MySQL 上不可创建的models.W036警告;本项目账号邮箱唯一性由user.email唯一约束承担。 - 真实微信/支付宝商户密钥、证书、生产 SDK 依赖和公网回调地址仍待提供;MVP 验收使用 mock 支付路径。
- 真实 AI 上游调用和图片同步真实耗时仍需配置
AI_KEY_ENCRYPTION_KEY、导入真实 AiModel/ModelAlias 后执行;部署超时口径已登记到 T-403。