package com.tourguide.modules.finance.service; import com.tourguide.modules.user.mapper.GuideUserMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.math.BigDecimal; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; class GuideWithdrawableBalanceServiceTest { private GuideUserMapper guideUserMapper; private GuideWithdrawableBalanceService service; @BeforeEach void setUp() { guideUserMapper = mock(GuideUserMapper.class); service = new GuideWithdrawableBalanceService(guideUserMapper); } @Test void shouldReadStoredGuideBalance() { when(guideUserMapper.selectBalance(8L)).thenReturn(new BigDecimal("504.30")); assertThat(service.getAvailableAmount(8L)).isEqualByComparingTo("504.30"); } @Test void shouldAtomicallyDebitStoredBalance() { when(guideUserMapper.decreaseBalance(8L, new BigDecimal("80.00"))).thenReturn(1); assertThat(service.debit(8L, new BigDecimal("80"))).isTrue(); verify(guideUserMapper).decreaseBalance(8L, new BigDecimal("80.00")); } }