| | |
| | | import com.tourguide.modules.finance.entity.GuideWithdrawalAccount; |
| | | import com.tourguide.modules.finance.mapper.GuideWithdrawalMapper; |
| | | import com.tourguide.modules.user.entity.GuideUser; |
| | | import com.tourguide.modules.user.entity.GuideTeam; |
| | | import com.tourguide.modules.user.mapper.GuideTeamMapper; |
| | | import com.tourguide.modules.user.mapper.GuideUserMapper; |
| | | import com.tourguide.modules.user.service.GuideUserService; |
| | | import org.junit.jupiter.api.BeforeEach; |
| | | import org.junit.jupiter.api.Test; |
| | |
| | | private GuideWithdrawableBalanceService balanceService; |
| | | private GuideWithdrawalStateService stateService; |
| | | private GuideWithdrawalPayoutService payoutService; |
| | | private GuideTeamMapper teamMapper; |
| | | private GuideUserMapper guideUserMapper; |
| | | private GuideWithdrawalService service; |
| | | |
| | | @BeforeEach |
| | |
| | | balanceService = mock(GuideWithdrawableBalanceService.class); |
| | | stateService = mock(GuideWithdrawalStateService.class); |
| | | payoutService = mock(GuideWithdrawalPayoutService.class); |
| | | teamMapper = mock(GuideTeamMapper.class); |
| | | guideUserMapper = mock(GuideUserMapper.class); |
| | | service = new GuideWithdrawalService(withdrawalMapper, settlementService, |
| | | guideUserService, balanceService, stateService, payoutService); |
| | | guideUserService, balanceService, stateService, payoutService, teamMapper, guideUserMapper); |
| | | } |
| | | |
| | | @Test |
| | | void createShouldReserveAvailableBalanceAndPersistCardSnapshot() throws Exception { |
| | | GuideUser guide = new GuideUser(); |
| | | guide.setId(8L); |
| | | guide.setRealName("张三"); |
| | | guide.setMobile("13800138000"); |
| | | guide.setStatus(1); |
| | | GuideWithdrawalAccount account = new GuideWithdrawalAccount(); |
| | | account.setId(10); |
| | | account.setHuifuId("HF100"); |
| | | account.setBankName("招商银行"); |
| | | account.setBankCardCode("6225888888885678"); |
| | | when(guideUserService.findEnabledById(8L)).thenReturn(guide); |
| | | when(guideUserMapper.selectForUpdate(8L)).thenReturn(guide); |
| | | when(settlementService.requireApprovedCardForUpdate(8L, 10)).thenReturn(account); |
| | | when(balanceService.debit(8L, new BigDecimal("200.00"))).thenReturn(true); |
| | | doAnswer(invocation -> { |
| | |
| | | } |
| | | |
| | | @Test |
| | | void createShouldReserveCollectionTeamBalance() { |
| | | GuideUser guide = new GuideUser(); |
| | | guide.setId(8L); |
| | | guide.setTeamId(6L); |
| | | guide.setRealName("张三"); |
| | | guide.setMobile("13800138000"); |
| | | guide.setStatus(1); |
| | | GuideTeam team = new GuideTeam(); |
| | | team.setId(6L); |
| | | team.setCollectionGuideId(8L); |
| | | GuideWithdrawalAccount account = new GuideWithdrawalAccount(); |
| | | account.setId(10); |
| | | account.setBankName("招商银行"); |
| | | account.setBankCardCode("6225888888885678"); |
| | | when(guideUserService.findEnabledById(8L)).thenReturn(guide); |
| | | when(guideUserMapper.selectForUpdate(8L)).thenReturn(guide); |
| | | when(teamMapper.selectById(6L)).thenReturn(team); |
| | | when(settlementService.requireApprovedCardForUpdate(8L, 10)).thenReturn(account); |
| | | when(balanceService.debitTeam(6L, new BigDecimal("200.00"))).thenReturn(true); |
| | | GuideWithdrawalCreateRequest request = new GuideWithdrawalCreateRequest(); |
| | | request.setAmount(new BigDecimal("200.00")); |
| | | request.setBankCardId(10); |
| | | |
| | | WithdrawalResponse response = service.create(8L, request); |
| | | |
| | | assertThat(response.getTeamId()).isEqualTo(6L); |
| | | verify(balanceService).debitTeam(6L, new BigDecimal("200.00")); |
| | | verify(balanceService, never()).debit(8L, new BigDecimal("200.00")); |
| | | } |
| | | |
| | | @Test |
| | | void nonTerminalCashCallbackShouldRemainProcessing() { |
| | | GuideWithdrawal withdrawal = processingWithdrawal(); |
| | | GuideWithdrawalAccount account = new GuideWithdrawalAccount(); |