提交 380a8bfe authored 作者: jiangwujie's avatar jiangwujie

feature(电子围栏): 增加测试方法

上级 e8f79b5f
...@@ -260,8 +260,8 @@ public enum OrderChildEnum { ...@@ -260,8 +260,8 @@ public enum OrderChildEnum {
@AllArgsConstructor @AllArgsConstructor
public enum ExitNoticeStatus { public enum ExitNoticeStatus {
NOT_NOTIFIED(0, "到达货源地"), NOT_NOTIFIED(0, "未通知"),
NOTIFIED(1, "驶入"); NOTIFIED(1, "已通知");
private final Integer code; private final Integer code;
private final String name; private final String name;
......
...@@ -3302,6 +3302,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3302,6 +3302,7 @@ public class OrderChildServiceImpl implements OrderChildService {
//超出货源地x公里范围了,且通知状态为未通知 //超出货源地x公里范围了,且通知状态为未通知
// 到达货源地 // 到达货源地
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) { if (Objects.equals(child.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
log.info("{}超出货源地x公里范围了,运单{}为到达货源地状态,发送短信", truckNo, childNo);
sendLoadSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo()); sendLoadSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo());
} }
// 已装货 // 已装货
...@@ -3314,6 +3315,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3314,6 +3315,7 @@ public class OrderChildServiceImpl implements OrderChildService {
// 修改 通知状态 为已通知 // 修改 通知状态 为已通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode()); child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode()); child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
orderChildDao.updateEntityByKey(child);
} }
} else { } else {
...@@ -3325,6 +3327,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3325,6 +3327,7 @@ public class OrderChildServiceImpl implements OrderChildService {
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode()); child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode());
// 状态改为驶入货源地 // 状态改为驶入货源地
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode()); child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode());
orderChildDao.updateEntityByKey(child);
} }
} }
} }
...@@ -3342,7 +3345,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3342,7 +3345,7 @@ public class OrderChildServiceImpl implements OrderChildService {
* @param truckNo 当前运单关联车牌号 * @param truckNo 当前运单关联车牌号
* @param childNo 运单单号 * @param childNo 运单单号
*/ */
private void sendLoadSms(String mobile, String truckNo, String childNo) { protected void sendLoadSms(String mobile, String truckNo, String childNo) {
AliSmsMessageReq req = new AliSmsMessageReq(); AliSmsMessageReq req = new AliSmsMessageReq();
// 模板CODE // 模板CODE
//SMS_470795021 //SMS_470795021
......
package com.clx.performance.service.impl; package com.clx.performance.service.impl;
import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.performance.config.ClxMessageConfig;
import com.clx.performance.config.LoadAppConfig;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.App;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.DriverNoticeConfigService; import com.clx.performance.service.DriverNoticeConfigService;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.vo.pc.DriverNoticeConfigVO; import com.clx.performance.vo.pc.DriverNoticeConfigVO;
import com.msl.common.base.Optional;
import com.msl.common.open.OpenClient;
import com.msl.common.result.Result;
import com.purchase.manage.dto.SupervisionLoadInfoDto;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
public class OrderChildServiceImpl2Test { public class OrderChildServiceImpl2Test {
@Mock @Mock
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
@Mock
private OrderGoodsDao orderGoodsDao;
@Mock
private HashOperations<String, String, TruckTraceDTO> hashOps;
@Mock @Mock
private DriverNoticeConfigService driverNoticeConfigService; private DriverNoticeConfigService driverNoticeConfigService;
...@@ -27,6 +57,19 @@ public class OrderChildServiceImpl2Test { ...@@ -27,6 +57,19 @@ public class OrderChildServiceImpl2Test {
@InjectMocks @InjectMocks
private OrderChildServiceImpl orderChildService; private OrderChildServiceImpl orderChildService;
@Mock
private OrderChildDao orderChildDao;
@Mock
private GdService gdService;
@Mock
private ClxMessageConfig messageConfig;
@Mock
private ClxMessageOpenapiFeign clxMessageOpenapiFeign;
@Mock
private LoadAppConfig appConfig;
@BeforeEach @BeforeEach
void setUp() { void setUp() {
// Setup common mock interactions here if any // Setup common mock interactions here if any
...@@ -49,4 +92,234 @@ public class OrderChildServiceImpl2Test { ...@@ -49,4 +92,234 @@ public class OrderChildServiceImpl2Test {
orderChildService.orderChildMessageNotice(); orderChildService.orderChildMessageNotice();
} }
} /**
\ No newline at end of file * 状态为到达货源地,超出范围,发短信,修改状态,修改已发短信状态
*/
@Test
void testOrderChildMessageNoticeListConfigEnabled() {
//模拟两个运单
List<OrderChild> mockOrderChildList = new ArrayList<>();
OrderChild child1 = new OrderChild();
child1.setChildNo("childNo1");
child1.setOrderGoodsNo("orderGoods1");
child1.setTruckNo("truckNo1");
child1.setRemoveLoadLimitStatus(0);
child1.setExitNoticeStatus(0);
//到达货源地
child1.setStatus(OrderChildEnum.Status.ARRIVE_SEND.getCode());
child1.setDriverMobile("12345678901");
mockOrderChildList.add(child1);
when(orderChildDao.listOrderChild(anyList(), any(), any())).thenReturn(mockOrderChildList);
Map<String, TruckTraceDTO> truckTraceMap = new HashMap<>();
TruckTraceDTO truckTraceDTO = new TruckTraceDTO();
truckTraceDTO.setLocation(new BigDecimal[]{BigDecimal.ONE, BigDecimal.TEN});
truckTraceDTO.setTruckNo("truckNo1");
truckTraceMap.put("truckNo1", truckTraceDTO);
when(redisTemplate.opsForHash()).thenReturn(hashOps);
when(hashOps.entries(RedisConstants.ZJXL_TRUCK_TRACE_LIST)).thenReturn(truckTraceMap);
OrderGoods orderGoods = new OrderGoods();
//货单
when(orderGoodsDao.getByOrderGoodsNo(child1.getOrderGoodsNo())).thenReturn(Optional.of(orderGoods));
when(driverNoticeConfigService.listConfig()).thenReturn(mockDriverNoticeConfigVO());
// gdRoute
GdRouteDTO gdRoute = new GdRouteDTO();
//设置3000 ,超出提醒范围了
gdRoute.setDistance(3000);
// 假设高德服务返回了一个有效的路线
Mockito.when(gdService.getRoute(any(), any(), any(), any())).thenReturn(Collections.singletonList(gdRoute));
// 调用方法
orderChildService.orderChildMessageNotice();
//验证运单状态
assertEquals(child1.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
assertEquals(child1.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
//看日志为已发短信
}
/**
* 状态为已装货,超出范围,发短信,修改状态,修改已发短信状态
*/
@Test
void testOrderChildMessageNoticeListConfigEnabled2() {
//模拟两个运单
List<OrderChild> mockOrderChildList = new ArrayList<>();
OrderChild child1 = new OrderChild();
child1.setChildNo("childNo1");
child1.setOrderGoodsNo("orderGoods1");
child1.setTruckNo("truckNo1");
child1.setRemoveLoadLimitStatus(0);
child1.setExitNoticeStatus(0);
//到达货源地
child1.setStatus(OrderChildEnum.Status.LOAD.getCode());
child1.setDriverMobile("12345678901");
mockOrderChildList.add(child1);
when(orderChildDao.listOrderChild(anyList(), any(), any())).thenReturn(mockOrderChildList);
Map<String, TruckTraceDTO> truckTraceMap = new HashMap<>();
TruckTraceDTO truckTraceDTO = new TruckTraceDTO();
truckTraceDTO.setLocation(new BigDecimal[]{BigDecimal.ONE, BigDecimal.TEN});
truckTraceDTO.setTruckNo("truckNo1");
truckTraceMap.put("truckNo1", truckTraceDTO);
when(redisTemplate.opsForHash()).thenReturn(hashOps);
when(hashOps.entries(RedisConstants.ZJXL_TRUCK_TRACE_LIST)).thenReturn(truckTraceMap);
OrderGoods orderGoods = new OrderGoods();
//货单
when(orderGoodsDao.getByOrderGoodsNo(child1.getOrderGoodsNo())).thenReturn(Optional.of(orderGoods));
when(driverNoticeConfigService.listConfig()).thenReturn(mockDriverNoticeConfigVO());
// gdRoute
GdRouteDTO gdRoute = new GdRouteDTO();
//设置3000 ,超出提醒范围了
gdRoute.setDistance(3000);
// 假设高德服务返回了一个有效的路线
Mockito.when(gdService.getRoute(any(), any(), any(), any())).thenReturn(Collections.singletonList(gdRoute));
App app = new App();
app.setAppNo("appNo");
app.setAppKey("appKey");
app.setCallback("callback");
Mockito.when(appConfig.getPurchaseManageApp()).thenReturn(app);
// 调用方法
orderChildService.orderChildMessageNotice();
SupervisionLoadInfoDto supervisionLoadInfoDto = new SupervisionLoadInfoDto();
supervisionLoadInfoDto.setTaskAddress("aaaa");
supervisionLoadInfoDto.setTaskContracts("bbbb");
supervisionLoadInfoDto.setTaskMobile("18888888888");
Result<SupervisionLoadInfoDto> r = Result.ok(supervisionLoadInfoDto);
// todo: jiangwujie 此处因为无法模拟静态方法,所以这个测试方法是不通过的, 有机会再说
Mockito.<Result<SupervisionLoadInfoDto>>when(OpenClient.doAction(any(), any())).thenReturn(r);
//验证运单状态
assertEquals(child1.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
assertEquals(child1.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
}
/**
* 验证取消监装限制
*
* @return
*/
@Test
public void test_orderChildMessageNotice_removeLimit() throws Exception {
//模拟两个运单
List<OrderChild> mockOrderChildList = new ArrayList<>();
OrderChild child1 = new OrderChild();
child1.setChildNo("childNo1");
child1.setOrderGoodsNo("orderGoods1");
child1.setTruckNo("truckNo1");
child1.setRemoveLoadLimitStatus(0);
child1.setExitNoticeStatus(0);
child1.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.INIT.getCode());
child1.setRemoveLoadLimitStatus(OrderChildEnum.RemoveLoadLimitStatus.REMOVED.getCode());
//到达货源地
child1.setStatus(OrderChildEnum.Status.ARRIVE_SEND.getCode());
child1.setDriverMobile("12345678901");
mockOrderChildList.add(child1);
when(orderChildDao.listOrderChild(anyList(), any(), any())).thenReturn(mockOrderChildList);
Map<String, TruckTraceDTO> truckTraceMap = new HashMap<>();
TruckTraceDTO truckTraceDTO = new TruckTraceDTO();
truckTraceDTO.setLocation(new BigDecimal[]{BigDecimal.ONE, BigDecimal.TEN});
truckTraceDTO.setTruckNo("truckNo1");
truckTraceMap.put("truckNo1", truckTraceDTO);
when(redisTemplate.opsForHash()).thenReturn(hashOps);
when(hashOps.entries(RedisConstants.ZJXL_TRUCK_TRACE_LIST)).thenReturn(truckTraceMap);
OrderGoods orderGoods = new OrderGoods();
//货单
when(orderGoodsDao.getByOrderGoodsNo(child1.getOrderGoodsNo())).thenReturn(Optional.of(orderGoods));
when(driverNoticeConfigService.listConfig()).thenReturn(mockDriverNoticeConfigVO());
// 调用方法
orderChildService.orderChildMessageNotice();
//验证运单状态
assertEquals(child1.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.INIT.getCode());
assertEquals(child1.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode());
//看日志为已发短信
}
/**
* 状态为到达货源地,未超出范围,修改驶入驶出状态,修改通知状态
*/
@Test
void testOrderChildMessageNotice_inRange() {
//模拟两个运单
List<OrderChild> mockOrderChildList = new ArrayList<>();
OrderChild child1 = new OrderChild();
child1.setChildNo("childNo1");
child1.setOrderGoodsNo("orderGoods1");
child1.setTruckNo("truckNo1");
//驶离
child1.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
child1.setRemoveLoadLimitStatus(0);
child1.setExitNoticeStatus(1);
//到达货源地
child1.setStatus(OrderChildEnum.Status.ARRIVE_SEND.getCode());
child1.setDriverMobile("12345678901");
mockOrderChildList.add(child1);
when(orderChildDao.listOrderChild(anyList(), any(), any())).thenReturn(mockOrderChildList);
Map<String, TruckTraceDTO> truckTraceMap = new HashMap<>();
TruckTraceDTO truckTraceDTO = new TruckTraceDTO();
truckTraceDTO.setLocation(new BigDecimal[]{BigDecimal.ONE, BigDecimal.TEN});
truckTraceDTO.setTruckNo("truckNo1");
truckTraceMap.put("truckNo1", truckTraceDTO);
when(redisTemplate.opsForHash()).thenReturn(hashOps);
when(hashOps.entries(RedisConstants.ZJXL_TRUCK_TRACE_LIST)).thenReturn(truckTraceMap);
OrderGoods orderGoods = new OrderGoods();
//货单
when(orderGoodsDao.getByOrderGoodsNo(child1.getOrderGoodsNo())).thenReturn(Optional.of(orderGoods));
when(driverNoticeConfigService.listConfig()).thenReturn(mockDriverNoticeConfigVO());
// gdRoute
GdRouteDTO gdRoute = new GdRouteDTO();
// 未超出范围
gdRoute.setDistance(1000);
// 假设高德服务返回了一个有效的路线
Mockito.when(gdService.getRoute(any(), any(), any(), any())).thenReturn(Collections.singletonList(gdRoute));
// 调用方法
orderChildService.orderChildMessageNotice();
//验证运单状态 -> 驶入
assertEquals(child1.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode());
// 通知状态改为未通知
assertEquals(child1.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode());
}
private DriverNoticeConfigVO mockDriverNoticeConfigVO() {
DriverNoticeConfigVO configVO = new DriverNoticeConfigVO();
//启用
configVO.setStatus(1);
//距离2公里
configVO.setNoticeTriggerDistance(new BigDecimal(2));
return configVO;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论