feat(account): 实现平台账号管理功能
- 新增平台账号列表查询接口(自动筛选超级管理员和平台用户) - 新增密码修改和状态切换专用接口 - 增强角色分配功能,支持空数组清空所有角色 - 新增超级管理员保护机制,禁止分配角色 - 新增完整的集成测试和OpenSpec规范文档
This commit is contained in:
@@ -14,7 +14,7 @@ import (
|
||||
"github.com/break/junhong_cmp_fiber/internal/model"
|
||||
)
|
||||
|
||||
// SetupTestDB 设置测试数据库和 Redis
|
||||
// SetupTestDB 设置测试数据库和 Redis(使用事务)
|
||||
func SetupTestDB(t *testing.T) (*gorm.DB, *redis.Client) {
|
||||
t.Helper()
|
||||
|
||||
@@ -42,11 +42,15 @@ func SetupTestDB(t *testing.T) (*gorm.DB, *redis.Client) {
|
||||
t.Fatalf("数据库迁移失败: %v", err)
|
||||
}
|
||||
|
||||
// 连接测试 Redis(使用远程 Redis)
|
||||
txDB := db.Begin()
|
||||
if txDB.Error != nil {
|
||||
t.Fatalf("开启事务失败: %v", txDB.Error)
|
||||
}
|
||||
|
||||
redisClient := redis.NewClient(&redis.Options{
|
||||
Addr: "cxd.whcxd.cn:16299",
|
||||
Password: "cpNbWtAaqgo1YJmbMp3h",
|
||||
DB: 15, // 使用测试数据库
|
||||
DB: 15,
|
||||
})
|
||||
|
||||
ctx := context.Background()
|
||||
@@ -54,35 +58,28 @@ func SetupTestDB(t *testing.T) (*gorm.DB, *redis.Client) {
|
||||
t.Skipf("跳过测试:无法连接 Redis: %v", err)
|
||||
}
|
||||
|
||||
// 清空 Redis 测试数据库
|
||||
redisClient.FlushDB(ctx)
|
||||
testPrefix := fmt.Sprintf("test:%s:", t.Name())
|
||||
keys, _ := redisClient.Keys(ctx, testPrefix+"*").Result()
|
||||
if len(keys) > 0 {
|
||||
redisClient.Del(ctx, keys...)
|
||||
}
|
||||
|
||||
return db, redisClient
|
||||
return txDB, redisClient
|
||||
}
|
||||
|
||||
// TeardownTestDB 清理测试数据库
|
||||
// TeardownTestDB 清理测试数据库(回滚事务)
|
||||
func TeardownTestDB(t *testing.T, db *gorm.DB, redisClient *redis.Client) {
|
||||
t.Helper()
|
||||
|
||||
// 清空测试数据
|
||||
ctx := context.Background()
|
||||
db.Exec("TRUNCATE TABLE tb_account_role CASCADE")
|
||||
db.Exec("TRUNCATE TABLE tb_role_permission CASCADE")
|
||||
db.Exec("TRUNCATE TABLE tb_account CASCADE")
|
||||
db.Exec("TRUNCATE TABLE tb_role CASCADE")
|
||||
db.Exec("TRUNCATE TABLE tb_permission CASCADE")
|
||||
db.Exec("TRUNCATE TABLE tb_shop CASCADE")
|
||||
db.Exec("TRUNCATE TABLE tb_enterprise CASCADE")
|
||||
db.Exec("TRUNCATE TABLE tb_personal_customer CASCADE")
|
||||
|
||||
// 清空 Redis
|
||||
redisClient.FlushDB(ctx)
|
||||
|
||||
// 关闭连接
|
||||
sqlDB, _ := db.DB()
|
||||
if sqlDB != nil {
|
||||
_ = sqlDB.Close()
|
||||
testPrefix := fmt.Sprintf("test:%s:", t.Name())
|
||||
keys, _ := redisClient.Keys(ctx, testPrefix+"*").Result()
|
||||
if len(keys) > 0 {
|
||||
redisClient.Del(ctx, keys...)
|
||||
}
|
||||
|
||||
db.Rollback()
|
||||
|
||||
_ = redisClient.Close()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user