Files
hfb_sys/backend/internal/modules/qualityowner/repository_integration_test.go
T
yml2213 98174c0e33 feat(quality-owner): 增加优质号主、极品专区与无忧租号保险
- 支持保证金余额支付、在线支付开通及后台手动设置审计
- 新增极品专区发布权限、赔付方案与保险结算费率快照
- 优化首页、商品卡和个人中心的优质号主身份展示
2026-11-04 15:04:35 +08:00

115 lines
3.6 KiB
Go

package qualityowner
import (
"testing"
"hfb_sys/backend/internal/database"
"hfb_sys/backend/internal/model"
)
func TestActivateAndAdminDisableRefundDeposit(t *testing.T) {
db := database.NewTestDB()
user := model.User{
Phone: "13900009301",
RealnameStatus: "verified",
Status: "active",
}
if err := db.Create(&user).Error; err != nil {
t.Fatalf("创建用户失败: %v", err)
}
account := model.WalletAccount{
UserID: user.ID,
AvailableBalanceCent: 30_000,
Status: "active",
}
if err := db.Create(&account).Error; err != nil {
t.Fatalf("创建钱包失败: %v", err)
}
repo := NewRepository(db)
status, err := repo.Activate(t.Context(), user.ID)
if err != nil {
t.Fatalf("开通优质号主失败: %v", err)
}
if !status.Active || status.DepositAmountCent != 20_000 || status.DepositSource != DepositSourcePaid {
t.Fatalf("开通后的状态不正确: %+v", status)
}
if status.AvailableBalanceCent != 10_000 {
t.Fatalf("可用余额 = %d, want 10000", status.AvailableBalanceCent)
}
if err := db.First(&account, account.ID).Error; err != nil {
t.Fatalf("读取钱包失败: %v", err)
}
if account.FrozenBalanceCent != 20_000 {
t.Fatalf("冻结余额 = %d, want 20000", account.FrozenBalanceCent)
}
status, err = repo.AdminSet(t.Context(), 99, user.ID, AdminSetRequest{
Enabled: false,
Reason: "用户申请取消优质号主",
}, AuditMeta{RequestID: "quality-owner-disable"})
if err != nil {
t.Fatalf("取消优质号主失败: %v", err)
}
if status.Active || status.DepositAmountCent != 0 {
t.Fatalf("取消后的状态不正确: %+v", status)
}
if status.AvailableBalanceCent != 30_000 {
t.Fatalf("退款后可用余额 = %d, want 30000", status.AvailableBalanceCent)
}
if err := db.First(&account, account.ID).Error; err != nil {
t.Fatalf("读取退款后钱包失败: %v", err)
}
if account.FrozenBalanceCent != 0 {
t.Fatalf("退款后冻结余额 = %d, want 0", account.FrozenBalanceCent)
}
var ledgerCount int64
if err := db.Model(&model.WalletLedger{}).Where("user_id = ?", user.ID).Count(&ledgerCount).Error; err != nil {
t.Fatalf("统计钱包流水失败: %v", err)
}
if ledgerCount != 4 {
t.Fatalf("钱包流水条数 = %d, want 4", ledgerCount)
}
var auditCount int64
if err := db.Model(&model.AuditLog{}).
Where("action = ? AND biz_id = ?", "admin_user.set_quality_owner", user.ID).
Count(&auditCount).Error; err != nil {
t.Fatalf("统计审计日志失败: %v", err)
}
if auditCount != 1 {
t.Fatalf("后台设置审计日志条数 = %d, want 1", auditCount)
}
}
func TestAdminCanGrantQualityOwnerWithoutWalletDeposit(t *testing.T) {
db := database.NewTestDB()
user := model.User{
Phone: "13900009302",
RealnameStatus: "verified",
Status: "active",
}
if err := db.Create(&user).Error; err != nil {
t.Fatalf("创建用户失败: %v", err)
}
repo := NewRepository(db)
status, err := repo.AdminSet(t.Context(), 99, user.ID, AdminSetRequest{
Enabled: true,
Reason: "客服核验后手动开通",
}, AuditMeta{RequestID: "quality-owner-enable"})
if err != nil {
t.Fatalf("后台开通优质号主失败: %v", err)
}
if !status.Active || status.DepositSource != DepositSourceManual || status.DepositAmountCent != 20_000 {
t.Fatalf("后台开通状态不正确: %+v", status)
}
var ledgerCount int64
if err := db.Model(&model.WalletLedger{}).Where("user_id = ?", user.ID).Count(&ledgerCount).Error; err != nil {
t.Fatalf("统计钱包流水失败: %v", err)
}
if ledgerCount != 0 {
t.Fatalf("后台手动开通不应产生钱包流水,实际 %d 条", ledgerCount)
}
}