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/dmsMapper/DmsAccessExclusionMapperSqlTest.java |   90 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsAccessExclusionMapperSqlTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsAccessExclusionMapperSqlTest.java
new file mode 100644
index 0000000..fb0ed16
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsAccessExclusionMapperSqlTest.java
@@ -0,0 +1,90 @@
+package jnpf.dmsMapper;
+
+import jnpf.dmsEntity.permission.entity.DmsAccessExclusionEntity;
+import jnpf.dmsDatabase.DmsUuidTypeHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.session.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+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;
+
+class DmsAccessExclusionMapperSqlTest {
+    private Configuration configuration;
+
+    @BeforeEach
+    void setUp() {
+        configuration = new Configuration();
+        configuration.getTypeHandlerRegistry().register(UUID.class, DmsUuidTypeHandler.class);
+        configuration.addMapper(DmsAccessExclusionMapper.class);
+    }
+
+    @Test
+    void rendersWholeCreateBatchAsOneInsertStatement() {
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("items", Arrays.asList(entity(UUID.randomUUID()), entity(UUID.randomUUID())));
+
+        String sql = sql("insertBatch", parameters);
+
+        assertTrue(sql.startsWith("INSERT INTO public.dms_access_exclusions"));
+        assertEquals(2, occurrences(sql, "uuidv7()"));
+        assertFalse(sql.contains("SELECT *"));
+    }
+
+    @Test
+    void rendersWholeRevocationBatchAsOneUpdateStatement() {
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("tenantId", "tenant-1");
+        parameters.put("ids", Arrays.asList(UUID.randomUUID(), UUID.randomUUID()));
+        parameters.put("actorType", "USER");
+        parameters.put("actorId", "admin-1");
+        parameters.put("reason", "revoke");
+
+        String sql = sql("revokeBatch", parameters);
+
+        assertTrue(sql.startsWith("UPDATE public.dms_access_exclusions"));
+        assertTrue(sql.contains("id IN ( ? , ? )"));
+        assertEquals(1, occurrences(sql, "UPDATE public.dms_access_exclusions"));
+    }
+
+    private String sql(String method, Map<String, Object> parameters) {
+        MappedStatement statement = configuration.getMappedStatement(
+                DmsAccessExclusionMapper.class.getName() + "." + method);
+        BoundSql boundSql = statement.getBoundSql(parameters);
+        return boundSql.getSql().replaceAll("\\s+", " ").trim();
+    }
+
+    private DmsAccessExclusionEntity entity(UUID resourceId) {
+        DmsAccessExclusionEntity result = new DmsAccessExclusionEntity();
+        result.setTenantId("tenant-1");
+        result.setResourceType("DOCUMENT");
+        result.setResourceId(resourceId);
+        result.setUserId("user-1");
+        result.setActionCode("READ");
+        result.setSourceType("MANUAL");
+        result.setSourceId("source-1");
+        result.setValidFrom(new Date());
+        result.setExcludedByType("USER");
+        result.setExcludedById("admin-1");
+        return result;
+    }
+
+    private int occurrences(String value, String token) {
+        int result = 0;
+        int offset = 0;
+        while ((offset = value.indexOf(token, offset)) >= 0) {
+            result++;
+            offset += token.length();
+        }
+        return result;
+    }
+}

--
Gitblit v1.8.0