From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsPermissionAdminQueryServiceTest.java | 143 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 143 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsPermissionAdminQueryServiceTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsPermissionAdminQueryServiceTest.java
new file mode 100644
index 0000000..8970171
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsPermissionAdminQueryServiceTest.java
@@ -0,0 +1,143 @@
+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, "杩愯惀鐢ㄦ埛锛坹unying1锛�"));
+
+ DmsCursorPageVO<DmsPermissionGrantVO> result = fixture.service.grants(
+ null, null, null, null, 10);
+
+ assertEquals(1, result.getList().size());
+ assertEquals("杩愯惀鐢ㄦ埛锛坹unying1锛�", 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, "杩愯惀鐢ㄦ埛锛坹unying1锛�"));
+
+ DmsPermissionGrantVO result = fixture.service.grant(permission.getId());
+
+ assertEquals("杩愯惀鐢ㄦ埛锛坹unying1锛�", 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, "杩愯惀鐢ㄦ埛锛坹unying1锛�"));
+
+ List<DmsPermissionGrantVO> result = fixture.service.resourceGrants(
+ DmsResourceType.FOLDER, selectedResourceId);
+
+ assertEquals(2, result.size());
+ assertFalse(result.get(0).isInherited());
+ assertTrue(result.get(1).isInherited());
+ assertEquals("杩愯惀鐢ㄦ埛锛坹unying1锛�", result.get(0).getPrincipalName());
+ assertEquals("杩愯惀鐢ㄦ埛锛坹unying1锛�", 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);
+ }
+ }
+}
--
Gitblit v1.8.0