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/DmsVersionStateMapperSqlTest.java | 86 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsVersionStateMapperSqlTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsVersionStateMapperSqlTest.java
new file mode 100644
index 0000000..2bf1412
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsVersionStateMapperSqlTest.java
@@ -0,0 +1,86 @@
+package jnpf.dmsMapper;
+
+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.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class DmsVersionStateMapperSqlTest {
+
+ @Test
+ void directUploadCreatesImmediatelyEffectiveLifecycleState() {
+ Configuration configuration = new Configuration();
+ configuration.getTypeHandlerRegistry().register(UUID.class, DmsUuidTypeHandler.class);
+ configuration.addMapper(DmsVersionStateMapper.class);
+ MappedStatement statement = configuration.getMappedStatement(
+ DmsVersionStateMapper.class.getName() + ".insertDirectEffective");
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("tenantId", "tenant-1");
+ parameters.put("documentId", UUID.fromString("018f0000-0000-7000-8000-000000000301"));
+ parameters.put("fileVersionId", UUID.fromString("018f0000-0000-7000-8000-000000000302"));
+ parameters.put("userId", "user-1");
+ BoundSql boundSql = statement.getBoundSql(parameters);
+ String sql = boundSql.getSql().replaceAll("\\s+", " ").trim();
+
+ assertTrue(sql.startsWith("INSERT INTO public.dms_version_states"));
+ assertTrue(sql.contains("'EFFECTIVE'"));
+ assertTrue(sql.contains("'DIRECT'"));
+ assertTrue(sql.contains("CURRENT_TIMESTAMP"));
+ assertTrue(sql.contains("CAST(? AS TEXT)"));
+ assertFalse(sql.contains("SELECT *"));
+ }
+
+ @Test
+ void revisionSupersedesOnlyTheExpectedCurrentVersion() {
+ String sql = sql("supersedeCurrent", revisionParameters());
+
+ assertTrue(sql.startsWith("UPDATE public.dms_version_states"));
+ assertTrue(sql.contains("lifecycle_status = 'SUPERSEDED'"));
+ assertTrue(sql.contains("file_version_id = ?"));
+ assertTrue(sql.contains("lifecycle_status = 'EFFECTIVE'"));
+ assertTrue(sql.contains("effective_to = CURRENT_TIMESTAMP"));
+ assertTrue(sql.contains("revision = revision + 1"));
+ }
+
+ @Test
+ void revisionCreatesNewEffectiveStateWithIdempotencySource() {
+ String sql = sql("insertRevisionEffective", revisionParameters());
+
+ assertTrue(sql.startsWith("INSERT INTO public.dms_version_states"));
+ assertTrue(sql.contains("'EFFECTIVE'"));
+ assertTrue(sql.contains("CONCAT('revision:', CAST(? AS TEXT), ':', ?)"));
+ assertTrue(sql.contains("CURRENT_TIMESTAMP"));
+ assertFalse(sql.contains("SELECT *"));
+ }
+
+ private String sql(String method, Map<String, Object> parameters) {
+ Configuration configuration = new Configuration();
+ configuration.getTypeHandlerRegistry().register(UUID.class, DmsUuidTypeHandler.class);
+ configuration.addMapper(DmsVersionStateMapper.class);
+ MappedStatement statement = configuration.getMappedStatement(
+ DmsVersionStateMapper.class.getName() + "." + method);
+ return statement.getBoundSql(parameters).getSql().replaceAll("\\s+", " ").trim();
+ }
+
+ private Map<String, Object> revisionParameters() {
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("tenantId", "tenant-1");
+ parameters.put("documentId", UUID.fromString("018f0000-0000-7000-8000-000000000301"));
+ parameters.put("baseFileVersionId", UUID.fromString("018f0000-0000-7000-8000-000000000302"));
+ parameters.put("fileVersionId", UUID.fromString("018f0000-0000-7000-8000-000000000303"));
+ parameters.put("sourceId", "revision-1");
+ parameters.put("revisionReason", "鏇存柊璐ㄩ噺鑱岃矗");
+ parameters.put("newVersionLabel", "D(01)");
+ parameters.put("userId", "user-1");
+ return parameters;
+ }
+}
--
Gitblit v1.8.0