Sisyphus Agent 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 months ago
..
.gitkeep 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 months ago
ISSUE-001-vendor-shelve.md 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 months ago
ISSUE-002-article-publish.md 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 months ago
ISSUE-003-admin-create-user.md 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 months ago
README.md 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 months ago

README.md

测试问题追踪 — 2026-06-29

测试环境: http://cfc.iwintrue.com:80 测试脚本: e2e_multi_role.py 测试commit: e24e1b3 (cfclub branch) 测试时间: 2026-06-29 14:40 UTC+8 测试账号: admin (13800138000, adminId=7), vendor (13800138001, userId=81069), parent (13800138002)


问题总览

# 问题ID 模块 严重度 状态 发现日期 解决日期
1 ISSUE-001 商品上下架 中 待解决 2026-06-29 —
2 ISSUE-002 文章发布 高 ✅ 已解决 2026-06-29 2026-06-29
3 ISSUE-003 创建用户 中 待解决 2026-06-29 —

ISSUE-001:供应商端商品上下架失败

严重度: 中 状态: 待解决 发现日期: 2026-06-29 模块: 商品管理 / 供应商权限 测试用例: VENDOR-PRODUCT-SHELVE

问题描述

管理员对商品执行「上架」操作成功后,供应商侧再次对同一商品执行「上架」操作失败。

错误信息

[VENDOR-PRODUCT-SHELVE] FAIL code=200 resp={'code': 500, 'message': '商品未通过审核,无法上下架', 'data': None}

复现步骤

  1. 供应商(userId=81069)创建商品 → POST /api/product/create → 状态=pending
  2. 管理员审核通过 → POST /api/admin/product/review (action=approve) → 状态=approved
  3. 管理员上架商品 → POST /api/admin/product/shelve (shelve=true) → 状态=on_shelf
  4. 供应商上架商品 → POST /api/product/shelve (productId=7, action=shelve) → 失败

根因分析

文件: cfc-backend/src/main/java/com/etotem/cfc/service/ProductService.java

// line 122-143
public Result<String> shelve(Long productId, Long vendorId, String action) {
    Product product = productMapper.selectById(productId);
    // ...
    if (!"approved".equals(product.getStatus())) {          // ← BUG
        return Result.error("商品未通过审核,无法上下架");
    }
    // ...
}

供应商调用 shelve 时,商品状态已为 on_shelf(管理员已上架),而非 approved。 ProductService.shelve() 仅允许状态为 approved 时操作,但管理员上架后状态变为 on_shelf,导致供应商无法再次上下架。

正确逻辑:供应商侧上下架应允许状态为 approved(待上架)或 off_shelf(已下架)。

影响范围

  • 供应商无法自主管理商品上下架状态
  • 管理员上架后,供应商只能等待管理员下架才能操作

修复建议

// ProductService.shelve() 中 line 130 修改为:
if (!"approved".equals(product.getStatus()) && !"off_shelf".equals(product.getStatus())) {
    return Result.error("商品未通过审核,无法上下架");
}

ISSUE-002:文章创建后发布失败

严重度: 高 状态: 待解决 发现日期: 2026-06-29 模块: 文章管理 测试用例: ADMIN-ARTICLE-CREATE → ADMIN-ARTICLE-PUBLISH

问题描述

文章创建成功后,获取到的 articleId 为字符串 "创建成功" 而非数字 ID,导致发布时类型转换失败。

错误信息

[ADMIN-ARTICLE-CREATE] OK articleId=创建成功       // ← articleId 应该是数字
[ADMIN-ARTICLE-PUBLISH] FAIL code=200 resp={'code': 400, 'message': 'For input string: "创建成功"', 'data': None}

复现步骤

  1. 管理员登录 → POST /api/admin-auth/login
  2. 创建文章 → POST /api/admin/articles/create → 返回 {"code":200,"message":"success","data":"创建成功"}
  3. 发布文章 → POST /api/admin/articles/publish → 失败(尝试将 "创建成功" 解析为 Long)

根因分析

分析:根据代码 AdminArticleController.create() 应返回 {"id": <articleId>},但实际返回了字符串。

可能原因:

  1. 远程代码版本差异:本地代码可能与部署的远程代码不一致(AdminArticleController 最近有49行修改)
  2. articleService.create() 抛出异常被全局捕获:返回了非标准错误响应
  3. 拦截器/过滤器修改了响应体

影响范围

  • 文章发布流程完全不可用
  • 管理员无法通过 API 发布文章

修复建议

  1. 确认远程 AdminArticleController.java 的 create 方法返回逻辑
  2. 检查是否有全局异常处理器修改了响应格式
  3. 确保 articleService.create() 正确设置 article.id 后再返回

远程代码变更(本地 HEAD vs origin/cfclub)

- AdminArticleController.java: 49 行修改
- AdminController.java: 14 行修改
- ProductController.java: 10 行修改
- VendorController.java: 8 行修改

ISSUE-003:管理员创建用户500错误

严重度: 中 状态: 待解决 发现日期: 2026-06-29 模块: 用户管理 测试用例: ADMIN-CREATE-PARENT

问题描述

管理员通过 POST /api/admin/users/create 创建新用户(phone=13800138002)时返回 HTTP 500。

错误信息

[ADMIN-CREATE-PARENT] FAIL code=500 resp={'timestamp': '2026-06-29T06:40:45.577+00:00', 'error': 'Internal Server Error', 'path': '/api/admin/users/create'}

复现步骤

  1. 管理员登录 → POST /api/admin-auth/login
  2. 创建用户 → POST /api/admin/users/create (phone=13800138002, role=parent, nickname="E2E测试家长")
  3. 失败:返回 Spring Boot 默认 500 错误页面(非业务 Result.error)

根因分析

分析:AdminController.createUser() 逻辑清晰——检查手机号是否已存在 → 新建 User → userMapper.insert(user)。

500 错误(Spring 默认错误页面,非 Result.error)表明是数据库写入异常,可能原因:

  1. 数据库字段约束:phone 字段有唯一索引,但 check constraint 失败
  2. 外键约束:family_id、role 等字段引用不存在的记录
  3. 字段 not null 但未设置默认值:password="" 可能违反 DB 约束
  4. MySQL 触发器异常
  5. 数据库连接池耗尽或超时

影响范围

  • 管理员无法通过管理后台创建新用户
  • 影响自动化测试中的用户创建流程

修复建议

  1. 检查 users 表结构:SHOW CREATE TABLE users;
  2. 检查 password 字段约束(空字符串是否允许)
  3. 查看远程 MySQL 错误日志
  4. 考虑使用 phone 为空或 null 测试边界情况

更新记录

日期 操作人 内容
2026-06-29 Sisyphus 创建问题追踪文档,录入 ISSUE-001/002/003