package jnpf.dmsMapper; import jnpf.dmsDatabase.DmsJsonNodeTypeHandler; import org.apache.ibatis.builder.xml.XMLMapperBuilder; import org.apache.ibatis.session.Configuration; import org.junit.jupiter.api.Test; import java.util.Map; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; class DmsVersionPropertiesMapperSqlTest { @Test void versionPropertiesAreTenantScopedAndMappedAsJson() throws Exception { Configuration config = new Configuration(); for (String name : new String[]{"DmsVersionPropertiesMapper", "DmsWenjianXinzengShenheMapper", "DmsWenjianXiudingShenheMapper"}) { String path = "mapper/" + name + ".xml"; try (var in = getClass().getResourceAsStream("/" + path)) { new XMLMapperBuilder(in, config, path, config.getSqlFragments()).parse(); } } var namespace = DmsVersionPropertiesMapper.class.getName(); var params = Map.of("tenantId", "tenant", "versionId", UUID.randomUUID(), "properties", "{}"); var find = config.getMappedStatement(namespace + ".find"); var mapping = find.getResultMaps().get(0).getResultMappings().stream() .filter(m -> "extendedProperties".equals(m.getProperty())).findFirst().orElseThrow(); assertInstanceOf(DmsJsonNodeTypeHandler.class, mapping.getTypeHandler()); assertEquals("extended_properties", mapping.getColumn()); String findSql = find.getBoundSql(params).getSql(); assertTrue(findSql.contains("tenant_id = ?")); assertTrue(findSql.contains("id = ?")); var insert = config.getMappedStatement(namespace + ".insertVersion"); assertEquals(org.apache.ibatis.mapping.SqlCommandType.INSERT, insert.getSqlCommandType()); var version = new jnpf.dmsEntity.permission.entity.DmsFileVersionEntity(); String insertSql = insert.getBoundSql(Map.of("version", version, "properties", "{}")).getSql(); assertTrue(insertSql.contains("extended_properties")); assertTrue(insertSql.contains("CAST(? AS jsonb)")); assertFalse(config.hasStatement(namespace + ".initialize")); for (String name : new String[]{"DmsWenjianXinzengShenheMapper", "DmsWenjianXiudingShenheMapper"}) { var statement = config.getMappedStatement("jnpf.dmsMapper." + name + ".selectByFlowForUpdate"); assertTrue(statement.getResultMaps().get(0).getResultMappings().stream() .anyMatch(m -> "shenhe_ren_id".equals(m.getColumn()) && "shenheRenId".equals(m.getProperty()))); } } }