3.4 KiB
3.4 KiB
222 Admin:修复 AI 服务商配置新增后未落库
- 类型:缺陷
- 父级大工单:#14
- 所属 MVP / 版本:#199 / AI规格批量匹配
- 状态:已完成,待用户验收
- 日期:2026-08-14
- Gitea 工单:#222
背景与目标
管理员在“AI 配置”提交合法服务商信息后,页面执行正常的 303 See Other 跳转,但新增
配置没有落库,因而无法继续保存 API Key、测试连接和启用。目标是恢复新增流程,并让默认
测试在不依赖真实 MySQL 时也能捕获 SQL 参数数量错误。
最终方案
InsertAIProvider 的字段列表在两个固定值后只剩创建人、更新人、创建时间和更新时间四个
字段,原 SQL 却提供了五个尾部占位符。现已把尾部占位符改为四个,使总计 11 个占位符与
11 个实参逐项对应。
新增轻量假 Execer 测试,在默认测试环境核对占位符数量、参数数量、参数顺序以及固定的
enabled=0、last_test_status='pending'。另增加 MySQL 集成用例验证新增、列表回显、
create 审计、重名拒绝和失败事务一致性,并增加 Web 测试区分成功/校验失败的 303 跳转与
数据库异常的 500 响应。
本次没有数据库结构变化,不增加迁移,也不改变 API Key 的独立密钥存储流程。此前失败的 新增请求没有成功提交,不需要清理数据。
改了哪些
admin/repository/ai_config.go:修正新增配置 INSERT 占位符数量。admin/repository/ai_config_test.go:增加无需数据库的 SQL 参数契约测试。admin/service/ai_config_test.go:增加真实 MySQL 新增、审计、查询、重名和事务测试。admin/handler/web/ai_config_test.go:增加 303 成功/错误参数、500 数据库异常以及真实 MySQL 页面提交后的列表回显测试。
验收结果
| 验收标准 | 结果 |
|---|---|
| 合法配置可以执行参数数量正确的 INSERT,跳转后可由列表查询 | 通过;真实 MySQL 项已编写但当前环境跳过 |
| 默认测试保护占位符数量和字段参数顺序 | 通过 |
| 配置与 create 审计同事务,失败不留半条数据 | 通过;真实 MySQL 项已编写但当前环境跳过 |
| 重名和非法输入不新增并给出明确错误 | 通过;重名真实 MySQL项当前环境跳过 |
| 成功 303 使用 msg,校验失败使用 error,数据库异常返回 500 | 通过 |
| 不改 schema 和 API Key 独立保存流程 | 通过 |
| 固定 Go 1.23.0 的 build、test、vet | 通过 |
测试
- 执行的命令:
go test ./repository ./service ./handler/web -run 'Test(InsertAIProvider|SaveAIProviderConfig|RedirectAIConfig|AIConfigSave_)' -count=1 -v$env:GOTOOLCHAIN='go1.23.0'; go build ./...; go test ./... -count=1; go vet ./...git diff --check
- 结果:默认 SQL 契约和 Web 回归测试通过;固定 Go 1.23.0 的完整构建、测试和 vet 通过。 MySQL 专项用例被测试套件发现,并在未设置测试库开关时明确跳过。
- 没验证到的部分:当前环境没有启用
CMAUTOBUY_MYSQL_TEST=1的独立 MySQL 8.4_test基础库,因此没有实际执行新增、审计和列表回显集成用例;没有使用生产库代替。 未在用户当前浏览器中重新提交表单进行人工验收。
相关提交
01469f7fix: 修复 AI 服务商配置新增失败 (#222)