All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m35s
新增功能: - 店铺佣金查询:店铺佣金统计、店铺佣金记录列表、店铺提现记录 - 佣金提现审批:提现申请列表、审批通过、审批拒绝 - 提现配置管理:配置列表、新增配置、获取当前生效配置 - 企业管理:企业列表、创建、更新、删除、获取详情 - 企业卡授权:授权列表、批量授权、批量取消授权、统计 - 客户账号管理:账号列表、创建、更新状态、重置密码 - 我的佣金:佣金统计、佣金记录、提现申请、提现记录 数据库变更: - 扩展 tb_commission_withdrawal_request 新增提现单号等字段 - 扩展 tb_account 新增 is_primary 字段 - 扩展 tb_commission_record 新增 shop_id、balance_after - 扩展 tb_commission_withdrawal_setting 新增每日提现次数限制 - 扩展 tb_iot_card、tb_device 新增 shop_id 冗余字段 - 新建 tb_enterprise_card_authorization 企业卡授权表 - 新建 tb_asset_allocation_record 资产分配记录表 - 数据迁移:owner_type 枚举值 agent 统一为 shop 测试: - 新增 7 个单元测试文件覆盖各服务 - 修复集成测试 Redis 依赖问题
104 lines
2.4 KiB
Go
104 lines
2.4 KiB
Go
package testutils
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"testing"
|
||
"time"
|
||
|
||
"github.com/redis/go-redis/v9"
|
||
"gorm.io/driver/postgres"
|
||
"gorm.io/gorm"
|
||
"gorm.io/gorm/logger"
|
||
|
||
"github.com/break/junhong_cmp_fiber/internal/model"
|
||
)
|
||
|
||
// SetupTestDB 设置测试数据库和 Redis(使用事务)
|
||
func SetupTestDB(t *testing.T) (*gorm.DB, *redis.Client) {
|
||
t.Helper()
|
||
|
||
// 连接测试数据库(使用远程数据库)
|
||
dsn := "host=cxd.whcxd.cn port=16159 user=erp_pgsql password=erp_2025 dbname=junhong_cmp_test sslmode=disable TimeZone=Asia/Shanghai"
|
||
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
|
||
Logger: logger.Default.LogMode(logger.Silent),
|
||
})
|
||
if err != nil {
|
||
t.Skipf("跳过测试:无法连接测试数据库: %v", err)
|
||
}
|
||
|
||
err = db.AutoMigrate(
|
||
&model.Account{},
|
||
&model.Role{},
|
||
&model.Permission{},
|
||
&model.AccountRole{},
|
||
&model.RolePermission{},
|
||
&model.Shop{},
|
||
&model.Enterprise{},
|
||
&model.PersonalCustomer{},
|
||
)
|
||
if err != nil {
|
||
t.Fatalf("数据库迁移失败: %v", err)
|
||
}
|
||
|
||
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,
|
||
})
|
||
|
||
ctx := context.Background()
|
||
if err := redisClient.Ping(ctx).Err(); err != nil {
|
||
t.Skipf("跳过测试:无法连接 Redis: %v", err)
|
||
}
|
||
|
||
testPrefix := fmt.Sprintf("test:%s:", t.Name())
|
||
keys, _ := redisClient.Keys(ctx, testPrefix+"*").Result()
|
||
if len(keys) > 0 {
|
||
redisClient.Del(ctx, keys...)
|
||
}
|
||
|
||
return txDB, redisClient
|
||
}
|
||
|
||
// TeardownTestDB 清理测试数据库(回滚事务)
|
||
func TeardownTestDB(t *testing.T, db *gorm.DB, redisClient *redis.Client) {
|
||
t.Helper()
|
||
|
||
ctx := context.Background()
|
||
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()
|
||
}
|
||
|
||
// GenerateUsername 生成测试用户名
|
||
func GenerateUsername(prefix string, index int) string {
|
||
return fmt.Sprintf("%s_%d", prefix, index)
|
||
}
|
||
|
||
// GeneratePhone 生成测试手机号
|
||
func GeneratePhone(prefix string, index int) string {
|
||
return fmt.Sprintf("%s%08d", prefix, index)
|
||
}
|
||
|
||
// Now 返回当前时间
|
||
func Now() time.Time {
|
||
return time.Now()
|
||
}
|
||
|
||
// Since 返回从指定时间到现在的持续时间
|
||
func Since(t time.Time) time.Duration {
|
||
return time.Since(t)
|
||
}
|