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 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 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 revisionParameters() { Map 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; } }