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

80 lines
2.5 KiB
Go

package service
import (
"testing"
"affiliate_dash/internal/model"
)
func TestPlatformAdminAccountLifecycle(t *testing.T) {
db := newServiceTestDB(t)
svc := NewUserService(db, NewTenantService(db))
admin, err := svc.CreatePlatformUser("platform-admin-1", "password123", "管理员一")
if err != nil {
t.Fatalf("创建平台管理员失败: %v", err)
}
if admin.Role != model.RoleAdmin {
t.Fatalf("平台账号角色应为 admin,实际 %s", admin.Role)
}
var membership model.MerchantMember
if err := db.Where("user_id = ?", admin.ID).First(&membership).Error; err != nil {
t.Fatalf("平台管理员缺少自营商户成员关系: %v", err)
}
if membership.Role != model.MemberRoleOwner || !membership.IsDefault {
t.Fatalf("平台管理员成员关系不符: %+v", membership)
}
list, total, err := svc.ListPlatformAdmins(1, 100)
if err != nil {
t.Fatalf("查询平台账号失败: %v", err)
}
if total != 1 || len(list) != 1 || list[0].ID != admin.ID {
t.Fatalf("平台账号列表应只包含管理员,实际 total=%d list=%+v", total, list)
}
updated, err := svc.UpdatePlatformAdmin(admin.ID, UpdatePlatformAdminInput{
Username: "platform-admin-renamed",
Nickname: "管理员一改",
Status: 1,
}, 999)
if err != nil {
t.Fatalf("更新平台管理员失败: %v", err)
}
if updated.Username != "platform-admin-renamed" || updated.Nickname != "管理员一改" || updated.Role != model.RoleAdmin {
t.Fatalf("平台管理员更新结果不符: %+v", updated)
}
merchantUser, err := svc.Create("platform-merchant-1", "password123", "商户账号", model.RoleMerchant, 0)
if err != nil {
t.Fatalf("创建商户账号失败: %v", err)
}
if _, err := svc.UpdatePlatformAdmin(merchantUser.ID, UpdatePlatformAdminInput{
Username: merchantUser.Username,
Status: 1,
}, 999); err == nil {
t.Fatal("平台账号接口不应允许管理商户账号")
}
}
func TestCannotDisableOrDeleteLastPlatformAdmin(t *testing.T) {
db := newServiceTestDB(t)
svc := NewUserService(db, nil)
admin, err := svc.CreatePlatformAdmin("only-admin", "password123", "唯一管理员")
if err != nil {
t.Fatalf("创建管理员失败: %v", err)
}
if _, err := svc.UpdatePlatformAdmin(admin.ID, UpdatePlatformAdminInput{
Username: admin.Username,
Nickname: admin.Nickname,
Status: 0,
}, 0); err == nil {
t.Fatal("最后一个启用的平台管理员不能被停用")
}
if err := svc.DeletePlatformAdmin(admin.ID, 0); err == nil {
t.Fatal("最后一个启用的平台管理员不能被删除")
}
}