From cf569386adf3e15b4d774318b5609fd54930dc2b Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 10:49:04 +0100 Subject: [PATCH 001/506] add test for user controller --- .../szut/casino/user/UserControllerTest.java | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 backend/src/test/java/de/szut/casino/user/UserControllerTest.java 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..9620a87 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java @@ -0,0 +1,122 @@ +package de.szut.casino.user; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import de.szut.casino.user.dto.CreateUserDto; +import de.szut.casino.user.dto.GetUserDto; + +@WebMvcTest(UserController.class) +@AutoConfigureMockMvc(addFilters = false) // Disables Spring Security filters +public class UserControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Autowired + private ObjectMapper objectMapper; + + @MockBean + private UserService userService; + + private GetUserDto getUserDto; + private CreateUserDto createUserDto; + private UserEntity testUser; + private final String TEST_ID = "test-id-123"; + private final String AUTH_TOKEN = "Bearer test-token"; + + @BeforeEach + void setUp() { + getUserDto = new GetUserDto(); + getUserDto.setKeycloakId(TEST_ID); + getUserDto.setUsername("testuser"); + + testUser = new UserEntity(); + testUser.setKeycloakId(TEST_ID); + testUser.setUsername("testuser"); + + createUserDto = new CreateUserDto(); + createUserDto.setKeycloakId(TEST_ID); + createUserDto.setUsername("testuser"); + } + + @Test + void getUserByIdSuccess() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(true); + when(userService.getUser(TEST_ID)).thenReturn(getUserDto); + + mockMvc.perform(get("/user/" + TEST_ID)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.keycloakId").value(TEST_ID)) + .andExpect(jsonPath("$.username").value("testuser")); + } + + @Test + void getUserByIdNotFound() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(false); + + mockMvc.perform(get("/user/" + TEST_ID)) + .andExpect(status().isNotFound()); + } + + @Test + void createUserSuccess() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(false); + when(userService.createUser(any(CreateUserDto.class))).thenReturn(testUser); + + mockMvc.perform(post("/user") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(createUserDto))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.keycloakId").value(TEST_ID)) + .andExpect(jsonPath("$.username").value("testuser")); + } + + @Test + void createUserAlreadyExists() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(true); + + mockMvc.perform(post("/user") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(createUserDto))) + .andExpect(status().isFound()) + .andExpect(header().string("Location", "/user/" + TEST_ID)); + } + + @Test + void getCurrentUserSuccess() throws Exception { + when(userService.getCurrentUser(AUTH_TOKEN)).thenReturn(getUserDto); + + mockMvc.perform(get("/user") + .header("Authorization", AUTH_TOKEN)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.keycloakId").value(TEST_ID)) + .andExpect(jsonPath("$.username").value("testuser")); + } + + @Test + void getCurrentUserNotFound() throws Exception { + when(userService.getCurrentUser(anyString())).thenReturn(null); + + mockMvc.perform(get("/user") + .header("Authorization", AUTH_TOKEN)) + .andExpect(status().isNotFound()); + } +} \ No newline at end of file From 834cb559efe68ba46a574182c7cad2cf1e320297 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 10:54:21 +0100 Subject: [PATCH 002/506] add test for health controller --- .../casino/health/HealthControllerTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 backend/src/test/java/de/szut/casino/health/HealthControllerTest.java 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..1214c7a --- /dev/null +++ b/backend/src/test/java/de/szut/casino/health/HealthControllerTest.java @@ -0,0 +1,26 @@ +package de.szut.casino.health; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(HealthController.class) +@AutoConfigureMockMvc(addFilters = false) +public class HealthControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Test + void healthCheckReturnsUpStatus() throws Exception { + mockMvc.perform(get("/health")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("UP")); + } +} \ No newline at end of file From 39a9ca1831169a93c488ebbd50019cf9073af306 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 10:57:36 +0100 Subject: [PATCH 003/506] add test to ci --- .gitea/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 97dbeeb..5265980 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -35,6 +35,38 @@ jobs: - name: "Stop Gradle" working-directory: ./backend run: gradle --stop + + test: + name: "Test" + runs-on: "vps-4" + container: + image: "cimg/openjdk:22.0-node" + steps: + - name: "Checkout" + uses: actions/checkout@v3 + - name: Setup Java 22 + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: "22" + - name: "Cache Gradle dependencies" + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-common + restore-keys: | + gradle-${{ runner.os }}- + - name: "Prepare Gradle" + working-directory: ./backend + run: gradle clean + - name: "Test" + working-directory: ./backend + run: gradle test + - name: "Stop Gradle" + working-directory: ./backend + run: gradle --stop eslint: name: eslint From 74f598a24cfe447f5e30782d106ec9af58c748a0 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 11:01:23 +0100 Subject: [PATCH 004/506] remove comment --- .../src/test/java/de/szut/casino/user/UserControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/test/java/de/szut/casino/user/UserControllerTest.java b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java index 9620a87..2addb43 100644 --- a/backend/src/test/java/de/szut/casino/user/UserControllerTest.java +++ b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java @@ -24,7 +24,7 @@ import de.szut.casino.user.dto.CreateUserDto; import de.szut.casino.user.dto.GetUserDto; @WebMvcTest(UserController.class) -@AutoConfigureMockMvc(addFilters = false) // Disables Spring Security filters +@AutoConfigureMockMvc(addFilters = false) public class UserControllerTest { @Autowired From 08a1a5e87771c375102ae1ed26ba27aa30697b87 Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Thu, 6 Mar 2025 11:52:31 +0100 Subject: [PATCH 005/506] feat(deposit): implement modal animations with GSAP --- frontend/bun.lock | 3 + frontend/package.json | 1 + .../feature/deposit/deposit.component.html | 4 +- .../app/feature/deposit/deposit.component.ts | 60 ++++++++++++++++++- .../confirmation/confirmation.component.html | 4 +- .../confirmation/confirmation.component.ts | 33 +++++++++- .../components/navbar/navbar.component.html | 10 ++-- .../services/modal-animation.service.ts | 53 ++++++++++++++++ frontend/src/styles.css | 26 +++++++- 9 files changed, 177 insertions(+), 17 deletions(-) create mode 100644 frontend/src/app/shared/services/modal-animation.service.ts diff --git a/frontend/bun.lock b/frontend/bun.lock index f5631b4..5b0629c 100644 --- a/frontend/bun.lock +++ b/frontend/bun.lock @@ -19,6 +19,7 @@ "@fortawesome/free-solid-svg-icons": "^6.7.2", "@stripe/stripe-js": "^5.6.0", "@tailwindcss/postcss": "^4.0.3", + "gsap": "^3.12.7", "keycloak-angular": "^16.0.1", "keycloak-js": "^25.0.5", "postcss": "^8.5.1", @@ -1068,6 +1069,8 @@ "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], + "gsap": ["gsap@3.12.7", "", {}, "sha512-V4GsyVamhmKefvcAKaoy0h6si0xX7ogwBoBSs2CTJwt7luW0oZzC0LhdkyuKV8PJAXr7Yaj8pMjCKD4GJ+eEMg=="], + "handle-thing": ["handle-thing@2.0.1", "", {}, "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], diff --git a/frontend/package.json b/frontend/package.json index 646c8a4..0ad0967 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -28,6 +28,7 @@ "@fortawesome/free-solid-svg-icons": "^6.7.2", "@stripe/stripe-js": "^5.6.0", "@tailwindcss/postcss": "^4.0.3", + "gsap": "^3.12.7", "keycloak-angular": "^16.0.1", "keycloak-js": "^25.0.5", "postcss": "^8.5.1", diff --git a/frontend/src/app/feature/deposit/deposit.component.html b/frontend/src/app/feature/deposit/deposit.component.html index fdaf87a..e8e4dfb 100644 --- a/frontend/src/app/feature/deposit/deposit.component.html +++ b/frontend/src/app/feature/deposit/deposit.component.html @@ -1,6 +1,6 @@ @if (isOpen) { -