feat: manage merchant members
This commit is contained in:
@@ -129,3 +129,48 @@ func TestDefaultMerchantRolesCanBeEdited(t *testing.T) {
|
||||
t.Fatalf("unexpected updated role: %+v", updated)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMemberCanBeUpdatedOrRemovedWithoutDeletingAccount(t *testing.T) {
|
||||
db := newServiceTestDB(t)
|
||||
merchant := model.Merchant{Code: "member-crud", Name: "成员管理商户", Status: model.MerchantStatusActive}
|
||||
actor := model.User{Username: "member-crud-owner", PasswordHash: "hash", Role: model.RoleMerchant, Status: 1}
|
||||
employee := model.User{Username: "member-crud-employee", PasswordHash: "hash", Role: model.RoleMerchant, Status: 1}
|
||||
if err := db.Create(&merchant).Error; err != nil {
|
||||
t.Fatalf("create merchant: %v", err)
|
||||
}
|
||||
if err := db.Create(&actor).Error; err != nil {
|
||||
t.Fatalf("create actor: %v", err)
|
||||
}
|
||||
if err := db.Create(&employee).Error; err != nil {
|
||||
t.Fatalf("create employee: %v", err)
|
||||
}
|
||||
if err := createDefaultMerchantRoles(db, merchant.ID); err != nil {
|
||||
t.Fatalf("create default roles: %v", err)
|
||||
}
|
||||
member := model.MerchantMember{MerchantID: merchant.ID, UserID: employee.ID, Role: "support", Status: 1}
|
||||
if err := db.Create(&member).Error; err != nil {
|
||||
t.Fatalf("create member: %v", err)
|
||||
}
|
||||
|
||||
svc := NewMerchantService(db, nil, NewTenantService(db))
|
||||
updated, err := svc.UpdateMember(merchant.ID, member.ID, UpdateMemberInput{
|
||||
Role: model.MemberRoleFinance, Status: 0, IsDefault: true,
|
||||
}, actor.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("update member: %v", err)
|
||||
}
|
||||
if updated.Role != model.MemberRoleFinance || updated.Status != 0 || !updated.IsDefault {
|
||||
t.Fatalf("unexpected updated member: %+v", updated)
|
||||
}
|
||||
if err := svc.RemoveMember(merchant.ID, member.ID, actor.ID); err != nil {
|
||||
t.Fatalf("remove member: %v", err)
|
||||
}
|
||||
var user model.User
|
||||
if err := db.First(&user, employee.ID).Error; err != nil {
|
||||
t.Fatalf("employee account should remain: %v", err)
|
||||
}
|
||||
var count int64
|
||||
if err := db.Model(&model.MerchantMember{}).Where("id = ?", member.ID).Count(&count).Error; err != nil || count != 0 {
|
||||
t.Fatalf("member relationship should be removed, count=%d err=%v", count, err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user