package jnpf.dmsMapper;
|
|
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
|
import org.apache.ibatis.io.Resources;
|
import org.apache.ibatis.mapping.MappedStatement;
|
import org.apache.ibatis.mapping.ResultMapping;
|
import org.apache.ibatis.session.Configuration;
|
import org.junit.jupiter.api.Test;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.Reader;
|
import java.util.Arrays;
|
import java.util.List;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
class DmsWenjianBanbenMapperXmlTest {
|
|
private static final List<String> MAPPERS = Arrays.asList(
|
"DmsWenjianBanbenKongzhiMapper",
|
"DmsWenjianXinzengGuanliMapper",
|
"DmsWenjianXinzengShenheMapper",
|
"DmsWenjianXiudingShenqingMapper",
|
"DmsWenjianXiudingShenheMapper");
|
|
@Test
|
void allVersionMappersParseAndAvoidSelectStar() throws IOException {
|
for (String mapper : MAPPERS) {
|
String resource = resource(mapper);
|
String xml;
|
try (Reader reader = Resources.getResourceAsReader(resource)) {
|
xml = read(reader);
|
}
|
assertFalse(xml.toUpperCase().contains("SELECT *"), resource);
|
parse(resource);
|
}
|
}
|
|
@Test
|
void flowAndVersionFieldsHaveExplicitMappings() throws IOException {
|
Configuration newAudit = parse(resource("DmsWenjianXinzengShenheMapper"));
|
assertMapping(newAudit,
|
DmsWenjianXinzengShenheMapper.class.getName() + ".selectByFlowForUpdate",
|
"f_flow_state", "flowState");
|
assertMapping(newAudit,
|
DmsWenjianXinzengShenheMapper.class.getName() + ".selectByFlowForUpdate",
|
"shengxiao_banben_xuhao", "shengxiaoBanbenXuhao");
|
|
Configuration control = parse(resource("DmsWenjianBanbenKongzhiMapper"));
|
assertMapping(control,
|
DmsWenjianBanbenKongzhiMapper.class.getName() + ".selectByFileForUpdate",
|
"biangeng_xuhao", "biangengXuhao");
|
}
|
|
@Test
|
void controlAdvanceChecksBothExpectedSequences() throws IOException {
|
Configuration configuration = parse(resource("DmsWenjianBanbenKongzhiMapper"));
|
MappedStatement statement = configuration.getMappedStatement(
|
DmsWenjianBanbenKongzhiMapper.class.getName() + ".advance");
|
String sql = statement.getBoundSql(null).getSql().replaceAll("\\s+", " ");
|
assertTrue(sql.contains("banben_xuhao = ?"));
|
assertTrue(sql.contains("biangeng_xuhao = ?"));
|
}
|
|
private Configuration parse(String resource) throws IOException {
|
Configuration configuration = new Configuration();
|
try (InputStream input = Resources.getResourceAsStream(resource)) {
|
XMLMapperBuilder builder = new XMLMapperBuilder(
|
input, configuration, resource, configuration.getSqlFragments());
|
builder.parse();
|
}
|
return configuration;
|
}
|
|
private void assertMapping(Configuration configuration, String statementId,
|
String column, String property) {
|
MappedStatement statement = configuration.getMappedStatement(statementId);
|
boolean mapped = statement.getResultMaps().stream()
|
.flatMap(resultMap -> resultMap.getResultMappings().stream())
|
.anyMatch(mapping -> matches(mapping, column, property));
|
assertTrue(mapped, column + " must map explicitly to " + property);
|
}
|
|
private boolean matches(ResultMapping mapping, String column, String property) {
|
return column.equals(mapping.getColumn()) && property.equals(mapping.getProperty());
|
}
|
|
private String read(Reader reader) throws IOException {
|
StringBuilder result = new StringBuilder();
|
char[] buffer = new char[2048];
|
int length;
|
while ((length = reader.read(buffer)) >= 0) {
|
result.append(buffer, 0, length);
|
}
|
return result.toString();
|
}
|
|
private String resource(String mapper) {
|
return "mapper/" + mapper + ".xml";
|
}
|
}
|