Commit 45422d84ab1c3dab96381aff11d01c8731b65f1b
1 parent
9b9a1069
fix: 修复微信转账确认收款 packageInfo 丢失
- 转账中状态下允许补写缺失的 channelPackageInfo - 处理同步任务与发起转账接口并发更新转账状态的场景 - 增加仅空值时更新 channelPackageInfo 的 Mapper 方法 - 补充转账状态推进单测覆盖 Issue #1144
Showing
1 changed file
with
22 additions
and
18 deletions
yudao-module-pay/src/test/java/cn/iocoder/yudao/module/pay/service/transfer/PayTransferServiceTest.java
| @@ -18,7 +18,6 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; | @@ -18,7 +18,6 @@ import org.springframework.test.context.bean.override.mockito.MockitoBean; | ||
| 18 | 18 | ||
| 19 | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | 19 | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; |
| 20 | import static org.junit.jupiter.api.Assertions.assertEquals; | 20 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 21 | -import static org.junit.jupiter.api.Assertions.assertNull; | ||
| 22 | 21 | ||
| 23 | /** | 22 | /** |
| 24 | * {@link PayTransferServiceImpl} 的单元测试类 | 23 | * {@link PayTransferServiceImpl} 的单元测试类 |
| @@ -45,42 +44,47 @@ public class PayTransferServiceTest extends BaseDbAndRedisUnitTest { | @@ -45,42 +44,47 @@ public class PayTransferServiceTest extends BaseDbAndRedisUnitTest { | ||
| 45 | 44 | ||
| 46 | @Test | 45 | @Test |
| 47 | public void testNotifyTransferProgressing_fillChannelPackageInfoIfAbsent() { | 46 | public void testNotifyTransferProgressing_fillChannelPackageInfoIfAbsent() { |
| 48 | - // mock 数据(PayTransferDO):初始为等待转账 | 47 | + // mock 数据(PayTransferDO):同步任务先把 WAITING 更新为 PROCESSING,但是不返回 package 信息 |
| 49 | PayTransferDO transfer = randomPojo(PayTransferDO.class, | 48 | PayTransferDO transfer = randomPojo(PayTransferDO.class, |
| 50 | o -> o.setAppId(10L) | 49 | o -> o.setAppId(10L) |
| 51 | .setNo("T110") | 50 | .setNo("T110") |
| 52 | - .setStatus(PayTransferStatusEnum.WAITING.getStatus()) | 51 | + .setStatus(PayTransferStatusEnum.PROCESSING.getStatus()) |
| 53 | .setChannelPackageInfo(null)); | 52 | .setChannelPackageInfo(null)); |
| 54 | transferMapper.insert(transfer); | 53 | transferMapper.insert(transfer); |
| 55 | // 准备参数 | 54 | // 准备参数 |
| 56 | PayChannelDO channel = randomPojo(PayChannelDO.class, o -> o.setAppId(10L)); | 55 | PayChannelDO channel = randomPojo(PayChannelDO.class, o -> o.setAppId(10L)); |
| 57 | - PayTransferRespDTO syncNotify = PayTransferRespDTO.processingOf("WX_TRANSFER_110", | ||
| 58 | - "T110", "sync"); | ||
| 59 | - | ||
| 60 | - // 调用:模拟同步任务先把 WAITING 更新为 PROCESSING,但是不返回 package 信息 | ||
| 61 | - transferService.notifyTransfer(channel, syncNotify); | ||
| 62 | - | ||
| 63 | - // 断言:状态已转账中,package 信息为空 | ||
| 64 | - PayTransferDO dbTransfer = transferMapper.selectById(transfer.getId()); | ||
| 65 | - assertEquals(PayTransferStatusEnum.PROCESSING.getStatus(), dbTransfer.getStatus()); | ||
| 66 | - assertNull(dbTransfer.getChannelPackageInfo()); | ||
| 67 | - | ||
| 68 | - // 调用:模拟发起转账接口随后返回 PROCESSING,并携带微信确认收款 package 信息 | ||
| 69 | PayTransferRespDTO createNotify = PayTransferRespDTO.processingOf("WX_TRANSFER_110", | 56 | PayTransferRespDTO createNotify = PayTransferRespDTO.processingOf("WX_TRANSFER_110", |
| 70 | "T110", "create"); | 57 | "T110", "create"); |
| 71 | createNotify.setChannelPackageInfo("package-info-110"); | 58 | createNotify.setChannelPackageInfo("package-info-110"); |
| 59 | + | ||
| 60 | + // 调用:模拟发起转账接口随后返回 PROCESSING,并携带微信确认收款 package 信息 | ||
| 72 | transferService.notifyTransfer(channel, createNotify); | 61 | transferService.notifyTransfer(channel, createNotify); |
| 73 | 62 | ||
| 74 | // 断言:已是 PROCESSING 时仍会补写 package 信息 | 63 | // 断言:已是 PROCESSING 时仍会补写 package 信息 |
| 75 | - dbTransfer = transferMapper.selectById(transfer.getId()); | 64 | + PayTransferDO dbTransfer = transferMapper.selectById(transfer.getId()); |
| 76 | assertEquals(PayTransferStatusEnum.PROCESSING.getStatus(), dbTransfer.getStatus()); | 65 | assertEquals(PayTransferStatusEnum.PROCESSING.getStatus(), dbTransfer.getStatus()); |
| 77 | assertEquals("package-info-110", dbTransfer.getChannelPackageInfo()); | 66 | assertEquals("package-info-110", dbTransfer.getChannelPackageInfo()); |
| 67 | + } | ||
| 68 | + | ||
| 69 | + @Test | ||
| 70 | + public void testNotifyTransferProgressing_notOverwriteChannelPackageInfo() { | ||
| 71 | + // mock 数据(PayTransferDO):已经存在 package 信息 | ||
| 72 | + PayTransferDO transfer = randomPojo(PayTransferDO.class, | ||
| 73 | + o -> o.setAppId(10L) | ||
| 74 | + .setNo("T110") | ||
| 75 | + .setStatus(PayTransferStatusEnum.PROCESSING.getStatus()) | ||
| 76 | + .setChannelPackageInfo("package-info-110")); | ||
| 77 | + transferMapper.insert(transfer); | ||
| 78 | + // 准备参数 | ||
| 79 | + PayChannelDO channel = randomPojo(PayChannelDO.class, o -> o.setAppId(10L)); | ||
| 80 | + PayTransferRespDTO syncNotify = PayTransferRespDTO.processingOf("WX_TRANSFER_110", | ||
| 81 | + "T110", "sync"); | ||
| 78 | 82 | ||
| 79 | - // 调用:后续同步任务仍不返回 package 信息,不应覆盖已有值 | 83 | + // 调用:后续同步任务不返回 package 信息 |
| 80 | transferService.notifyTransfer(channel, syncNotify); | 84 | transferService.notifyTransfer(channel, syncNotify); |
| 81 | 85 | ||
| 82 | // 断言:已有 package 信息不被空值覆盖 | 86 | // 断言:已有 package 信息不被空值覆盖 |
| 83 | - dbTransfer = transferMapper.selectById(transfer.getId()); | 87 | + PayTransferDO dbTransfer = transferMapper.selectById(transfer.getId()); |
| 84 | assertEquals("package-info-110", dbTransfer.getChannelPackageInfo()); | 88 | assertEquals("package-info-110", dbTransfer.getChannelPackageInfo()); |
| 85 | } | 89 | } |
| 86 | 90 |