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