8.4 KiB
8.4 KiB
P1/P2 可执行修复工单(文件级)
总览
| 工单ID | 优先级 | 主题 | 当前状态 |
|---|---|---|---|
| MOSQ-P1-001 | P1 | E2E 严格断言,消除 401/异常吞掉导致假绿 | 已修复(2026-03-20) |
| MOSQ-P1-002 | P1 | 解封关键集成测试(去 Disabled + 取消 surefire 排除) | 已落地 |
| MOSQ-P2-001 | P2 | 审批失败回滚的 anonymous 容错不应吞异常 | 已落地 |
| MOSQ-P2-002 | P2 | AuthService demo fallback 与硬编码 demo hash 清理 | 已落地 |
| MOSQ-P2-003 | P2 | 权限迁移测试CI可信度(CI已配置strict模式) | 已落地 |
| MOSQ-P2-004 | P2 | 生产环境风控前置检查文档 | 已补充(2026-03-20) |
MOSQ-P1-001:E2E 严格断言修复
目标
- 禁止
user-journey用例吞掉 API 错误后仍通过。 - 无真实凭证时必须“显式跳过”,有真实凭证时必须“严格断言 2xx”。
文件级变更步骤
- 修改
frontend/e2e/fixtures/test-data.ts
- 新增
TestData.userToken字段。 - 新增
hasRealApiCredentials(),用于判断是否真实凭证(非占位值)。 apiClient使用testData.userToken,不再硬编码test-e2e-token。
- 修改
frontend/e2e/tests/user-journey.spec.ts
- 在核心旅程用例
beforeEach增加test.skip(!hasRealApiCredentials(...))。 - 去除 API 步骤中的
try/catch吞错逻辑。 - 为关键 API(活动列表/详情/统计/排行榜/短链/分享)增加强断言。
- 修改
frontend/e2e/tests/user-journey-fixed.spec.ts
- 同步改为严格断言模式。
- 无真实凭证显式
skip,不允许“日志告警后通过”。
测试用例
- 语法与装配检查
- 命令:
cd frontend/e2e && npx playwright test --config playwright.config.ts --list
- 实际:27 条测试分布在6个文件中(api-smoke、h5-user-operations、simple-health、user-frontend-operation、user-journey、user-journey-fixed)。
- 无真实凭证场景
- 命令:
cd frontend/e2e && npx playwright test tests/user-journey-fixed.spec.ts --config playwright.config.ts --reporter=line
- 预期:相关测试
skipped(显式),0 条"假通过"。
- 有真实凭证场景(环境准备后)
- 命令:
cd frontend/e2e && npx playwright test --config playwright.config.ts
- 预期:关键 API 步骤必须返回断言状态(200/201/3xx);出现 401/500 直接失败。
回滚策略
- 仅回退以下文件到修复前版本:
frontend/e2e/fixtures/test-data.tsfrontend/e2e/tests/user-journey.spec.tsfrontend/e2e/tests/user-journey-fixed.spec.ts
工时评估
- 开发:1.5h
- 验证:0.5h
- 合计:2.0h
验收标准
- 不存在
try/catch + console.warn/console.log吞 API 失败并继续通过的路径。 - 无凭证时是“显式 skipped”;有凭证时是“严格断言”。
MOSQ-P1-002:关键集成测试解封
目标
- 移除
SimpleApiIntegrationTest禁用状态。 - 取消 surefire 对关键集成测试的默认排除。
- 通过测试桩修复认证链路,避免解封即失败。
文件级变更步骤
- 修改
src/test/java/com/mosquito/project/integration/AbstractIntegrationTest.java
- 注入
@MockBean AuthService。 @BeforeEach中 mock:validateToken(...) -> TokenInfo(10001L, ...)getUserById(...) -> UserInfo(...)
- 导入
TestSecurityConfig以稳定集成测试安全链路。
- 修改
src/test/java/com/mosquito/project/integration/SimpleApiIntegrationTest.java
- 删除
@Disabled注解。
- 修改
pom.xml
- 从
maven-surefire-plugin的excludes中移除:SimpleApiIntegrationTestShortLinkRedirectIntegrationTestActivityAnalyticsServiceIntegrationTestActivityServiceCacheTest
测试用例
- P1 定向回归
- 命令:
mvn -q -Dtest=SimpleApiIntegrationTest,ShortLinkRedirectIntegrationTest,ActivityAnalyticsServiceIntegrationTest,ActivityServiceCacheTest test
- 预期:
SimpleApiIntegrationTesttests=6 failures=0 errors=0ShortLinkRedirectIntegrationTesttests=1 failures=0 errors=0ActivityAnalyticsServiceIntegrationTesttests=3 failures=0 errors=0ActivityServiceCacheTesttests=1 failures=0 errors=0
- 全链路回归(CI 脚本)
- 命令:
./scripts/ci/backend-verify.sh
- 预期:P1 改动相关测试不过不应引入新失败。
- 当前观察:存在既有非 P1 阻断项
PermissionCanonicalMigrationTestSQL 方言问题(H2 对REGEXP不兼容)。
回滚策略
- 仅回退以下文件:
src/test/java/com/mosquito/project/integration/AbstractIntegrationTest.javasrc/test/java/com/mosquito/project/integration/SimpleApiIntegrationTest.javapom.xml
工时评估
- 开发:1.0h
- 验证:1.0h
- 合计:2.0h
验收标准
SimpleApiIntegrationTest不再被@Disabled。- surefire 不再默认跳过上述 4 个关键集成测试。
- 定向回归全部通过。
MOSQ-P2-001:审批失败回滚 anonymous 容错
目标
- 审批流失败补偿中,不再吞掉写审计失败异常;至少记录 warn 并携带上下文。
文件级变更步骤
- 修改
src/main/java/com/mosquito/project/controller/ApiKeyController.java
- 定位审批失败回滚分支(当前
catch (Exception ignore))。 - 改为:
- 捕获后
log.warn(...)(包含approvalRecordId/apiKeyId/operator)。 - 不影响主流程返回,但避免 silent failure。
- 捕获后
- 新增或修改测试
- 推荐新增:
src/test/java/com/mosquito/project/controller/ApiKeyControllerTest.java - 覆盖“审计写入异常但接口仍可预期返回”场景,并断言日志/行为。
测试用例
mvn -q -Dtest=ApiKeyControllerTest test
回滚策略
- 回退
ApiKeyController和新增测试文件。
工时评估
- 开发:0.5h
- 验证:0.5h
- 合计:1.0h
验收标准
- 代码中不存在该处
catch (Exception ignore)。 - 单测覆盖该容错路径。
MOSQ-P2-002:移除 demo fallback 与硬编码 demo hash
目标
- 彻底去除 demo 认证分支和硬编码 hash,认证只依赖真实用户体系。
文件级变更步骤
- 修改
src/main/java/com/mosquito/project/service/AuthService.java
- 删除
ADMIN_HASH/OPERATOR_HASH常量。 - 删除
verifyDemoUser/getDemoUserId/getDemoUserDisplayName及调用路径。 login在用户不存在时统一返回认证失败。
- 补充测试
- 修改/新增
src/test/java/com/mosquito/project/service/AuthServiceTest.java - 覆盖:
- 用户不存在 -> 认证失败
- 后端不再读取
app.demo-auth.*配置(配置项已清理)
测试用例
mvn -q -Dtest=AuthServiceTest test
回滚策略
- 回退
AuthService与相关测试改动。
工时评估
- 开发:1.0h
- 验证:0.5h
- 合计:1.5h
验收标准
- 主代码不存在硬编码 demo 凭据。
- 不存在"用户不存在时走 demo fallback"的认证分支。
MOSQ-P2-003:权限迁移测试CI可信度
目标
- CI环境中确保权限迁移测试不被跳过,提升测试可信度。
现状
RolePermissionMigrationTest使用Assumptions.assumeTrue()在无Docker环境下跳过测试- CI脚本
scripts/ci/backend-verify.sh已配置-Dmigration.test.strict=true - 在无Docker本地环境中测试仍会被跳过,这是预期行为
文件级变更步骤
无需代码修改,CI配置已正确。
测试用例
- CI环境验证
- 命令:
./scripts/ci/backend-verify.sh - 预期:
RolePermissionMigrationTest在CI中不被跳过
验收标准
- CI中
RolePermissionMigrationTest必须执行,不被跳过。
MOSQ-P2-004:生产环境风控前置检查
目标
- 补充生产环境部署前的风控检查清单文档。
文件级变更
- 新增文档:
docs/PRODUCTION_RISK_CHECKLIST.md
检查清单内容
-
认证与授权检查
- 所有管理接口已配置权限验证
- API Key认证已启用
- CORS配置已限制可信域名
-
数据安全检查
- 敏感数据已加密存储
- 数据库连接已使用SSL
- 审计日志已启用
-
风控规则检查
- 风险规则已配置并启用
- 限流规则已配置
- 黑名单机制已就绪
-
监控与告警检查
- 健康检查接口已配置
- 异常告警已配置
- 日志收集已配置
验收标准
- 文档
docs/PRODUCTION_RISK_CHECKLIST.md已创建并包含上述检查项。