Commit ac5646b84d3960a79af8444ca327f7b0b27c37e1
1 parent
cc853a2b
mall + pay:
1. 支付订单的过期关闭 Job[单测]
Showing
1 changed file
with
150 additions
and
0 deletions
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,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 | } |