From f62283fb7ffd0502f172c3c33ee284a9c375970c Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 5 Sep 2026 16:46:40 +0800 Subject: [PATCH] test(finance): cover internal wallet token boundary --- .../InternalFinanceWalletControllerTest.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 finance/src/test/java/com/baiyue/finance/InternalFinanceWalletControllerTest.java diff --git a/finance/src/test/java/com/baiyue/finance/InternalFinanceWalletControllerTest.java b/finance/src/test/java/com/baiyue/finance/InternalFinanceWalletControllerTest.java new file mode 100644 index 000000000..24a61d42f --- /dev/null +++ b/finance/src/test/java/com/baiyue/finance/InternalFinanceWalletControllerTest.java @@ -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); + } +}