合并 main 分支并融合订单列表最小化与 SQL 治理
- Auth/权限中间件取 main 演进版(错误细分、token 来源),保留 dev 的用户 cookie 与登出撤销语义 - 后台订单列表:融合 main 的首页免 COUNT 优化与关键词索引路由,保留 dev 的最小化 AdminOrderListItemDTO(结账明细仍由详情接口返回,同步调整对应集成测试) - 保留 dev 的 token_version 冻结/解冻递增与 main 的状态变化判断及通知 - 前端:保留 dev 登出接口与 main 的 fetchMe silent 参数、SSE 登录跳转;后台订单表按 dev 最小化 DTO 移除号主到手列
This commit is contained in:
@@ -293,6 +293,39 @@ func TestAdjustWalletInsufficientBalance(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestFreezeAndUnfreezeBumpUserTokenVersion(t *testing.T) {
|
||||
db := setupAdminUserTestDB(t)
|
||||
// 显式给出版本起点,避免 GORM 对零值字段应用 default:1 造成歧义。
|
||||
user := model.User{Phone: "13900000006", Status: "active", TokenVersion: 1}
|
||||
if err := db.Create(&user).Error; err != nil {
|
||||
t.Fatalf("创建用户失败:%v", err)
|
||||
}
|
||||
|
||||
repo := NewRepository(db)
|
||||
got, err := repo.Freeze(t.Context(), 66, user.ID, FreezeRequest{Reason: "风险处置"}, AuditMeta{})
|
||||
if err != nil {
|
||||
t.Fatalf("冻结用户失败:%v", err)
|
||||
}
|
||||
var saved model.User
|
||||
if err := db.First(&saved, user.ID).Error; err != nil {
|
||||
t.Fatalf("查询冻结用户失败:%v", err)
|
||||
}
|
||||
if got.Status != "frozen" || saved.TokenVersion != 2 {
|
||||
t.Fatalf("冻结后状态/版本 = %s/%d, want frozen/2", got.Status, saved.TokenVersion)
|
||||
}
|
||||
|
||||
got, err = repo.Unfreeze(t.Context(), 66, user.ID, AuditMeta{})
|
||||
if err != nil {
|
||||
t.Fatalf("解冻用户失败:%v", err)
|
||||
}
|
||||
if err := db.First(&saved, user.ID).Error; err != nil {
|
||||
t.Fatalf("查询解冻用户失败:%v", err)
|
||||
}
|
||||
if got.Status != "active" || saved.TokenVersion != 3 {
|
||||
t.Fatalf("解冻后状态/版本 = %s/%d, want active/3", got.Status, saved.TokenVersion)
|
||||
}
|
||||
}
|
||||
|
||||
func setupAdminUserTestDB(t *testing.T) *gorm.DB {
|
||||
t.Helper()
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
|
||||
Reference in New Issue
Block a user