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 | 18 | |
| 19 | 19 | import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; |
| 20 | 20 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 21 | -import static org.junit.jupiter.api.Assertions.assertNull; | |
| 22 | 21 | |
| 23 | 22 | /** |
| 24 | 23 | * {@link PayTransferServiceImpl} 的单元测试类 |
| ... | ... | @@ -45,42 +44,47 @@ public class PayTransferServiceTest extends BaseDbAndRedisUnitTest { |
| 45 | 44 | |
| 46 | 45 | @Test |
| 47 | 46 | public void testNotifyTransferProgressing_fillChannelPackageInfoIfAbsent() { |
| 48 | - // mock 数据(PayTransferDO):初始为等待转账 | |
| 47 | + // mock 数据(PayTransferDO):同步任务先把 WAITING 更新为 PROCESSING,但是不返回 package 信息 | |
| 49 | 48 | PayTransferDO transfer = randomPojo(PayTransferDO.class, |
| 50 | 49 | o -> o.setAppId(10L) |
| 51 | 50 | .setNo("T110") |
| 52 | - .setStatus(PayTransferStatusEnum.WAITING.getStatus()) | |
| 51 | + .setStatus(PayTransferStatusEnum.PROCESSING.getStatus()) | |
| 53 | 52 | .setChannelPackageInfo(null)); |
| 54 | 53 | transferMapper.insert(transfer); |
| 55 | 54 | // 准备参数 |
| 56 | 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 | 56 | PayTransferRespDTO createNotify = PayTransferRespDTO.processingOf("WX_TRANSFER_110", |
| 70 | 57 | "T110", "create"); |
| 71 | 58 | createNotify.setChannelPackageInfo("package-info-110"); |
| 59 | + | |
| 60 | + // 调用:模拟发起转账接口随后返回 PROCESSING,并携带微信确认收款 package 信息 | |
| 72 | 61 | transferService.notifyTransfer(channel, createNotify); |
| 73 | 62 | |
| 74 | 63 | // 断言:已是 PROCESSING 时仍会补写 package 信息 |
| 75 | - dbTransfer = transferMapper.selectById(transfer.getId()); | |
| 64 | + PayTransferDO dbTransfer = transferMapper.selectById(transfer.getId()); | |
| 76 | 65 | assertEquals(PayTransferStatusEnum.PROCESSING.getStatus(), dbTransfer.getStatus()); |
| 77 | 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 | 84 | transferService.notifyTransfer(channel, syncNotify); |
| 81 | 85 | |
| 82 | 86 | // 断言:已有 package 信息不被空值覆盖 |
| 83 | - dbTransfer = transferMapper.selectById(transfer.getId()); | |
| 87 | + PayTransferDO dbTransfer = transferMapper.selectById(transfer.getId()); | |
| 84 | 88 | assertEquals("package-info-110", dbTransfer.getChannelPackageInfo()); |
| 85 | 89 | } |
| 86 | 90 | ... | ... |