80 lines
2.5 KiB
Go
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("最后一个启用的平台管理员不能被删除")
|
|
}
|
|
}
|