package com.ruoyi.system.omgpay.mapper; import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Objects; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; class OmgPaymentAttemptMapperContractTest { @Test void mapperAndSqlOnlyReferenceNewAttemptStorage() throws IOException { String xml = loadMapperXml(); String sql = loadSql(); assertTrue(xml.contains("FROM pos_order")); assertTrue(xml.contains("FOR UPDATE")); assertTrue(xml.contains("FROM pos_order_omg_attempt")); assertFalse(xml.contains("pos_order_omg_payment")); assertFalse(xml.contains("pos_order_omg_refund")); assertTrue(sql.contains("UNIQUE KEY uk_omg_attempt_trade_no")); assertTrue(sql.contains("UNIQUE KEY uk_omg_attempt_active_dd")); assertTrue(sql.contains("IF(attempt_status = 0, dd_id, NULL)")); } private String loadMapperXml() throws IOException { try (InputStream inputStream = getClass().getClassLoader() .getResourceAsStream("mapper/omgpay/OmgPaymentAttemptMapper.xml")) { return new String(Objects.requireNonNull(inputStream, "mapper xml not found").readAllBytes(), StandardCharsets.UTF_8); } } private String loadSql() throws IOException { for (Path candidate : sqlCandidates()) { if (Files.exists(candidate)) { return Files.readString(candidate, StandardCharsets.UTF_8); } } throw new IOException("updatesql/sql.md not found"); } private List sqlCandidates() { return List.of( Paths.get("updatesql", "sql.md"), Paths.get("..", "updatesql", "sql.md") ); } }