docs: 补充规格文档(specs 01-15)

This commit is contained in:
2026-09-08 13:39:10 +08:00
parent 4ac8f8b472
commit b12acf7793
16 changed files with 1462 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
# 12 测试、回归与验收
## 模块职责
定义后台 Vue 化的测试层次、跨后端契约回归、版本接口保护和最终删除验收。该 spec 不实现测试代码,只规定后续任务必须覆盖的行为。
## 依赖关系
上游:所有模块 spec;现有 `backend-java` Maven 测试体系;新 `admin-frontend-vue` 构建和测试命令。
相关现有测试/工具:
- `backend-java/src/test/java` 下的权限、控制器和契约测试。
- `frontend-vue/tests` 仅作为客户端工程参考,不得把后台测试混入客户端测试目录。
- 新后台测试放在 `admin-frontend-vue/tests`Java 契约测试放在 `backend-java/src/test/java`
## 核心接口\n\n测试对象包括菜单树、用户/权限 API、业务 API、公开版本接口、Nginx History 路由和 Flask 删除后的流量边界。\n\n## 内部结构\n\n验收分为前端静态检查、前端契约测试、Java API 契约测试、数据库迁移测试、真实 HTTP 验收和最终删除验收六层。\n\n## 类型映射\n\n测试夹具需要覆盖 `AdminMenuNode`、`AdminUser`、分页结果、任务状态、版本公开响应和空值响应。\n\n## 迁移/实现注意事项\n\n先冻结旧快照,再执行迁移和新实现回归;任何客户端版本接口差异都阻断 Flask 删除和 `/admin` 正式切换。\n\n## 测试层次
### 前端静态和类型检查
- Vue/TypeScript 类型检查零错误。
- Vite 构建成功,产出 `dist/index.html` 和所有 assets。
- 构建产物中的 base 路径全部为 `/admin-vue/`
- 页面模块按路由拆 chunk。
- 工程不引用客户端 `frontend-vue/new_web_source`
### 前端单元/契约测试
至少覆盖:
- 菜单树扁平节点组装为树。
- 分组节点无 route 时不可作为页面进入。
- 当前用户无菜单时展示空状态。
- 非超级管理员访问无权限 route 时跳到第一个有权限页面。
- 超级管理员可访问有效 admin 菜单。
- 401 跳转登录。
- API `{data}``{item}``{items}` 归一化。
- 分页字段边界、空列表、请求失败。
- 退出登录清理 Pinia 状态。
- 上传/导入/下载终态和重复点击保护。
### Java API 契约测试
至少覆盖:
- `/api/admin/current-user` 返回当前用户的 `item`
- `/api/admin/current-user/menus` 只返回有效 admin 菜单树。
- 树节点 `key``route``name` 和 parent-child 关系正确。
- 普通用户、管理员、超级管理员菜单不同且不越权。
- `/api/version` 字段为 `version/desc/url`
- `/api/version/latest` 字段为 `version/file_url`
- `web_config` 无记录返回两个 null。
- 多条版本记录按创建时间和 id 稳定取最新。
- 不带登录态访问需鉴权的 admin API 被拒绝。
### Flyway/数据库测试
- 迁移后所有 admin 菜单 route_path 唯一。
- `column_key` 不被改写。
- 用户直接授权记录数量不减少。
- 父菜单授权的有效子菜单展开语义保持一致。
- 重复执行迁移不会产生重复菜单或重复授权。
### Nginx/真实 HTTP 验收
- `/admin` 返回 302 到 `/admin-vue/`
- `/admin-vue/` 返回 HTML。
- `/admin-vue/account/users` 刷新仍返回 HTML。
- assets 正常返回正确 MIME。
- 不存在 assets 返回 404。
- `/api/admin/current-user` Cookie 能透传到 Java。
- `/api/version/latest` 在 Flask 停止后仍可访问。
## 迁移前后对比
必须保存以下快照:
- 旧后台每个角色可见菜单 key。
- 新菜单树每个角色可见菜单 key。
- 版本公开接口响应。
- 每个业务面板主要列表字段和分页语义。
- 关键导入/导出/下载错误场景。
允许变化:
- 菜单显示分组。
- Vue route path。
- 页面布局和交互流程。
- 前端组件实现。
不允许变化:
- 客户端版本接口路径和字段。
- 后端业务 API 路径,除非另有独立迁移决策。
- 用户菜单权限的实际范围。
- 数据删除、导入、导出和任务终态语义。
## 最终验收清单
1. `admin-frontend-vue` 构建和测试通过。
2. Java 编译、单测、契约测试通过。
3. Flyway 在测试库执行成功。
4. 17 个后台业务页面均有 Vue 对应页面或明确的验收记录。
5. `/admin` 已稳定重定向 `/admin-vue/`
6. Nginx History 刷新和 assets 404 语义正确。
7. `/api/version/latest` 已完成真实客户端兼容验证。
8. Flask 管理页面和管理 API 已无生产流量。
9.`admin.html``admin.js``admin-interactions.js` 已删除。
10. 客户端 `frontend-vue``new_web_source` 未被后台工程污染。