功能:平台管理员删除商户账号
This commit is contained in:
@@ -336,3 +336,40 @@ func TestListMerchantAccountGroupsExcludesPlatformAdmins(t *testing.T) {
|
||||
t.Fatalf("unexpected merchant account group: %+v", groups[0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteMerchantAccountRemovesAllMemberships(t *testing.T) {
|
||||
db := newServiceTestDB(t)
|
||||
merchantA := model.Merchant{Code: "delete-account-a", Name: "删除账号商户 A", Status: model.MerchantStatusActive}
|
||||
merchantB := model.Merchant{Code: "delete-account-b", Name: "删除账号商户 B", Status: model.MerchantStatusActive}
|
||||
merchantUser := model.User{Username: "delete-merchant-account", PasswordHash: "hash", Role: model.RoleMerchant, Status: 1}
|
||||
platformAdmin := model.User{Username: "delete-account-admin", PasswordHash: "hash", Role: model.RoleAdmin, Status: 1}
|
||||
for _, entity := range []interface{}{&merchantA, &merchantB, &merchantUser, &platformAdmin} {
|
||||
if err := db.Create(entity).Error; err != nil {
|
||||
t.Fatalf("create fixture: %v", err)
|
||||
}
|
||||
}
|
||||
for _, member := range []model.MerchantMember{
|
||||
{MerchantID: merchantA.ID, UserID: merchantUser.ID, Role: model.MemberRoleOperator, Status: 1},
|
||||
{MerchantID: merchantB.ID, UserID: merchantUser.ID, Role: "support", Status: 1},
|
||||
} {
|
||||
if err := db.Create(&member).Error; err != nil {
|
||||
t.Fatalf("create membership: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
svc := NewUserService(db, nil)
|
||||
if err := svc.DeleteMerchantAccount(merchantUser.ID, platformAdmin.ID); err != nil {
|
||||
t.Fatalf("delete merchant account: %v", err)
|
||||
}
|
||||
var memberships int64
|
||||
if err := db.Model(&model.MerchantMember{}).Where("user_id = ?", merchantUser.ID).Count(&memberships).Error; err != nil || memberships != 0 {
|
||||
t.Fatalf("merchant memberships should be removed, count=%d err=%v", memberships, err)
|
||||
}
|
||||
var deleted model.User
|
||||
if err := db.Unscoped().First(&deleted, merchantUser.ID).Error; err != nil || !deleted.DeletedAt.Valid {
|
||||
t.Fatalf("merchant account should be soft deleted, user=%+v err=%v", deleted, err)
|
||||
}
|
||||
if err := svc.DeleteMerchantAccount(platformAdmin.ID, merchantUser.ID); err == nil {
|
||||
t.Fatal("platform administrator should not be deletable from merchant account endpoint")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user