| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package com.ruoyi.system.mapper;
- import org.apache.ibatis.annotations.Select;
- import org.apache.ibatis.mapping.BoundSql;
- import org.apache.ibatis.session.Configuration;
- import org.junit.jupiter.api.Test;
- import java.lang.reflect.Method;
- import java.math.BigDecimal;
- import java.util.Arrays;
- import java.util.Locale;
- import java.util.Map;
- import static org.junit.jupiter.api.Assertions.assertTrue;
- class RiderPositionMapperContractTest {
- @Test
- void flashNotificationCandidatesMatchEligibilityAndExclusivityRules() throws Exception {
- Method method = RiderPositionMapper.class.getMethod("getFlashRiderNotificationList",
- BigDecimal.class, BigDecimal.class, int.class, String.class, Integer.class, int.class);
- String sql = Arrays.stream(method.getAnnotation(Select.class).value())
- .reduce("", (left, right) -> left + " " + right)
- .replaceAll("\\s+", " ")
- .toLowerCase(Locale.ROOT);
- assertTrue(sql.contains("join info_user iu on iu.user_id=rp.rider_id"));
- assertTrue(sql.contains("iu.user_type='2'"));
- assertTrue(sql.contains("find_in_set('flash'"));
- assertTrue(sql.contains("#{vehicletype}"));
- assertTrue(sql.contains("st_distance_sphere"));
- assertTrue(sql.contains("#{distancelimitkm} * 1000"));
- assertTrue(sql.contains("from pos_order po"));
- assertTrue(sql.contains("from flash_delivery_order fdo"));
- assertTrue(sql.contains("fdo.delivery_type='urgent'"));
- assertTrue(sql.contains("limit #{num}"));
- }
- @Test
- void flashNotificationQueryParsesAsDynamicMyBatisSql() {
- Configuration configuration = new Configuration();
- configuration.addMapper(RiderPositionMapper.class);
- Map<String, Object> parameters = Map.of(
- "longitude", BigDecimal.valueOf(121.5),
- "latitude", BigDecimal.valueOf(25.0),
- "vehicleType", 1,
- "deliveryType", "NORMAL",
- "distanceLimitKm", 5,
- "num", 20);
- BoundSql boundSql = configuration.getMappedStatement(
- RiderPositionMapper.class.getName() + ".getFlashRiderNotificationList")
- .getBoundSql(parameters);
- String sql = boundSql.getSql().replaceAll("\\s+", " ").toLowerCase(Locale.ROOT);
- assertTrue(sql.contains("iu.offline"));
- assertTrue(sql.contains("st_distance_sphere"));
- assertTrue(sql.contains("<= ? * 1000"));
- assertTrue(sql.contains("order by"));
- }
- }
|