Merge pull request 'test: coinflip service' (!224) from test-coinflip-service into main
All checks were successful
Release / Release (push) Successful in 1m2s
Release / Build Frontend Image (push) Successful in 27s
Release / Build Backend Image (push) Successful in 33s

Reviewed-on: #224
Reviewed-by: Jan K9f <jan@kjan.email>
This commit is contained in:
Phan Huy Tran 2025-05-28 07:36:37 +00:00
commit 74d812a012
No known key found for this signature in database
GPG key ID: 944223E4D46B7412
4 changed files with 85 additions and 2 deletions

View file

@ -2,13 +2,16 @@ package de.szut.casino.coinflip;
import de.szut.casino.shared.dto.BetDto;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class CoinflipDto extends BetDto {
@NotNull(message = "chosen side cannot be null")
private CoinSide coinSide;

View file

@ -9,11 +9,12 @@ import java.util.Random;
@Service
public class CoinflipService {
private final Random random = new Random();
private final Random random;
private final BalanceService balanceService;
public CoinflipService(BalanceService balanceService) {
public CoinflipService(BalanceService balanceService, Random random) {
this.balanceService = balanceService;
this.random = random;
}
public CoinflipResult play(UserEntity user, CoinflipDto coinflipDto) {

View file

@ -0,0 +1,15 @@
package de.szut.casino.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Random;
@Configuration
public class AppConfig {
@Bean
public Random random() {
return new Random();
}
}

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());
}
}