From aa18bf15f155a18267fa68004a137bf2c4854ea0 Mon Sep 17 00:00:00 2001 From: csimonis Date: Wed, 28 May 2025 11:06:08 +0200 Subject: [PATCH] test: add backend tests for various controllers and services --- .gitea/workflows/ci.yml | 26 +++++++ .../BlackJackGameControllerTest.java | 23 +++++++ .../blackjack/BlackJackServiceTest.java | 23 +++++++ .../coinflip/CoinflipControllerTest.java | 67 +++++++++++++++++++ .../casino/deposit/DepositControllerTest.java | 23 +++++++ .../deposit/TransactionServiceTest.java | 23 +++++++ .../casino/deposit/WebhookControllerTest.java | 23 +++++++ .../szut/casino/dice/DiceControllerTest.java | 23 +++++++ .../de/szut/casino/dice/DiceServiceTest.java | 23 +++++++ .../casino/health/HealthControllerTest.java | 23 +++++++ .../lootboxes/LootBoxControllerTest.java | 1 + .../casino/lootboxes/LootBoxServiceTest.java | 23 +++++++ .../casino/security/AuthControllerTest.java | 23 +++++++ .../szut/casino/slots/SlotControllerTest.java | 23 +++++++ .../de/szut/casino/slots/SlotServiceTest.java | 23 +++++++ .../szut/casino/user/UserControllerTest.java | 23 +++++++ .../de/szut/casino/user/UserServiceTest.java | 23 +++++++ 17 files changed, 416 insertions(+) create mode 100644 backend/src/test/java/de/szut/casino/blackjack/BlackJackGameControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/blackjack/BlackJackServiceTest.java create mode 100644 backend/src/test/java/de/szut/casino/coinflip/CoinflipControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/deposit/DepositControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/deposit/TransactionServiceTest.java create mode 100644 backend/src/test/java/de/szut/casino/deposit/WebhookControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/dice/DiceControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/dice/DiceServiceTest.java create mode 100644 backend/src/test/java/de/szut/casino/health/HealthControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/lootboxes/LootBoxControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/lootboxes/LootBoxServiceTest.java create mode 100644 backend/src/test/java/de/szut/casino/security/AuthControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/slots/SlotControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/slots/SlotServiceTest.java create mode 100644 backend/src/test/java/de/szut/casino/user/UserControllerTest.java create mode 100644 backend/src/test/java/de/szut/casino/user/UserServiceTest.java diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index e277f53..a794432 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -78,6 +78,32 @@ jobs: working-directory: ./backend run: gradle --stop + backend-test: + runs-on: ubuntu-latest + name: "Backend Tests" + needs: changed_files + if: ${{ needs.changed_files.outputs.backend == 'true' || needs.changed_files.outputs.workflow == 'true' }} + container: + image: "cimg/openjdk:23.0-node" + steps: + - name: "Checkout" + uses: actions/checkout@v4 + - name: "Cache Gradle dependencies" + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('backend/**/*.java', 'backend/build.gradle.kts', 'backend/settings.gradle.kts') }} + restore-keys: | + gradle-${{ runner.os }}- + - name: "Run backend tests" + working-directory: ./backend + run: ./gradlew test + - name: "Stop Gradle" + working-directory: ./backend + run: ./gradlew --stop + validate-docker-frontend: runs-on: ubuntu-latest name: Docker frontend validation diff --git a/backend/src/test/java/de/szut/casino/blackjack/BlackJackGameControllerTest.java b/backend/src/test/java/de/szut/casino/blackjack/BlackJackGameControllerTest.java new file mode 100644 index 0000000..c364858 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/blackjack/BlackJackGameControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.blackjack; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class BlackJackGameControllerTest { + @InjectMocks + private BlackJackGameController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/blackjack/BlackJackServiceTest.java b/backend/src/test/java/de/szut/casino/blackjack/BlackJackServiceTest.java new file mode 100644 index 0000000..1b39060 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/blackjack/BlackJackServiceTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.blackjack; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class BlackJackServiceTest { + @InjectMocks + private BlackJackService blackJackService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testServiceNotNull() { + assertNotNull(blackJackService); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/coinflip/CoinflipControllerTest.java b/backend/src/test/java/de/szut/casino/coinflip/CoinflipControllerTest.java new file mode 100644 index 0000000..b83096f --- /dev/null +++ b/backend/src/test/java/de/szut/casino/coinflip/CoinflipControllerTest.java @@ -0,0 +1,67 @@ +package de.szut.casino.coinflip; + +import de.szut.casino.exceptionHandling.exceptions.InsufficientFundsException; +import de.szut.casino.exceptionHandling.exceptions.UserNotFoundException; +import de.szut.casino.shared.service.BalanceService; +import de.szut.casino.user.UserEntity; +import de.szut.casino.user.UserService; +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 org.springframework.http.ResponseEntity; + +import java.math.BigDecimal; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class CoinflipControllerTest { + @Mock + private UserService userService; + @Mock + private BalanceService balanceService; + @Mock + private CoinflipService coinflipService; + @InjectMocks + private CoinflipController coinflipController; + + 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 testCoinFlip_success() { + when(userService.getCurrentUser()).thenReturn(Optional.of(user)); + when(balanceService.hasFunds(user, coinflipDto)).thenReturn(true); + CoinflipResult result = new CoinflipResult(true, BigDecimal.valueOf(20), CoinSide.HEAD); + when(coinflipService.play(user, coinflipDto)).thenReturn(result); + + ResponseEntity response = coinflipController.coinFlip(coinflipDto); + + assertEquals(200, response.getStatusCodeValue()); + assertEquals(result, response.getBody()); + } + + @Test + void testCoinFlip_userNotFound() { + when(userService.getCurrentUser()).thenReturn(Optional.empty()); + assertThrows(UserNotFoundException.class, () -> coinflipController.coinFlip(coinflipDto)); + } + + @Test + void testCoinFlip_insufficientFunds() { + when(userService.getCurrentUser()).thenReturn(Optional.of(user)); + when(balanceService.hasFunds(user, coinflipDto)).thenReturn(false); + assertThrows(InsufficientFundsException.class, () -> coinflipController.coinFlip(coinflipDto)); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/deposit/DepositControllerTest.java b/backend/src/test/java/de/szut/casino/deposit/DepositControllerTest.java new file mode 100644 index 0000000..405ab9d --- /dev/null +++ b/backend/src/test/java/de/szut/casino/deposit/DepositControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.deposit; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class DepositControllerTest { + @InjectMocks + private DepositController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/deposit/TransactionServiceTest.java b/backend/src/test/java/de/szut/casino/deposit/TransactionServiceTest.java new file mode 100644 index 0000000..ca699e2 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/deposit/TransactionServiceTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.deposit; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class TransactionServiceTest { + @InjectMocks + private TransactionService transactionService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testServiceNotNull() { + assertNotNull(transactionService); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/deposit/WebhookControllerTest.java b/backend/src/test/java/de/szut/casino/deposit/WebhookControllerTest.java new file mode 100644 index 0000000..a65b4fd --- /dev/null +++ b/backend/src/test/java/de/szut/casino/deposit/WebhookControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.deposit; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class WebhookControllerTest { + @InjectMocks + private WebhookController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/dice/DiceControllerTest.java b/backend/src/test/java/de/szut/casino/dice/DiceControllerTest.java new file mode 100644 index 0000000..079f107 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/dice/DiceControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.dice; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class DiceControllerTest { + @InjectMocks + private DiceController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/dice/DiceServiceTest.java b/backend/src/test/java/de/szut/casino/dice/DiceServiceTest.java new file mode 100644 index 0000000..6e950ce --- /dev/null +++ b/backend/src/test/java/de/szut/casino/dice/DiceServiceTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.dice; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class DiceServiceTest { + @InjectMocks + private DiceService diceService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testServiceNotNull() { + assertNotNull(diceService); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/health/HealthControllerTest.java b/backend/src/test/java/de/szut/casino/health/HealthControllerTest.java new file mode 100644 index 0000000..f068c68 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/health/HealthControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.health; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class HealthControllerTest { + @InjectMocks + private HealthController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/lootboxes/LootBoxControllerTest.java b/backend/src/test/java/de/szut/casino/lootboxes/LootBoxControllerTest.java new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/backend/src/test/java/de/szut/casino/lootboxes/LootBoxControllerTest.java @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/lootboxes/LootBoxServiceTest.java b/backend/src/test/java/de/szut/casino/lootboxes/LootBoxServiceTest.java new file mode 100644 index 0000000..1f040fa --- /dev/null +++ b/backend/src/test/java/de/szut/casino/lootboxes/LootBoxServiceTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.lootboxes; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class LootBoxServiceTest { + @InjectMocks + private LootBoxService lootBoxService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testServiceNotNull() { + assertNotNull(lootBoxService); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/security/AuthControllerTest.java b/backend/src/test/java/de/szut/casino/security/AuthControllerTest.java new file mode 100644 index 0000000..6133ad0 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/security/AuthControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.security; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class AuthControllerTest { + @InjectMocks + private AuthController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/slots/SlotControllerTest.java b/backend/src/test/java/de/szut/casino/slots/SlotControllerTest.java new file mode 100644 index 0000000..b3a1882 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/slots/SlotControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.slots; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class SlotControllerTest { + @InjectMocks + private SlotController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/slots/SlotServiceTest.java b/backend/src/test/java/de/szut/casino/slots/SlotServiceTest.java new file mode 100644 index 0000000..b260017 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/slots/SlotServiceTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.slots; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class SlotServiceTest { + @InjectMocks + private SlotService slotService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testServiceNotNull() { + assertNotNull(slotService); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/user/UserControllerTest.java b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java new file mode 100644 index 0000000..6cefa0b --- /dev/null +++ b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.user; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class UserControllerTest { + @InjectMocks + private UserController controller; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testControllerNotNull() { + assertNotNull(controller); + } +} \ No newline at end of file diff --git a/backend/src/test/java/de/szut/casino/user/UserServiceTest.java b/backend/src/test/java/de/szut/casino/user/UserServiceTest.java new file mode 100644 index 0000000..cd330af --- /dev/null +++ b/backend/src/test/java/de/szut/casino/user/UserServiceTest.java @@ -0,0 +1,23 @@ +package de.szut.casino.user; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; + +import static org.junit.jupiter.api.Assertions.*; + +class UserServiceTest { + @InjectMocks + private UserService userService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testServiceNotNull() { + assertNotNull(userService); + } +} \ No newline at end of file