Files
affiliate_dash/backend/internal/service/platform_user_test.go
T

109 lines
3.5 KiB
Go

package service
import (
"testing"
"affiliate_dash/internal/model"
)
func TestPlatformSupportAccountRoleSwitch(t *testing.T) {
db := newServiceTestDB(t)
svc := NewUserService(db, NewTenantService(db))
actor, err := svc.CreatePlatformAdmin("platform-role-actor", "password123", "管理员")
if err != nil {
t.Fatalf("创建管理员失败: %v", err)
}
support, err := svc.CreatePlatformUser("platform-role-support", "password123", "平台客服", model.RolePlatformSupport)
if err != nil {
t.Fatalf("创建平台客服失败: %v", err)
}
if support.Role != model.RolePlatformSupport {
t.Fatalf("平台客服角色不符: %+v", support)
}
var membershipCount int64
if err := db.Model(&model.MerchantMember{}).Where("user_id = ?", support.ID).Count(&membershipCount).Error; err != nil {
t.Fatalf("统计成员关系失败: %v", err)
}
if membershipCount != 0 {
t.Fatalf("平台客服不应写入商户成员关系,实际 %d 条", membershipCount)
}
list, total, err := svc.ListPlatformAdmins(1, 100)
if err != nil {
t.Fatalf("查询平台账号失败: %v", err)
}
if total < 2 {
t.Fatalf("平台账号列表应包含管理员与平台客服,实际 total=%d", total)
}
foundSupport := false
for _, item := range list {
if item.ID == support.ID && item.Role == model.RolePlatformSupport {
foundSupport = true
}
}
if !foundSupport {
t.Fatalf("平台账号列表未包含平台客服: %+v", list)
}
// 平台客服 -> 平台管理员:补自营商户负责人上下文。
updated, err := svc.UpdatePlatformAdmin(support.ID, UpdatePlatformAdminInput{
Username: support.Username,
Nickname: support.Nickname,
Status: 1,
Role: model.RoleAdmin,
}, actor.ID)
if err != nil {
t.Fatalf("提升为管理员失败: %v", err)
}
if updated.Role != model.RoleAdmin {
t.Fatalf("角色未更新为管理员: %+v", updated)
}
var membership model.MerchantMember
if err := db.Where("user_id = ?", support.ID).First(&membership).Error; err != nil {
t.Fatalf("管理员缺少自营商户成员关系: %v", err)
}
if membership.Role != model.MemberRoleOwner || !membership.IsDefault {
t.Fatalf("管理员成员关系不符: %+v", membership)
}
// 平台管理员 -> 平台客服:移除商户成员关系,回到 Tenant 合成上下文。
updated, err = svc.UpdatePlatformAdmin(support.ID, UpdatePlatformAdminInput{
Username: support.Username,
Nickname: support.Nickname,
Status: 1,
Role: model.RolePlatformSupport,
}, actor.ID)
if err != nil {
t.Fatalf("降级为平台客服失败: %v", err)
}
if updated.Role != model.RolePlatformSupport {
t.Fatalf("角色未更新为平台客服: %+v", updated)
}
if err := db.Model(&model.MerchantMember{}).Where("user_id = ?", support.ID).Count(&membershipCount).Error; err != nil {
t.Fatalf("统计成员关系失败: %v", err)
}
if membershipCount != 0 {
t.Fatalf("降级后应移除商户成员关系,实际 %d 条", membershipCount)
}
}
func TestCannotDemoteLastPlatformAdmin(t *testing.T) {
db := newServiceTestDB(t)
svc := NewUserService(db, nil)
admin, err := svc.CreatePlatformAdmin("only-role-admin", "password123", "唯一管理员")
if err != nil {
t.Fatalf("创建管理员失败: %v", err)
}
if _, err := svc.UpdatePlatformAdmin(admin.ID, UpdatePlatformAdminInput{
Username: admin.Username,
Nickname: admin.Nickname,
Status: 1,
Role: model.RolePlatformSupport,
}, 0); err == nil {
t.Fatal("最后一个启用的平台管理员不能被降级")
}
}