package jnpf.base.service; import jnpf.base.mapper.UploadEditDraftMapper; import org.apache.ibatis.builder.xml.XMLMapperBuilder; import org.apache.ibatis.datasource.unpooled.UnpooledDataSource; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.*; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import org.junit.*; import java.util.List; import static org.junit.Assert.*; /** Executes the production lock SQL on connection-local copies of actual PostgreSQL columns. */ public class UploadEditDraftMapperPostgresTest { private SqlSession session; @Before public void setup() throws Exception { Assume.assumeTrue(System.getenv("DMS_READ_TEST_URL") != null); var source = new UnpooledDataSource("org.postgresql.Driver", System.getenv("DMS_READ_TEST_URL"), System.getenv("DMS_READ_TEST_USER"), System.getenv("DMS_READ_TEST_PASSWORD")); var config = new Configuration(new Environment("lock-test", new JdbcTransactionFactory(), source)); String resource = "mapper/UploadEditDraftMapper.xml"; try (var input = getClass().getClassLoader().getResourceAsStream(resource)) { new XMLMapperBuilder(input, config, resource, config.getSqlFragments()).parse(); } session = new SqlSessionFactoryBuilder().build(config).openSession(false); for (String table : List.of("dms_wenjian_xinzeng_shenhe", "dms_wenjian_xiuding_shenhe")) { try (var statement = session.getConnection().createStatement()) { statement.execute("CREATE TEMP TABLE " + table + " ON COMMIT DROP AS SELECT f_id,f_tenant_id,f_delete_mark FROM public." + table + " WITH NO DATA"); statement.execute("INSERT INTO " + table + "(f_id,f_tenant_id,f_delete_mark) VALUES('record','test',NULL),('deleted','test',1)"); } } } @After public void close() { if (session != null) { try { session.rollback(true); } finally { session.close(); } } } @Test public void locksOnlyExistingRecordOfCorrectTenantInAllowedAuditTable() { var mapper = session.getMapper(UploadEditDraftMapper.class); for (String table : List.of("dms_wenjian_xinzeng_shenhe", "dms_wenjian_xiuding_shenhe")) { assertEquals("record", mapper.lockDmsRecord("test", table, "record")); assertNull(mapper.lockDmsRecord("other", table, "record")); assertNull(mapper.lockDmsRecord("test", table, "missing")); assertNull(mapper.lockDmsRecord("test", table, "deleted")); } assertNull(mapper.lockDmsRecord("test", "workflow_task", "record")); } }