69 lines
3.0 KiB
Java
69 lines
3.0 KiB
Java
package com.bms.system;
|
|
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.test.util.ReflectionTestUtils;
|
|
import com.bms.common.constant.CacheConstants;
|
|
import com.bms.common.core.domain.entity.SysRole;
|
|
import com.bms.common.core.domain.entity.SysUser;
|
|
import com.bms.common.core.domain.model.LoginUser;
|
|
import com.bms.common.core.redis.RedisCache;
|
|
import com.bms.framework.web.service.SysPermissionService;
|
|
import com.bms.framework.web.service.TokenService;
|
|
import com.bms.system.service.ISysRoleService;
|
|
import com.bms.web.controller.system.SysRoleController;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
import static org.mockito.ArgumentMatchers.*;
|
|
import static org.mockito.Mockito.*;
|
|
|
|
class SysRoleDataScopeRefreshTest {
|
|
@Test
|
|
void savingDataScopeRefreshesOnlineUsersWithPersistedScope() {
|
|
ISysRoleService roles = mock(ISysRoleService.class);
|
|
TokenService tokens = mock(TokenService.class);
|
|
SysPermissionService permissions = mock(SysPermissionService.class);
|
|
SysRoleController controller = new SysRoleController();
|
|
ReflectionTestUtils.setField(controller, "roleService", roles);
|
|
ReflectionTestUtils.setField(controller, "tokenService", tokens);
|
|
ReflectionTestUtils.setField(controller, "permissionService", permissions);
|
|
SysRole submitted = new SysRole(10L);
|
|
submitted.setDataScope("5");
|
|
SysRole persisted = new SysRole(10L);
|
|
persisted.setDataScope("5");
|
|
when(roles.authDataScope(submitted)).thenReturn(1);
|
|
when(roles.selectRoleById(10L)).thenReturn(persisted);
|
|
controller.dataScope(submitted);
|
|
verify(tokens).refreshPermissionByRoleId(10L, permissions, "5");
|
|
}
|
|
|
|
@Test
|
|
void replacesCachedDataScopeBeforeSavingSessionAndPreservesOtherRoles() {
|
|
RedisCache redis = mock(RedisCache.class);
|
|
SysPermissionService permissions = mock(SysPermissionService.class);
|
|
TokenService tokens = spy(new TokenService());
|
|
ReflectionTestUtils.setField(tokens, "redisCache", redis);
|
|
doNothing().when(tokens).refreshToken(any());
|
|
SysRole target = new SysRole(10L);
|
|
target.setDataScope("1");
|
|
SysRole other = new SysRole(11L);
|
|
other.setDataScope("3");
|
|
SysUser user = new SysUser(42L);
|
|
user.setRoles(List.of(target, other));
|
|
LoginUser login = new LoginUser(42L, 200L, user, Set.of("ar:bill:list"));
|
|
String key = CacheConstants.LOGIN_TOKEN_KEY + "test";
|
|
when(redis.keys(CacheConstants.LOGIN_TOKEN_KEY + "*")).thenReturn(List.of(key));
|
|
when(redis.getCacheObject(key)).thenReturn(login);
|
|
when(permissions.getMenuPermission(user)).thenAnswer(invocation -> {
|
|
assertEquals("5", target.getDataScope());
|
|
return Set.of("ar:bill:list");
|
|
});
|
|
tokens.refreshPermissionByRoleId(10L, permissions, "5");
|
|
assertEquals("5", login.getUser().getRoles().get(0).getDataScope());
|
|
assertEquals("3", other.getDataScope());
|
|
verify(tokens).refreshToken(login);
|
|
}
|
|
}
|