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/dmsPermission/DmsAccessExclusionResolverTest.java |   88 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 88 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsPermission/DmsAccessExclusionResolverTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsPermission/DmsAccessExclusionResolverTest.java
new file mode 100644
index 0000000..85b5daa
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsPermission/DmsAccessExclusionResolverTest.java
@@ -0,0 +1,88 @@
+package jnpf.dmsPermission;
+
+import jnpf.dmsEntity.permission.entity.DmsAccessExclusionEntity;
+import jnpf.dmsEntity.permission.model.DmsResourcePath;
+import jnpf.dmsMapper.DmsAccessExclusionMapper;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DmsAccessExclusionResolverTest {
+
+    @Test
+    void documentExclusionCoversDocumentAndAllVersions() {
+        DmsAccessExclusionMapper mapper = mock(DmsAccessExclusionMapper.class);
+        DmsAccessExclusionResolver resolver = new DmsAccessExclusionResolver(mapper);
+        UUID documentId = UUID.randomUUID();
+        UUID versionOneId = UUID.randomUUID();
+        UUID versionTwoId = UUID.randomUUID();
+        when(mapper.selectActiveForResourceIds(eq("tenant-1"), eq("user-1"), anyList()))
+                .thenReturn(Collections.singletonList(exclusion("DOCUMENT", documentId)));
+
+        DmsResourcePath document = document(documentId);
+        DmsResourcePath versionOne = version(documentId, versionOneId);
+        DmsResourcePath versionTwo = version(documentId, versionTwoId);
+        DmsAccessExclusionResolver.Snapshot snapshot = resolver.resolve(
+                "tenant-1", "user-1", Arrays.asList(document, versionOne, versionTwo));
+
+        assertTrue(snapshot.excludes(document));
+        assertTrue(snapshot.excludes(versionOne));
+        assertTrue(snapshot.excludes(versionTwo));
+        verify(mapper).selectActiveForResourceIds(eq("tenant-1"), eq("user-1"), anyList());
+    }
+
+    @Test
+    void fileVersionExclusionOnlyCoversSpecifiedVersion() {
+        DmsAccessExclusionMapper mapper = mock(DmsAccessExclusionMapper.class);
+        DmsAccessExclusionResolver resolver = new DmsAccessExclusionResolver(mapper);
+        UUID documentId = UUID.randomUUID();
+        UUID excludedVersionId = UUID.randomUUID();
+        UUID visibleVersionId = UUID.randomUUID();
+        when(mapper.selectActiveForResourceIds(eq("tenant-1"), eq("user-1"), anyList()))
+                .thenReturn(Collections.singletonList(exclusion("FILE_VERSION", excludedVersionId)));
+
+        DmsResourcePath document = document(documentId);
+        DmsResourcePath excludedVersion = version(documentId, excludedVersionId);
+        DmsResourcePath visibleVersion = version(documentId, visibleVersionId);
+        DmsAccessExclusionResolver.Snapshot snapshot = resolver.resolve(
+                "tenant-1", "user-1", List.of(document, excludedVersion, visibleVersion));
+
+        assertFalse(snapshot.excludes(document));
+        assertTrue(snapshot.excludes(excludedVersion));
+        assertFalse(snapshot.excludes(visibleVersion));
+    }
+
+    private DmsAccessExclusionEntity exclusion(String resourceType, UUID resourceId) {
+        DmsAccessExclusionEntity result = new DmsAccessExclusionEntity();
+        result.setResourceType(resourceType);
+        result.setResourceId(resourceId);
+        return result;
+    }
+
+    private DmsResourcePath document(UUID documentId) {
+        DmsResourcePath path = new DmsResourcePath();
+        path.setActualResourceType("DOCUMENT");
+        path.setActualResourceId(documentId);
+        path.setDocumentId(documentId);
+        return path;
+    }
+
+    private DmsResourcePath version(UUID documentId, UUID versionId) {
+        DmsResourcePath path = new DmsResourcePath();
+        path.setActualResourceType("FILE_VERSION");
+        path.setActualResourceId(versionId);
+        path.setDocumentId(documentId);
+        return path;
+    }
+}

--
Gitblit v1.8.0