暂存提交
This commit is contained in:
@@ -6,6 +6,7 @@ import com.baiyue.common.core.exception.BizException;
|
||||
import com.baiyue.iam.client.AuthAccountClient;
|
||||
import com.baiyue.iam.dto.MemberDtos.*;
|
||||
import com.baiyue.iam.entity.IamMembership;
|
||||
import com.baiyue.iam.entity.IamRole;
|
||||
import com.baiyue.iam.entity.IamUser;
|
||||
import com.baiyue.iam.mapper.IamRoleMapper;
|
||||
import com.baiyue.iam.repository.MemberRepository;
|
||||
@@ -14,6 +15,7 @@ import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.*;
|
||||
@@ -80,11 +82,88 @@ class MemberServiceTest {
|
||||
UpdateMemberRequest request = new UpdateMemberRequest("所有者", null, null,
|
||||
"EMPLOYEE", null, List.of());
|
||||
|
||||
assertThrows(BizException.class, () -> service.update(100L, 20L, request));
|
||||
assertThrows(BizException.class, () -> service.update(100L, 20L, request, Set.of()));
|
||||
|
||||
verify(repository, never()).replaceRoles(anyLong(), anyLong(), anyList());
|
||||
}
|
||||
|
||||
@Test void createWithRolesRequiresGrantRolePermission() {
|
||||
CreateMemberRequest request = new CreateMemberRequest("member01", "Password1", "成员",
|
||||
null, null, "EMPLOYEE", null, List.of(50L));
|
||||
|
||||
BizException exception = assertThrows(BizException.class,
|
||||
() -> service.create(100L, request, Set.of("merchant:member:create")));
|
||||
|
||||
assertEquals(ResultCode.FORBIDDEN, exception.getResultCode());
|
||||
verifyNoInteractions(auth);
|
||||
verify(repository, never()).insert(any());
|
||||
}
|
||||
|
||||
@Test void profileOnlyUpdateAllowsUnchangedRolesWithoutGrantPermission() {
|
||||
IamRole role = activeMerchantRole(50L, 100L);
|
||||
when(roleMapper.selectById(50L)).thenReturn(role);
|
||||
UpdateMemberRequest request = new UpdateMemberRequest("新姓名", "13800138000", null,
|
||||
"EMPLOYEE", "M-001", List.of(50L));
|
||||
|
||||
MemberResponse result = service.update(100L, 20L, request, Set.of("merchant:member:edit"));
|
||||
|
||||
assertEquals("新姓名", result.displayName());
|
||||
verify(repository).saveUser(user);
|
||||
verify(repository).replaceRoles(100L, 20L, List.of(50L));
|
||||
}
|
||||
|
||||
@Test void roleChangeRequiresGrantRolePermission() {
|
||||
UpdateMemberRequest request = new UpdateMemberRequest("测试成员", null, null,
|
||||
"EMPLOYEE", null, List.of(60L));
|
||||
|
||||
BizException exception = assertThrows(BizException.class,
|
||||
() -> service.update(100L, 20L, request, Set.of("merchant:member:edit")));
|
||||
|
||||
assertEquals(ResultCode.FORBIDDEN, exception.getResultCode());
|
||||
verify(repository, never()).save(any());
|
||||
verify(repository, never()).replaceRoles(anyLong(), anyLong(), anyList());
|
||||
}
|
||||
|
||||
@Test void clearingRolesAlsoRequiresGrantRolePermission() {
|
||||
UpdateMemberRequest request = new UpdateMemberRequest("测试成员", null, null,
|
||||
"EMPLOYEE", null, List.of());
|
||||
|
||||
BizException exception = assertThrows(BizException.class,
|
||||
() -> service.update(100L, 20L, request, Set.of("merchant:member:edit")));
|
||||
|
||||
assertEquals(ResultCode.FORBIDDEN, exception.getResultCode());
|
||||
verify(repository, never()).replaceRoles(anyLong(), anyLong(), anyList());
|
||||
}
|
||||
|
||||
@Test void grantRolePermissionAllowsClearingRoles() {
|
||||
UpdateMemberRequest request = new UpdateMemberRequest("测试成员", null, null,
|
||||
"EMPLOYEE", null, List.of());
|
||||
|
||||
service.update(100L, 20L, request,
|
||||
Set.of("merchant:member:edit", "merchant:member:grant-role"));
|
||||
|
||||
verify(repository).replaceRoles(100L, 20L, List.of());
|
||||
}
|
||||
|
||||
@Test void crossTenantUpdateReturnsNotFoundBeforeReadingRoles() {
|
||||
when(repository.findByTenantAndId(200L, 20L)).thenReturn(null);
|
||||
UpdateMemberRequest request = new UpdateMemberRequest("测试成员", null, null,
|
||||
"EMPLOYEE", null, List.of(50L));
|
||||
|
||||
BizException exception = assertThrows(BizException.class,
|
||||
() -> service.update(200L, 20L, request, Set.of("merchant:member:grant-role")));
|
||||
|
||||
assertEquals(ResultCode.NOT_FOUND, exception.getResultCode());
|
||||
verify(repository, never()).findRoleIds(200L, 20L);
|
||||
}
|
||||
|
||||
private IamRole activeMerchantRole(long id, long tenantId) {
|
||||
IamRole role = new IamRole();
|
||||
role.setId(id); role.setTenantId(tenantId); role.setAppCode("MERCHANT");
|
||||
role.setRoleCode("MERCHANT_EMPLOYEE"); role.setStatus("ACTIVE");
|
||||
return role;
|
||||
}
|
||||
|
||||
@Test void tenantOwnerPasswordCannotBeResetByMemberAdministrator() {
|
||||
member.setMemberType("OWNER");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user