test(finance): cover internal wallet token boundary

This commit is contained in:
2026-09-05 16:46:40 +08:00
parent 8400636df4
commit f62283fb7f
@@ -0,0 +1,60 @@
package com.baiyue.finance;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.finance.controller.InternalFinanceWalletController;
import com.baiyue.finance.dto.FinanceWalletDtos.WalletFreezeRequest;
import com.baiyue.finance.dto.FinanceWalletDtos.WalletHoldActionRequest;
import com.baiyue.finance.service.FinanceWalletService;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.*;
class InternalFinanceWalletControllerTest {
private static final String TOKEN = "finance-internal-token";
@Test
void missingOrIncorrectServiceTokenIsRejectedBeforeWalletAccess() {
FinanceWalletService service = mock(FinanceWalletService.class);
InternalFinanceWalletController controller = new InternalFinanceWalletController(service, TOKEN);
assertThatThrownBy(() -> controller.account(null, 9L)).isInstanceOf(BizException.class);
assertThatThrownBy(() -> controller.account("wrong-token", 9L)).isInstanceOf(BizException.class);
verifyNoInteractions(service);
}
@Test
void correctServiceTokenAllowsAccountAndFreezeOperations() {
FinanceWalletService service = mock(FinanceWalletService.class);
InternalFinanceWalletController controller = new InternalFinanceWalletController(service, TOKEN);
WalletFreezeRequest request = new WalletFreezeRequest(new BigDecimal("88.50"),
"DROPSHIP", "DS-20260905-001", "一件代发预占");
assertThat(controller.account(TOKEN, 9L).successful()).isTrue();
assertThat(controller.freeze(TOKEN, "freeze-key", 9L, request).successful()).isTrue();
verify(service).account(9L);
verify(service).freeze(9L, "freeze-key", request);
verifyNoMoreInteractions(service);
}
@Test
void correctServiceTokenForwardsSettleAndReleaseWithIndependentIdempotencyKeys() {
FinanceWalletService service = mock(FinanceWalletService.class);
InternalFinanceWalletController controller = new InternalFinanceWalletController(service, TOKEN);
WalletHoldActionRequest settleRequest = new WalletHoldActionRequest("履约完成结算");
WalletHoldActionRequest releaseRequest = new WalletHoldActionRequest("订单取消释放");
assertThat(controller.settle(TOKEN, "settle-key", 9L, "DROPSHIP", "DS-001", settleRequest)
.successful()).isTrue();
assertThat(controller.release(TOKEN, "release-key", 9L, "DROPSHIP", "DS-002", releaseRequest)
.successful()).isTrue();
verify(service).settle(9L, "DROPSHIP", "DS-001", "settle-key", settleRequest);
verify(service).release(9L, "DROPSHIP", "DS-002", "release-key", releaseRequest);
verifyNoMoreInteractions(service);
}
}