From 171968d33ea8bb06a51c4471abcfc9c5a97a50c9 Mon Sep 17 00:00:00 2001 From: Manuel Prinz Date: Sun, 21 Apr 2024 16:36:16 +0200 Subject: [PATCH 1/2] Add basic controller tests --- pom.xml | 4 ++ .../bih/aft/controller/QueryController.java | 6 +-- .../aft/controller/QueryControllerTest.java | 47 +++++++++++++++++++ 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 src/test/java/org/bih/aft/controller/QueryControllerTest.java diff --git a/pom.xml b/pom.xml index f6a9944..24670b1 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,10 @@ org.springframework.boot spring-boot-starter + + org.springframework.boot + spring-boot-starter-web + org.springframework.boot spring-boot-starter-webflux diff --git a/src/main/java/org/bih/aft/controller/QueryController.java b/src/main/java/org/bih/aft/controller/QueryController.java index 20c400a..5dda65b 100644 --- a/src/main/java/org/bih/aft/controller/QueryController.java +++ b/src/main/java/org/bih/aft/controller/QueryController.java @@ -27,14 +27,10 @@ public QueryController( QueryUseCase queryService) { path = "/federate", consumes = "application/json", produces = "application/json") - public ResponseEntity federateQuery(@RequestBody String json) { + public ResponseEntity federateQuery(@RequestBody AQLinput aQlQuery) { log.info("Query received"); - ObjectMapper objectMapper = new ObjectMapper(); try { - AQLinput aQlQuery = objectMapper.readValue(json, AQLinput.class); return new ResponseEntity<>(queryUseCaseService.federate(aQlQuery), HttpStatus.OK); - } catch (JsonProcessingException e) { - return new ResponseEntity<>("{ \"message\" : \"Json malformed\" }", HttpStatus.BAD_REQUEST); }catch (InvalidCountQuery invalidCountException){ return new ResponseEntity<>("{ \"message\" : "+invalidCountException.getMessage()+" }", HttpStatus.BAD_REQUEST); } diff --git a/src/test/java/org/bih/aft/controller/QueryControllerTest.java b/src/test/java/org/bih/aft/controller/QueryControllerTest.java new file mode 100644 index 0000000..ad81af9 --- /dev/null +++ b/src/test/java/org/bih/aft/controller/QueryControllerTest.java @@ -0,0 +1,47 @@ +package org.bih.aft.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.bih.aft.exceptions.InvalidCountQuery; +import org.bih.aft.ports.QueryUseCase; +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.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@WebMvcTest(controllers = QueryController.class) +class QueryControllerTest { + @Autowired + private MockMvc mockMvc; + + @Autowired + private ObjectMapper objectMapper; + + @MockBean + private QueryUseCase queryUseCase; + + @Test + void whenValidInput_thenReturns200() throws Exception { + String body = "{\"aql\": \"Select e FROM EHR e\" }"; + mockMvc.perform(post("/query/local").contentType("application/json").content(body)) + .andExpect(status().isOk()) + .andExpect(content().string("")); + } + + @Test + void whenServiceThrowsInvalidCountQuery_thenReturn400AndSetMessage() throws Exception { + String body = "{\"aql\": \"Select e FROM EHR e\" }"; + + when(queryUseCase.local(any())).thenThrow(new InvalidCountQuery("asdasd")); + + mockMvc.perform(post("/query/local").contentType("application/json").content(body)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.message").value("asdasd")); + } +} From 27c332575eb51e6e2e0dcfe2be0734304f0cf04e Mon Sep 17 00:00:00 2001 From: Manuel Prinz Date: Sun, 21 Apr 2024 16:39:06 +0200 Subject: [PATCH 2/2] Add missing annotation --- src/main/java/org/bih/aft/service/DefaultWebQueryService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/bih/aft/service/DefaultWebQueryService.java b/src/main/java/org/bih/aft/service/DefaultWebQueryService.java index b3794a8..88a2f7b 100644 --- a/src/main/java/org/bih/aft/service/DefaultWebQueryService.java +++ b/src/main/java/org/bih/aft/service/DefaultWebQueryService.java @@ -9,10 +9,12 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; @Slf4j +@Service public class DefaultWebQueryService implements QueryService { @Override