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/DmsFileCenterServiceTest.java | 142 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 142 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsFileCenterServiceTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsFileCenterServiceTest.java
new file mode 100644
index 0000000..f5a6b7e
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsFileCenterServiceTest.java
@@ -0,0 +1,142 @@
+package jnpf.dmsService;
+
+import jnpf.base.UserInfo;
+import jnpf.dmsEntity.permission.model.DmsSubjectSet;
+import jnpf.dmsEntity.permission.vo.DmsCursorPageVO;
+import jnpf.dmsEntity.permission.vo.DmsFileCenterItemVO;
+import jnpf.dmsMapper.DmsFileCenterMapper;
+import jnpf.dmsPermission.DmsCurrentIdentity;
+import jnpf.dmsPermission.DmsFileCenterCursorCodec;
+import jnpf.dmsPermission.DmsFileCenterQuery;
+import jnpf.dmsPermission.DmsPermissionException;
+import jnpf.dmsPermission.DmsPermissionGroupMembershipResolver;
+import jnpf.dmsPermission.DmsPermissionProperties;
+import jnpf.dmsPermission.DmsSubjectResolver;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+
+import java.util.Arrays;
+import java.util.Collections;
+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.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+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.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DmsFileCenterServiceTest {
+
+ @Test
+ void resolvesOrdinaryUserSubjectsBeforeFolderQueryAndReturnsKeysetCursor() {
+ Fixture fixture = new Fixture(false);
+ DmsSubjectSet subjects = new DmsSubjectSet();
+ subjects.getDirectOrgIds().add("org-direct");
+ subjects.getAncestorOrgIds().add("org-parent");
+ subjects.getPositionIds().add("position-1");
+ subjects.getRoleIds().add("role-1");
+ subjects.getPermissionGroupIds().add("group-1");
+ when(fixture.subjectResolver.resolve(fixture.user)).thenReturn(subjects);
+
+ DmsFileCenterItemVO first = folder("A", fixture.firstId);
+ DmsFileCenterItemVO second = folder("B", fixture.secondId);
+ DmsFileCenterItemVO overflow = folder("C", fixture.thirdId);
+ when(fixture.mapper.selectFolders(any())).thenReturn(Arrays.asList(first, second, overflow));
+
+ DmsCursorPageVO<DmsFileCenterItemVO> result = fixture.service.rootFolders(null, 2);
+
+ assertEquals(Arrays.asList(first, second), result.getList());
+ assertTrue(result.isHasMore());
+ assertNotNull(result.getNextCursor());
+ verify(fixture.groupResolver).resolveAll(subjects, 1000);
+
+ ArgumentCaptor<DmsFileCenterQuery> queryCaptor = ArgumentCaptor.forClass(DmsFileCenterQuery.class);
+ verify(fixture.mapper).selectFolders(queryCaptor.capture());
+ DmsFileCenterQuery query = queryCaptor.getValue();
+ assertFalse(query.isAdministrator());
+ assertEquals(3, query.getLimit());
+ assertEquals(Collections.singletonList("org-direct"), query.getDirectOrgIds());
+ assertEquals(Collections.singletonList("org-parent"), query.getAncestorOrgIds());
+ assertEquals(Collections.singletonList("position-1"), query.getPositionIds());
+ assertEquals(Collections.singletonList("role-1"), query.getRoleIds());
+ assertEquals(Collections.singletonList("group-1"), query.getPermissionGroupIds());
+ }
+
+ @Test
+ void administratorSkipsSubjectAndPermissionGroupResolution() {
+ Fixture fixture = new Fixture(true);
+ when(fixture.mapper.selectCurrentDocuments(any())).thenReturn(Collections.emptyList());
+
+ DmsCursorPageVO<DmsFileCenterItemVO> result = fixture.service.currentDocuments(
+ fixture.folderId, null, null, " report ");
+
+ assertFalse(result.isHasMore());
+ assertEquals(Collections.emptyList(), result.getList());
+ verify(fixture.subjectResolver, never()).resolve(any());
+ verify(fixture.groupResolver, never()).resolveAll(any(), any(Integer.class));
+
+ ArgumentCaptor<DmsFileCenterQuery> queryCaptor = ArgumentCaptor.forClass(DmsFileCenterQuery.class);
+ verify(fixture.mapper).selectCurrentDocuments(queryCaptor.capture());
+ assertTrue(queryCaptor.getValue().isAdministrator());
+ assertEquals("report", queryCaptor.getValue().getKeyword());
+ assertEquals(21, queryCaptor.getValue().getLimit());
+ }
+
+ @Test
+ void rejectsUnknownSharedCenterBeforeCallingMapper() {
+ Fixture fixture = new Fixture(true);
+
+ assertThrows(DmsPermissionException.class,
+ () -> fixture.service.sharedDocuments("ARCHIVE", null, 20));
+
+ verify(fixture.mapper, never()).selectSharedDocuments(any());
+ verify(fixture.mapper, never()).selectSharedHistoricalVersions(any());
+ }
+
+ private static DmsFileCenterItemVO folder(String name, UUID id) {
+ DmsFileCenterItemVO value = new DmsFileCenterItemVO();
+ value.setId(id);
+ value.setName(name);
+ value.setResourceType("Folder");
+ return value;
+ }
+
+ private static class Fixture {
+ private final UUID folderId = UUID.fromString("018f0000-0000-7000-8000-000000000201");
+ private final UUID firstId = UUID.fromString("018f0000-0000-7000-8000-000000000202");
+ private final UUID secondId = UUID.fromString("018f0000-0000-7000-8000-000000000203");
+ private final UUID thirdId = UUID.fromString("018f0000-0000-7000-8000-000000000204");
+ private final UserInfo user = new UserInfo();
+ private final DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
+ private final DmsSubjectResolver subjectResolver = mock(DmsSubjectResolver.class);
+ private final DmsPermissionGroupMembershipResolver groupResolver =
+ mock(DmsPermissionGroupMembershipResolver.class);
+ private final DmsPermissionProperties properties = properties();
+ private final DmsFileCenterCursorCodec cursorCodec = new DmsFileCenterCursorCodec(properties);
+ private final DmsFileCenterMapper mapper = mock(DmsFileCenterMapper.class);
+ private final DmsFileCenterService service = new DmsFileCenterService(
+ currentIdentity, subjectResolver, groupResolver, properties, cursorCodec, mapper);
+
+ private Fixture(boolean administrator) {
+ user.setUserId("user-1");
+ user.setTenantId("tenant-1");
+ when(currentIdentity.requireUser()).thenReturn(user);
+ when(currentIdentity.tenantId(user)).thenReturn("tenant-1");
+ when(currentIdentity.isPermissionAdministrator()).thenReturn(administrator);
+ }
+
+ private static DmsPermissionProperties properties() {
+ DmsPermissionProperties value = new DmsPermissionProperties();
+ value.setDefaultPageSize(20);
+ value.setMaxPageSize(100);
+ value.setMaxPermissionGroupScan(1000);
+ value.setCursorSigningSecret("0123456789abcdef0123456789abcdef");
+ return value;
+ }
+ }
+}
--
Gitblit v1.8.0