liujie
2026-09-09 39f6fca28e3f78abe48f08e474ec011abb990b36
backend/src/test/java/com/tourguide/modules/finance/service/GuideWithdrawalServiceTest.java
@@ -7,6 +7,9 @@
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;
@@ -28,6 +31,8 @@
    private GuideWithdrawableBalanceService balanceService;
    private GuideWithdrawalStateService stateService;
    private GuideWithdrawalPayoutService payoutService;
    private GuideTeamMapper teamMapper;
    private GuideUserMapper guideUserMapper;
    private GuideWithdrawalService service;
    @BeforeEach
@@ -38,21 +43,26 @@
        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 -> {
@@ -118,6 +128,37 @@
    }
    @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();