test(删除): 添加删除单测并修复中间件测试

新增 AdminService 删除路径单元测试与规范场景更新\n同步调整 Google API Key 中间件测试桩与签名
This commit is contained in:
yangjianbo
2025-12-29 15:01:19 +08:00
parent 100d9d2034
commit f6de36cb04
5 changed files with 558 additions and 10 deletions

View File

@@ -0,0 +1,13 @@
# Change: Add unit tests for delete paths (user/group/proxy/redeem)
## Why
删除流程缺少单元测试,容易在重构或边界条件变化时回归,且问题排查成本高。
## What Changes
- 新增服务层删除流程单元测试(覆盖 AdminService 删除入口与对应 Repo 错误传播)
- 覆盖成功/不存在/权限保护/幂等删除/底层错误等关键分支
- 需要的轻量测试替身repositories / cache
## Impact
- Affected specs: testing (new)
- Affected code: backend/internal/service/admin_service.go

View File

@@ -0,0 +1,63 @@
## ADDED Requirements
### Requirement: Delete path unit coverage
服务层删除流程 SHALL 具备单元测试覆盖用户、分组、代理、兑换码等资源的关键分支,且覆盖 AdminService 删除入口的权限保护、幂等删除与错误传播。
#### Scenario: User delete success
- **WHEN** 删除存在的用户
- **THEN** 返回成功且仓储删除被调用
#### Scenario: User delete not found
- **WHEN** 删除不存在的用户
- **THEN** 返回未找到错误
#### Scenario: User delete propagates errors
- **WHEN** 删除用户时仓储返回错误
- **THEN** 错误被向上返回且不吞掉
#### Scenario: User delete rejects admin accounts
- **WHEN** 删除管理员用户
- **THEN** 返回拒绝删除的错误
#### Scenario: Group delete success
- **WHEN** 删除存在的分组
- **THEN** 返回成功且仓储级联删除被调用
#### Scenario: Group delete not found
- **WHEN** 删除不存在的分组
- **THEN** 返回 ErrGroupNotFound
#### Scenario: Group delete propagates errors
- **WHEN** 删除分组时仓储返回错误
- **THEN** 错误被向上返回且不吞掉
#### Scenario: Proxy delete success
- **WHEN** 删除存在的代理
- **THEN** 返回成功且仓储删除被调用
#### Scenario: Proxy delete is idempotent
- **WHEN** 删除不存在的代理
- **THEN** 不返回错误且调用删除流程
#### Scenario: Proxy delete propagates errors
- **WHEN** 删除代理时仓储返回错误
- **THEN** 错误被向上返回且不吞掉
#### Scenario: Redeem code delete success
- **WHEN** 删除存在的兑换码
- **THEN** 返回成功且仓储删除被调用
#### Scenario: Redeem code delete is idempotent
- **WHEN** 删除不存在的兑换码
- **THEN** 不返回错误且调用删除流程
#### Scenario: Redeem code delete propagates errors
- **WHEN** 删除兑换码时仓储返回错误
- **THEN** 错误被向上返回且不吞掉
#### Scenario: Batch redeem code delete success
- **WHEN** 批量删除兑换码且全部成功
- **THEN** 返回删除数量等于输入数量且不返回错误
#### Scenario: Batch redeem code delete partial failures
- **WHEN** 批量删除兑换码且部分失败
- **THEN** 返回删除数量小于输入数量且不返回错误

View File

@@ -0,0 +1,11 @@
## 1. Implementation
- [x] 1.1 为 AdminService 删除入口准备测试替身user/group/proxy/redeem repo 与 cache
- [x] 1.2 新增 AdminService.DeleteUser 单元测试(成功/不存在/错误传播/管理员保护)
- [x] 1.3 新增 AdminService.DeleteGroup 单元测试(成功/不存在/错误传播,缓存失效逻辑如适用)
- [x] 1.4 新增 AdminService.DeleteProxy 单元测试(成功/幂等删除/错误传播)
- [x] 1.5 新增 AdminService.DeleteRedeemCode 与 BatchDeleteRedeemCodes 单元测试(成功/幂等删除/错误传播/部分失败)
- [x] 1.6 运行 unit 测试并将结果记录在本 tasks.md 末尾
## Test Results
- `go test -tags=unit ./internal/service/...` (workdir: `backend`)
- ok github.com/Wei-Shaw/sub2api/internal/service 0.475s