package jnpf.dmsService;
|
|
import jnpf.dmsEntity.permission.entity.DmsFilePermissionEntity;
|
import jnpf.dmsEntity.permission.enums.DmsResourceType;
|
import jnpf.dmsEntity.permission.model.DmsResourcePath;
|
import jnpf.dmsEntity.permission.vo.DmsCursorPageVO;
|
import jnpf.dmsEntity.permission.vo.DmsPermissionGrantVO;
|
import jnpf.dmsMapper.DmsFilePermissionMapper;
|
import jnpf.dmsMapper.DmsPermissionGroupMapper;
|
import jnpf.dmsMapper.DmsPermissionUsageMapper;
|
import jnpf.dmsPermission.DmsCurrentIdentity;
|
import jnpf.dmsPermission.DmsCursorCodec;
|
import jnpf.dmsPermission.DmsPermissionMatcher;
|
import jnpf.dmsPermission.DmsPermissionProperties;
|
import jnpf.dmsPermission.DmsResourceResolver;
|
import jnpf.dmsPermission.DmsUserDisplayNameResolver;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.UUID;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class DmsPermissionAdminQueryServiceTest {
|
private static final String TENANT_ID = "tenant-1";
|
private static final String USER_ID = "user-1";
|
|
@Test
|
void enrichesGrantPageUserNames() {
|
Fixture fixture = new Fixture();
|
DmsFilePermissionEntity permission = permission(UUID.randomUUID());
|
when(fixture.permissionMapper.selectPage(TENANT_ID, null, null, null, null, null, 11))
|
.thenReturn(Collections.singletonList(permission));
|
when(fixture.grantService.toVO(permission)).thenReturn(toVO(permission));
|
when(fixture.userDisplayNameResolver.resolve(any()))
|
.thenReturn(Collections.singletonMap(USER_ID, "运营用户(yunying1)"));
|
|
DmsCursorPageVO<DmsPermissionGrantVO> result = fixture.service.grants(
|
null, null, null, null, 10);
|
|
assertEquals(1, result.getList().size());
|
assertEquals("运营用户(yunying1)", result.getList().get(0).getPrincipalName());
|
verify(fixture.userDisplayNameResolver).resolve(any());
|
}
|
|
@Test
|
void enrichesGrantDetailUserName() {
|
Fixture fixture = new Fixture();
|
DmsFilePermissionEntity permission = permission(UUID.randomUUID());
|
when(fixture.permissionMapper.selectByTenantAndId(TENANT_ID, permission.getId()))
|
.thenReturn(permission);
|
when(fixture.grantService.toVO(permission)).thenReturn(toVO(permission));
|
when(fixture.userDisplayNameResolver.resolve(any()))
|
.thenReturn(Collections.singletonMap(USER_ID, "运营用户(yunying1)"));
|
|
DmsPermissionGrantVO result = fixture.service.grant(permission.getId());
|
|
assertEquals("运营用户(yunying1)", result.getPrincipalName());
|
verify(fixture.userDisplayNameResolver).resolve(any());
|
}
|
|
@Test
|
void enrichesDirectAndInheritedUserGrantsWithOneResolverCall() {
|
Fixture fixture = new Fixture();
|
UUID selectedResourceId = UUID.randomUUID();
|
UUID ancestorResourceId = UUID.randomUUID();
|
DmsResourcePath path = new DmsResourcePath();
|
path.setActualResourceId(selectedResourceId);
|
path.setActualResourceType("FOLDER");
|
List<UUID> candidateIds = Arrays.asList(selectedResourceId, ancestorResourceId);
|
DmsFilePermissionEntity direct = permission(selectedResourceId);
|
DmsFilePermissionEntity inherited = permission(ancestorResourceId);
|
when(fixture.resourceResolver.resolve(TENANT_ID, DmsResourceType.FOLDER, selectedResourceId))
|
.thenReturn(path);
|
when(fixture.resourceResolver.candidateResourceIds(path)).thenReturn(candidateIds);
|
when(fixture.permissionMapper.selectForResourceIds(TENANT_ID, candidateIds, 1000))
|
.thenReturn(Arrays.asList(direct, inherited));
|
when(fixture.matcher.coversResource(any(), any())).thenReturn(true);
|
when(fixture.grantService.toVO(any())).thenAnswer(invocation -> toVO(invocation.getArgument(0)));
|
when(fixture.userDisplayNameResolver.resolve(any()))
|
.thenReturn(Collections.singletonMap(USER_ID, "运营用户(yunying1)"));
|
|
List<DmsPermissionGrantVO> result = fixture.service.resourceGrants(
|
DmsResourceType.FOLDER, selectedResourceId);
|
|
assertEquals(2, result.size());
|
assertFalse(result.get(0).isInherited());
|
assertTrue(result.get(1).isInherited());
|
assertEquals("运营用户(yunying1)", result.get(0).getPrincipalName());
|
assertEquals("运营用户(yunying1)", result.get(1).getPrincipalName());
|
verify(fixture.userDisplayNameResolver).resolve(any());
|
}
|
|
private static DmsFilePermissionEntity permission(UUID resourceId) {
|
DmsFilePermissionEntity result = new DmsFilePermissionEntity();
|
result.setId(UUID.randomUUID());
|
result.setResourceId(resourceId);
|
result.setPrincipalType("USER");
|
result.setPrincipalId(USER_ID);
|
result.setValidFrom(new Date(System.currentTimeMillis() - 60_000));
|
result.setUsedCount(0L);
|
result.setCreatedAt(new Date());
|
return result;
|
}
|
|
private static DmsPermissionGrantVO toVO(DmsFilePermissionEntity permission) {
|
DmsPermissionGrantVO result = new DmsPermissionGrantVO();
|
result.setId(permission.getId());
|
result.setResourceId(permission.getResourceId());
|
result.setPrincipalType(permission.getPrincipalType());
|
result.setPrincipalId(permission.getPrincipalId());
|
return result;
|
}
|
|
private static class Fixture {
|
private final DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
private final DmsPermissionProperties properties = new DmsPermissionProperties();
|
private final DmsCursorCodec cursorCodec = new DmsCursorCodec();
|
private final DmsFilePermissionMapper permissionMapper = mock(DmsFilePermissionMapper.class);
|
private final DmsPermissionGroupMapper permissionGroupMapper = mock(DmsPermissionGroupMapper.class);
|
private final DmsPermissionUsageMapper usageMapper = mock(DmsPermissionUsageMapper.class);
|
private final DmsPermissionGrantService grantService = mock(DmsPermissionGrantService.class);
|
private final DmsResourceResolver resourceResolver = mock(DmsResourceResolver.class);
|
private final DmsPermissionMatcher matcher = mock(DmsPermissionMatcher.class);
|
private final DmsUserDisplayNameResolver userDisplayNameResolver = mock(DmsUserDisplayNameResolver.class);
|
private final DmsPermissionAdminQueryService service = new DmsPermissionAdminQueryService(
|
currentIdentity, properties, cursorCodec, permissionMapper, permissionGroupMapper, usageMapper,
|
grantService, resourceResolver, matcher, userDisplayNameResolver);
|
|
private Fixture() {
|
when(currentIdentity.tenantId()).thenReturn(TENANT_ID);
|
}
|
}
|
}
|