test: 补充单元测试并修复 urlencoding 解码 bug

- auth.rs 新增 JWT 生成/验证回环、篡改拒绝、refresh token 随机性、临时 token 有效期测试
- payment.rs 新增套餐定义、URL 解码、支付宝表单解析(UTF-8/GBK)、RSA2 签名验签、UA 检测测试
- 修复 urlencoding 两个真实 bug:UTF-8 多字节序列乱码、不完整转义吞字符
- 移除 db.rs 悬空 doc 注释,修复 auth.rs 冗余引用(clippy 0 警告)
- cargo test 从 2 个增至 36 个全过
- 同步 IMPROVEMENTS.md(索引/重复查询/测试覆盖/公告系统状态)
This commit is contained in:
2026-08-14 13:08:50 +08:00
parent 366d62f262
commit 3cce81321f
5 changed files with 284 additions and 29 deletions

View File

@@ -280,18 +280,20 @@ DROP TABLE IF EXISTS invitation_codes;
- 完成时间2026-04-15
### 1.2 数据库操作优化
- [ ] **重复查询问题**
- [x] **重复查询问题**
- 位置:`insert_weather_data` 中多次查询用户信息
- 改进:合并查询或使用缓存
- 影响:减少数据库负载
- 状态:`get_user_quota` 已合并为单次查询(见 `db.rs` 顶部注释2026-08-11 复核无遗留 N+1
- [ ] **缺少数据库索引**
- 现状:未见索引定义
- 改进:添加常用查询字段索引
- [x] **缺少数据库索引**
- 状态:`migrations/006_add_performance_indexes.sql` 已添加
```sql
CREATE INDEX idx_weather_data_user_id ON weather_data(user_id);
CREATE INDEX idx_weather_data_date ON weather_data(date);
CREATE INDEX idx_weather_data_date ON weather_data(date DESC);
CREATE INDEX idx_weather_data_user_favorite ON weather_data(user_id, is_favorite);
CREATE INDEX idx_weather_data_user_date ON weather_data(user_id, date DESC);
CREATE INDEX idx_users_openid ON users(openid);
CREATE INDEX idx_payment_orders_status ON payment_orders(status);
```
### 1.3 错误处理改进
@@ -422,13 +424,13 @@ DROP TABLE IF EXISTS invitation_codes;
## 五、开发体验改进
### 5.1 测试覆盖
- [ ] **仅有一个基础编译测试**
- 现状:`tests/integration_test.rs` 只有 `assert_eq!(2 + 2, 4)`
- 改进:添加完整的测试套件
- 类型:
- 单元测试:工具函数、数据结构
- 集成测试API 端点
- 数据库测试CRUD 操作
- [~] **基础测试不足**2026-08-11 已补充单元测试)
- 现状:原仅有 `tests/integration_test.rs` 的编译测试和套餐一致性测试
- 已补充(`cargo test` 共 36 用例):
- `src/auth.rs`JWT 生成/验证回环、篡改拒绝、错误密钥拒绝、refresh token 随机性、临时 token 有效期
- `src/handlers/payment.rs`套餐定义、URL 解码(**修复了 UTF-8 乱码与吞字符两个真实 bug**、支付宝表单解析UTF-8/GBK、RSA2 签名/验签回环PEM + Base64 DER 密钥)、移动端 UA 检测、订单号唯一性
- `src/rate_limiter.rs`限流阈值、按客户端隔离、IP 提取(已有)
- 待做API 集成测试(需要测试数据库)
- [ ] **缺少 API 测试**
- 需求:验证 API 行为
@@ -1369,6 +1371,9 @@ async onRedeemCode() {
## 十四、公告系统
> **状态**:✅ 已实现2026-05`handlers/notifications.rs` + 迁移 `011_add_notifications.sql`,前端 `pkg-extra/notifications` 页面)
> 下方为原始设计文档,保留供参考。
### 功能概述
公告系统用于向用户发送系统公告,支持管理员发布、编辑、删除公告,用户查看公告列表和详情。