RiderPositionMapperContractTest.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package com.ruoyi.system.mapper;
  2. import org.apache.ibatis.annotations.Select;
  3. import org.apache.ibatis.mapping.BoundSql;
  4. import org.apache.ibatis.session.Configuration;
  5. import org.junit.jupiter.api.Test;
  6. import java.lang.reflect.Method;
  7. import java.math.BigDecimal;
  8. import java.util.Arrays;
  9. import java.util.Locale;
  10. import java.util.Map;
  11. import static org.junit.jupiter.api.Assertions.assertTrue;
  12. class RiderPositionMapperContractTest {
  13. @Test
  14. void flashNotificationCandidatesMatchEligibilityAndExclusivityRules() throws Exception {
  15. Method method = RiderPositionMapper.class.getMethod("getFlashRiderNotificationList",
  16. BigDecimal.class, BigDecimal.class, int.class, String.class, Integer.class, int.class);
  17. String sql = Arrays.stream(method.getAnnotation(Select.class).value())
  18. .reduce("", (left, right) -> left + " " + right)
  19. .replaceAll("\\s+", " ")
  20. .toLowerCase(Locale.ROOT);
  21. assertTrue(sql.contains("join info_user iu on iu.user_id=rp.rider_id"));
  22. assertTrue(sql.contains("iu.user_type='2'"));
  23. assertTrue(sql.contains("find_in_set('flash'"));
  24. assertTrue(sql.contains("#{vehicletype}"));
  25. assertTrue(sql.contains("st_distance_sphere"));
  26. assertTrue(sql.contains("#{distancelimitkm} * 1000"));
  27. assertTrue(sql.contains("from pos_order po"));
  28. assertTrue(sql.contains("from flash_delivery_order fdo"));
  29. assertTrue(sql.contains("fdo.delivery_type='urgent'"));
  30. assertTrue(sql.contains("limit #{num}"));
  31. }
  32. @Test
  33. void flashNotificationQueryParsesAsDynamicMyBatisSql() {
  34. Configuration configuration = new Configuration();
  35. configuration.addMapper(RiderPositionMapper.class);
  36. Map<String, Object> parameters = Map.of(
  37. "longitude", BigDecimal.valueOf(121.5),
  38. "latitude", BigDecimal.valueOf(25.0),
  39. "vehicleType", 1,
  40. "deliveryType", "NORMAL",
  41. "distanceLimitKm", 5,
  42. "num", 20);
  43. BoundSql boundSql = configuration.getMappedStatement(
  44. RiderPositionMapper.class.getName() + ".getFlashRiderNotificationList")
  45. .getBoundSql(parameters);
  46. String sql = boundSql.getSql().replaceAll("\\s+", " ").toLowerCase(Locale.ROOT);
  47. assertTrue(sql.contains("iu.offline"));
  48. assertTrue(sql.contains("st_distance_sphere"));
  49. assertTrue(sql.contains("<= ? * 1000"));
  50. assertTrue(sql.contains("order by"));
  51. }
  52. }