From df50eb00b8eb65d8b47ed7c31f69537206d5d27b Mon Sep 17 00:00:00 2001 From: Michael Folz Date: Thu, 16 Mar 2023 08:46:45 +0100 Subject: [PATCH] #84 - Validation endpoint for imported Structured Query - add endpoint POST /api/v2/query/validate --- .../query/v2/QueryHandlerRestController.java | 5 +++ .../v2/QueryHandlerRestControllerIT.java | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/main/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestController.java b/src/main/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestController.java index 490066c2..8e8bdd7d 100644 --- a/src/main/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestController.java +++ b/src/main/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestController.java @@ -210,6 +210,11 @@ public ResponseEntity getQueryContent(@PathVariable("id") Long queryId, return new ResponseEntity<>(queryContent, HttpStatus.OK); } + @PostMapping("/validate") + public ResponseEntity validateStructuredQuery(@Valid @RequestBody StructuredQuery query) { + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + private boolean hasAccess(Long queryId, Authentication authentication) { Set roles = authentication.getAuthorities().stream() .map(GrantedAuthority::getAuthority).collect(Collectors.toSet()); diff --git a/src/test/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestControllerIT.java b/src/test/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestControllerIT.java index 0aa0486d..ddfcfbcc 100644 --- a/src/test/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestControllerIT.java +++ b/src/test/java/de/numcodex/feasibility_gui_backend/query/v2/QueryHandlerRestControllerIT.java @@ -146,4 +146,40 @@ public void testRunQueryEndpoint_FailsOnDownstreamServiceError() throws Exceptio mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().is(HttpStatus.INTERNAL_SERVER_ERROR.value())); } + + @Test + @WithMockUser(roles = "FEASIBILITY_TEST_USER", username = "test") + public void testValidateQueryEndpoint_SucceedsOnValidQuery() throws Exception { + var termCode = new TermCode(); + termCode.setCode("LL2191-6"); + termCode.setSystem("http://loinc.org"); + termCode.setDisplay("Geschlecht"); + + var inclusionCriterion = new Criterion(); + inclusionCriterion.setTermCodes(new ArrayList<>(List.of(termCode))); + + var testQuery = new StructuredQuery(); + testQuery.setInclusionCriteria(List.of(List.of(inclusionCriterion))); + testQuery.setExclusionCriteria(List.of()); + testQuery.setDisplay("foo"); + testQuery.setVersion(URI.create("http://to_be_decided.com/draft-2/schema#")); + + doReturn(List.of()).when(termCodeValidation).getInvalidTermCodes(any(StructuredQuery.class)); + + mockMvc.perform(post(URI.create("/api/v2/query/validate")).with(csrf()) + .contentType(APPLICATION_JSON) + .content(jsonUtil.writeValueAsString(testQuery))) + .andExpect(status().isNoContent()); + } + + @Test + @WithMockUser(roles = "FEASIBILITY_TEST_USER") + public void testValidateQueryEndpoint_FailsOnInvalidStructuredQueryWith400() throws Exception { + var testQuery = new StructuredQuery(); + + mockMvc.perform(post(URI.create("/api/v2/query/validate")).with(csrf()) + .contentType(APPLICATION_JSON) + .content(jsonUtil.writeValueAsString(testQuery))) + .andExpect(status().isBadRequest()); + } }