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