test: coinflip service
All checks were successful
CI / Get Changed Files (pull_request) Successful in 8s
CI / eslint (pull_request) Has been skipped
CI / Docker frontend validation (pull_request) Has been skipped
CI / oxlint (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / test-build (pull_request) Has been skipped
CI / Checkstyle Main (pull_request) Successful in 53s
CI / Docker backend validation (pull_request) Successful in 54s

This commit is contained in:
Phan Huy Tran 2025-05-28 09:21:03 +02:00
commit ce444c5e59
4 changed files with 85 additions and 2 deletions

View file

@ -0,0 +1,64 @@
package de.szut.casino.coinflip;
import de.szut.casino.shared.service.BalanceService;
import de.szut.casino.user.UserEntity;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.math.BigDecimal;
import java.util.Random;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
class CoinflipServiceTest {
@Mock
private BalanceService balanceService;
@Mock
private Random random;
@InjectMocks
private CoinflipService coinflipService;
private UserEntity user;
private CoinflipDto coinflipDto;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
user = new UserEntity();
user.setBalance(BigDecimal.valueOf(100));
coinflipDto = new CoinflipDto(BigDecimal.valueOf(10), CoinSide.HEAD);
}
@Test
void testPlay_userWins() {
when(random.nextBoolean()).thenReturn(true);
CoinflipResult result = coinflipService.play(user, coinflipDto);
assertTrue(result.isWin());
assertEquals(BigDecimal.valueOf(20), result.getPayout());
assertEquals(CoinSide.HEAD, result.getCoinSide());
verify(balanceService, times(1)).subtractFunds(user, BigDecimal.valueOf(10));
verify(balanceService, times(1)).addFunds(user, BigDecimal.valueOf(20));
}
@Test
void testPlay_userLoses() {
when(random.nextBoolean()).thenReturn(false);
CoinflipResult result = coinflipService.play(user, coinflipDto);
assertFalse(result.isWin());
assertEquals(BigDecimal.ZERO, result.getPayout());
assertEquals(CoinSide.TAILS, result.getCoinSide());
verify(balanceService, times(1)).subtractFunds(user, BigDecimal.valueOf(10));
verify(balanceService, never()).addFunds(any(), any());
}
}