Commit ac5646b84d3960a79af8444ca327f7b0b27c37e1

Authored by YunaiV
1 parent cc853a2b

mall + pay:

1. 支付订单的过期关闭 Job[单测]
yudao-module-pay/yudao-module-pay-biz/src/test/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceTest.java
... ... @@ -956,4 +956,154 @@ public class PayOrderServiceTest extends BaseDbAndRedisUnitTest {
956 956 }
957 957 }
958 958  
  959 + @Test
  960 + public void testExpireOrder_orderExtension_isSuccess() {
  961 + // mock 数据(PayOrderDO)
  962 + PayOrderDO order = randomPojo(PayOrderDO.class,
  963 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  964 + .setExpireTime(addTime(Duration.ofMinutes(-1))));
  965 + orderMapper.insert(order);
  966 + // mock 数据(PayOrderExtensionDO 已支付)
  967 + PayOrderExtensionDO orderExtension = randomPojo(PayOrderExtensionDO.class,
  968 + o -> o.setStatus(PayOrderStatusEnum.SUCCESS.getStatus())
  969 + .setOrderId(order.getId()));
  970 + orderExtensionMapper.insert(orderExtension);
  971 + // mock 方法(PayClient)
  972 + PayClient client = mock(PayClient.class);
  973 + when(payClientFactory.getPayClient(eq(10L))).thenReturn(client);
  974 +
  975 + // 调用
  976 + int count = orderService.expireOrder();
  977 + // 断言
  978 + assertEquals(count, 0);
  979 + // 断言 order 没有变化,因为没更新
  980 + assertPojoEquals(order, orderMapper.selectOne(null));
  981 + }
  982 +
  983 + @Test
  984 + public void testExpireOrder_payClient_notFound() {
  985 + // mock 数据(PayOrderDO)
  986 + PayOrderDO order = randomPojo(PayOrderDO.class,
  987 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  988 + .setExpireTime(addTime(Duration.ofMinutes(-1))));
  989 + orderMapper.insert(order);
  990 + // mock 数据(PayOrderExtensionDO 等待中)
  991 + PayOrderExtensionDO orderExtension = randomPojo(PayOrderExtensionDO.class,
  992 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  993 + .setOrderId(order.getId())
  994 + .setChannelId(10L));
  995 + orderExtensionMapper.insert(orderExtension);
  996 +
  997 + // 调用
  998 + int count = orderService.expireOrder();
  999 + // 断言
  1000 + assertEquals(count, 0);
  1001 + // 断言 order 没有变化,因为没更新
  1002 + assertPojoEquals(order, orderMapper.selectOne(null));
  1003 + }
  1004 +
  1005 + @Test
  1006 + public void testExpireOrder_getOrder_isRefund() {
  1007 + // mock 数据(PayOrderDO)
  1008 + PayOrderDO order = randomPojo(PayOrderDO.class,
  1009 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  1010 + .setExpireTime(addTime(Duration.ofMinutes(-1))));
  1011 + orderMapper.insert(order);
  1012 + // mock 数据(PayOrderExtensionDO 等待中)
  1013 + PayOrderExtensionDO orderExtension = randomPojo(PayOrderExtensionDO.class,
  1014 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  1015 + .setOrderId(order.getId()).setNo("P110")
  1016 + .setChannelId(10L));
  1017 + orderExtensionMapper.insert(orderExtension);
  1018 + // mock 方法(PayClient)
  1019 + PayClient client = mock(PayClient.class);
  1020 + when(payClientFactory.getPayClient(eq(10L))).thenReturn(client);
  1021 + // mock 方法(PayClient 退款返回)
  1022 + PayOrderRespDTO respDTO = randomPojo(PayOrderRespDTO.class,
  1023 + o -> o.setStatus(PayOrderStatusEnum.REFUND.getStatus()));
  1024 + when(client.getOrder(eq("P110"))).thenReturn(respDTO);
  1025 +
  1026 + // 调用
  1027 + int count = orderService.expireOrder();
  1028 + // 断言
  1029 + assertEquals(count, 0);
  1030 + // 断言 order 没有变化,因为没更新
  1031 + assertPojoEquals(order, orderMapper.selectOne(null));
  1032 + }
  1033 +
  1034 + @Test
  1035 + public void testExpireOrder_getOrder_isSuccess() {
  1036 + PayOrderServiceImpl payOrderServiceImpl = mock(PayOrderServiceImpl.class);
  1037 + try (MockedStatic<SpringUtil> springUtilMockedStatic = mockStatic(SpringUtil.class)) {
  1038 + springUtilMockedStatic.when(() -> SpringUtil.getBean(eq(PayOrderServiceImpl.class)))
  1039 + .thenReturn(payOrderServiceImpl);
  1040 +
  1041 + // mock 数据(PayOrderDO)
  1042 + PayOrderDO order = randomPojo(PayOrderDO.class,
  1043 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  1044 + .setExpireTime(addTime(Duration.ofMinutes(-1))));
  1045 + orderMapper.insert(order);
  1046 + // mock 数据(PayOrderExtensionDO 等待中)
  1047 + PayOrderExtensionDO orderExtension = randomPojo(PayOrderExtensionDO.class,
  1048 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  1049 + .setOrderId(order.getId()).setNo("P110")
  1050 + .setChannelId(10L));
  1051 + orderExtensionMapper.insert(orderExtension);
  1052 + // mock 方法(PayClient)
  1053 + PayClient client = mock(PayClient.class);
  1054 + when(payClientFactory.getPayClient(eq(10L))).thenReturn(client);
  1055 + // mock 方法(PayClient 成功返回)
  1056 + PayOrderRespDTO respDTO = randomPojo(PayOrderRespDTO.class,
  1057 + o -> o.setStatus(PayOrderStatusEnum.SUCCESS.getStatus()));
  1058 + when(client.getOrder(eq("P110"))).thenReturn(respDTO);
  1059 + // mock 方法(PayChannelDO)
  1060 + PayChannelDO channel = randomPojo(PayChannelDO.class, o -> o.setId(10L));
  1061 + when(channelService.validPayChannel(eq(10L))).thenReturn(channel);
  1062 +
  1063 + // 调用
  1064 + int count = orderService.expireOrder();
  1065 + // 断言
  1066 + assertEquals(count, 0);
  1067 + // 断言 order 没有变化,因为没更新
  1068 + assertPojoEquals(order, orderMapper.selectOne(null));
  1069 + verify(payOrderServiceImpl).notifyOrder(same(channel), same(respDTO));
  1070 + }
  1071 + }
  1072 +
  1073 + @Test
  1074 + public void testExpireOrder_success() {
  1075 + // mock 数据(PayOrderDO)
  1076 + PayOrderDO order = randomPojo(PayOrderDO.class,
  1077 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  1078 + .setExpireTime(addTime(Duration.ofMinutes(-1))));
  1079 + orderMapper.insert(order);
  1080 + // mock 数据(PayOrderExtensionDO 等待中)
  1081 + PayOrderExtensionDO orderExtension = randomPojo(PayOrderExtensionDO.class,
  1082 + o -> o.setStatus(PayOrderStatusEnum.WAITING.getStatus())
  1083 + .setOrderId(order.getId()).setNo("P110")
  1084 + .setChannelId(10L));
  1085 + orderExtensionMapper.insert(orderExtension);
  1086 + // mock 方法(PayClient)
  1087 + PayClient client = mock(PayClient.class);
  1088 + when(payClientFactory.getPayClient(eq(10L))).thenReturn(client);
  1089 + // mock 方法(PayClient 关闭返回)
  1090 + PayOrderRespDTO respDTO = randomPojo(PayOrderRespDTO.class,
  1091 + o -> o.setStatus(PayOrderStatusEnum.CLOSED.getStatus()));
  1092 + when(client.getOrder(eq("P110"))).thenReturn(respDTO);
  1093 +
  1094 + // 调用
  1095 + int count = orderService.expireOrder();
  1096 + // 断言
  1097 + assertEquals(count, 1);
  1098 + // 断言 extension 变化
  1099 + orderExtension.setStatus(PayOrderStatusEnum.CLOSED.getStatus())
  1100 + .setChannelNotifyData(toJsonString(respDTO));
  1101 + assertPojoEquals(orderExtension, orderExtensionMapper.selectOne(null),
  1102 + "updateTime", "updater");
  1103 + // 断言 order 变化
  1104 + order.setStatus(PayOrderStatusEnum.CLOSED.getStatus());
  1105 + assertPojoEquals(order, orderMapper.selectOne(null),
  1106 + "updateTime", "updater");
  1107 + }
  1108 +
959 1109 }
... ...