test(finance): cover internal wallet token boundary
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user