修复:管理员默认商户与账户设置

This commit is contained in:
yml2213
2026-08-13 14:12:25 +08:00
parent 6dae7fafa8
commit 538be52636
7 changed files with 181 additions and 23 deletions
+40 -3
View File
@@ -227,7 +227,7 @@ func TestUserServiceCannotDeleteOrDisableLastAdmin(t *testing.T) {
}
}
func TestPlatformAdminCRUDDoesNotCreateMerchantMembership(t *testing.T) {
func TestPlatformAdminCRUDUsesHiddenSelfMerchantContext(t *testing.T) {
db := newServiceTestDB(t)
svc := NewUserService(db, NewTenantService(db))
actor, err := svc.CreatePlatformAdmin("existing-admin", "password123", "现有管理员")
@@ -242,8 +242,15 @@ func TestPlatformAdminCRUDDoesNotCreateMerchantMembership(t *testing.T) {
if err := db.Model(&model.MerchantMember{}).Where("user_id = ?", admin.ID).Count(&membershipCount).Error; err != nil {
t.Fatalf("count merchant memberships: %v", err)
}
if membershipCount != 0 {
t.Fatalf("platform admin must not have merchant memberships, count=%d", membershipCount)
if membershipCount != 1 {
t.Fatalf("platform admin should have one hidden default membership, count=%d", membershipCount)
}
var membership model.MerchantMember
if err := db.Where("user_id = ?", admin.ID).First(&membership).Error; err != nil {
t.Fatalf("load default membership: %v", err)
}
if membership.Role != model.MemberRoleOwner || !membership.IsDefault {
t.Fatalf("unexpected default membership: %+v", membership)
}
updated, err := svc.UpdatePlatformAdmin(admin.ID, UpdatePlatformAdminInput{
Username: "platform-admin-updated", Nickname: "更新后管理员", Password: "new-password", Status: 1,
@@ -266,6 +273,36 @@ func TestPlatformAdminCRUDDoesNotCreateMerchantMembership(t *testing.T) {
}
}
func TestUpdateCurrentAccountCanChangeUsernameNicknameAndPassword(t *testing.T) {
db := newServiceTestDB(t)
tenant := NewTenantService(db)
auth := NewAuthService(db, nil, tenant)
user, err := NewUserService(db, tenant).CreatePlatformAdmin("current-account", "old-password", "旧昵称")
if err != nil {
t.Fatalf("create account: %v", err)
}
updated, err := auth.UpdateCurrentAccount(user.ID, UpdateCurrentAccountInput{
CurrentPassword: "old-password",
Username: "updated-account",
Nickname: "新昵称",
NewPassword: "new-password",
})
if err != nil {
t.Fatalf("update current account: %v", err)
}
if updated.Username != "updated-account" || updated.Nickname != "新昵称" {
t.Fatalf("unexpected updated account: %+v", updated)
}
if err := bcrypt.CompareHashAndPassword([]byte(updated.PasswordHash), []byte("new-password")); err != nil {
t.Fatalf("updated password should match: %v", err)
}
if _, err := auth.UpdateCurrentAccount(user.ID, UpdateCurrentAccountInput{
CurrentPassword: "wrong-password", Username: "should-not-save", Nickname: "", NewPassword: "",
}); err == nil {
t.Fatal("expected current password verification error")
}
}
func TestListMerchantAccountGroupsExcludesPlatformAdmins(t *testing.T) {
db := newServiceTestDB(t)
merchantA := model.Merchant{Code: "merchant-accounts-a", Name: "商户账号 A", Status: model.MerchantStatusActive}