library-picturebook-activity/docs/project/09-test-results.md
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

102 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 测试执行结果报告
## 执行时间2026-03-24
---
## 一、测试发现的问题及修复
### 共发现 4 个 Bug全部已修复
| 编号 | 严重度 | 问题描述 | 根因 | 修复方式 |
|------|--------|---------|------|---------|
| BUG-01 | **致命** | 创建活动时 visibility/targetCities/ageMin/ageMax 字段未写入数据库,创建后全是默认值 `designated` | `contests.service.ts` 的 create 方法中遗漏了新增字段的赋值 | 在 create data 中添加 `visibility`, `targetCities`, `ageMin`, `ageMax` 字段赋值 |
| BUG-02 | **致命** | 创建 `targeted` 类型活动时 DTO 校验报错 "visibility must be one of the following values: public, designated, internal" | `Visibility` 枚举中缺少 `TARGETED = 'targeted'` | 在 `create-contest.dto.ts` 的 Visibility 枚举中添加 `TARGETED` |
| BUG-03 | **高** | 公众端登录用户访问活动列表时targeted 活动不根据用户画像过滤(返回 0 条) | `@Public()` 装饰器让 JwtAuthGuard 完全跳过 JWT 解析,导致 `req.user` 始终为空 | 重写 `JwtAuthGuard``@Public()` 接口有 Bearer token 时仍解析 JWT但不强制要求 |
| BUG-04 | **高** | 报名 targeted 活动返回 404 "活动不存在或未公开" | `registerActivity` 方法中活动查询条件硬编码 `visibility: 'public'`,未包含 `targeted` | 改为 `visibility: { in: ['public', 'targeted'] }` |
### 同步修复update 接口
| 问题 | 修复 |
|------|------|
| 编辑活动时 visibility/targetCities/ageMin/ageMax 不会更新 | 在 update 方法中添加这 4 个字段的处理逻辑 |
---
## 二、数据库测试结果
| 编号范围 | 测试项数 | 通过 | 失败 | 说明 |
|---------|---------|------|------|------|
| DB-01 ~ DB-12 | 12 | 12 | 0 | 表结构、约束、默认值全部正确 |
| DB-13 ~ DB-18 | 6 | 6 | 0 | 租户、角色、权限数据完整 |
| DB-19 ~ DB-23 | 5 | 5 | 0 | 菜单分配正确 |
| **合计** | **23** | **23** | **0** | |
---
## 三、后端 API 测试结果
| 编号范围 | 模块 | 测试项数 | 通过 | 修复后通过 |
|---------|------|---------|------|-----------|
| API-01 ~ API-10 | 公众认证 | 8(已测) | 8 | - |
| API-11 ~ API-20 | 子女管理 | 6(已测) | 6 | - |
| API-21 ~ API-30 | 活动浏览 | 5(已测) | 3 | 5修复 BUG-03 后) |
| API-31 ~ API-35 | 定向推送 | 3(已测) | 0 | 3修复 BUG-03 后) |
| API-36 ~ API-48 | 活动报名 | 7(已测) | 5 | 7修复 BUG-04 后) |
| API-57 ~ API-60 | 我的数据 | 2(已测) | 2 | - |
| API-61 ~ API-64 | 公众用户管理 | 2(已测) | 2 | - |
| API-65 ~ API-69 | 管理端认证 | 4(已测) | 4 | - |
| **已测合计** | | **37** | **30** | **37** |
### 待执行的 API 测试
以下测试项因需要特定数据状态(报名通过后才能测提交),留到全链路测试中覆盖:
- API-49~56: 作品提交(需要报名通过状态)
- API-04, API-06, API-07: 注册边界(密码太短、手机号、手机号重复)
- API-15~20: 子女详情/更新/删除完整测试
---
## 四、已修复文件清单
| 文件 | 修改内容 |
|------|---------|
| `backend/src/contests/contests/dto/create-contest.dto.ts` | Visibility 枚举添加 `TARGETED` |
| `backend/src/contests/contests/contests.service.ts` | create 方法添加 visibility/targetCities/ageMin/ageMaxupdate 方法添加同样 4 个字段 |
| `backend/src/auth/guards/jwt-auth.guard.ts` | @Public() 接口有 token 时尝试解析 JWT不强制 |
| `backend/src/public/public.service.ts` | registerActivity 活动查询条件支持 targeted |
---
## 五、待执行测试
### 前端测试FE-01 ~ FE-92
需要在浏览器中手动执行,建议按以下顺序:
1. 公众端登录/注册FE-01~09
2. 活动大厅FE-10~15
3. 活动详情按钮状态FE-16~35
4. 个人中心 + 子女管理FE-36~48
5. 管理端登录FE-57~61
6. 超管端FE-62~80
7. 广东省图端FE-81~86
8. 评委端FE-87~92
9. 响应式FE-53~56
### 全链路测试4.1 ~ 4.4
需要按照测试方案中的步骤跨端执行完整业务流程。
---
## 六、测试环境
| 项目 | 值 |
|------|-----|
| 后端 | http://localhost:3234 |
| 前端 | http://localhost:3000 |
| 数据库 | mysql://root@localhost:3306/competition_management |
| 测试活动 | ID=1(公开), ID=2(仅内部), ID=3(定向广州6-12岁) |
| 测试用户 | testuser01(广州,有子女), beijing_user(北京), demo(默认) |