diff --git a/pom.xml b/pom.xml index 2b0b19feaa77863d337c64e5568fabad88815fdf..3af917d6d067ae136e18166ce3bcbd96119c4a4f 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,10 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-data-rest</artifactId> + </dependency> <!-- Dev --> <dependency> @@ -51,6 +55,23 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-testcontainers</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>mongodb</artifactId> + <version>1.19.3</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>junit-jupiter</artifactId> + <version>1.19.3</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2db35bd1d7794fd943b4010ef35243d1a6077cac --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,4 @@ +spring: + data: + rest: + basePath: /api \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/admin/ApiRootITCase.java b/src/test/java/de/ozgcloud/admin/ApiRootITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..5dfe66fd65dc347c072f4711bbbe09d3705b410b --- /dev/null +++ b/src/test/java/de/ozgcloud/admin/ApiRootITCase.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch das Ministerium für Energiewende, Klimaschutz, Umwelt und Natur + * Zentrales IT-Management + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.admin; + +import static org.hamcrest.Matchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import de.ozgcloud.common.test.ITCase; +import lombok.SneakyThrows; + +/** + * Test that the spring-boot-starter-data-rest dependency is being used and spring.data.rest.basePath == /api + */ +@ITCase +class ApiRootITCase { + + private MockMvc mockMvc; + + @BeforeEach + void setup(WebApplicationContext context) { + mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); + } + + @Test + @SneakyThrows + void shouldHaveRESTApiRootEndpoint() { + mockMvc.perform(get("/api")) + .andExpect(status().isOk()) + .andExpect(content().contentType("application/hal+json")) + .andExpect(jsonPath("$._links.profile.href", endsWith("/api/profile"))); + } + + @Test + @SneakyThrows + void shouldHaveRESTApiProfileEndpoint() { + mockMvc.perform(get("/api/profile")) + .andExpect(status().isOk()) + .andExpect(content().contentType("application/hal+json")) + .andExpect(jsonPath("$._links.self.href", endsWith("/api/profile"))); + } + +} \ No newline at end of file