From 0d0436658563d88962e98eb7d4802de07b28f6a3 Mon Sep 17 00:00:00 2001 From: adongare Date: Mon, 3 Feb 2025 13:52:06 -0500 Subject: [PATCH 1/2] MAT-8144 fetch valueset definitions --- .../resources/ResourceController.java | 11 ++++--- .../services/StructureDefinitionService.java | 16 ++++++++++ .../resources/ResourceControllerMvcTest.java | 29 +++++++++++++++++++ .../resources/ResourceControllerTest.java | 15 ++++++++++ .../StructureDefinitionServiceTest.java | 18 ++++++++++++ 5 files changed, 85 insertions(+), 4 deletions(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java b/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java index 83d401d..cefc3aa 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java @@ -6,10 +6,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -28,8 +25,14 @@ public StructureDefinitionDto getStructureDefinition(@PathVariable String struct return structureDefinitionService.getStructureDefinitionById(structureDefinitionId); } + @GetMapping(value = "/value-set-definition", produces = MediaType.APPLICATION_JSON_VALUE) + public String getValueSetDefinition(@RequestParam String url) { + return structureDefinitionService.getValueSetDefinition(url); + } + @GetMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE) public List getAllResources() { return structureDefinitionService.getAllResources(); } } +// "http://hl7.org/fhir/us/core/ValueSet/omb-ethnicity-category" diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java index 923060b..928e294 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java @@ -53,6 +53,22 @@ public StructureDefinitionDto getStructureDefinitionById(String structureDefinit .build(); } + /** + * Fetches the structure definition for the given resource + * + * @param url of the value set definition + */ + public String getValueSetDefinition(String url) { + IBaseResource structureDefinition = validationSupportChainQiCore600.fetchValueSet(url); + IParser parser = + validationSupportChainQiCore600 + .getFhirContext() + .newJsonParser() + .setParserErrorHandler(new StrictErrorHandler()) + .setPrettyPrint(true); + return parser.encodeResourceToString(structureDefinition); + } + /** * Return the ID, title, profile, category and type of all structure definitions that start with * QICore and have a kind of "resource" diff --git a/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerMvcTest.java b/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerMvcTest.java index 5814525..0ef438e 100644 --- a/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerMvcTest.java +++ b/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerMvcTest.java @@ -5,12 +5,14 @@ import gov.cms.madie.madiefhirservice.exceptions.ResourceNotFoundException; import gov.cms.madie.madiefhirservice.services.StructureDefinitionService; import gov.cms.madie.madiefhirservice.utils.ResourceFileUtil; +import org.assertj.core.api.Assertions; 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.http.HttpHeaders; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.List; @@ -110,4 +112,31 @@ void testThatGetStructureDefinitionReturnsDefinitionDto() throws Exception { // then verify(structureDefinitionService, times(1)).getStructureDefinitionById(eq("qicore-patient")); } + + @Test + void testGetValueSetDefinition() throws Exception { + // given + String url = "test"; + String valueSetDefinition = + "{\"resourceType\": \"ValueSet\", \"id\": \"omb-ethnicity-category\",\"url\": \"http://hl7.org/fhir/us/core/ValueSet/omb-ethnicity-category\"}"; + ; + when(structureDefinitionService.getValueSetDefinition(anyString())) + .thenReturn(valueSetDefinition); + + // when + MvcResult result = + mockMvc + .perform( + MockMvcRequestBuilders.get( + "/qicore/6_0_0/resources/value-set-definition?url=" + url) + .with(user(TEST_USER_ID)) + .with(csrf()) + .header(HttpHeaders.AUTHORIZATION, "test-okta")) + .andExpect(status().isOk()) + .andReturn(); + + // then + verify(structureDefinitionService, times(1)).getValueSetDefinition(eq(url)); + Assertions.assertThat(result.getResponse().getContentAsString()).isEqualTo(valueSetDefinition); + } } diff --git a/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerTest.java b/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerTest.java index 8fb4cda..7c63a6f 100644 --- a/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerTest.java +++ b/src/test/java/gov/cms/madie/madiefhirservice/resources/ResourceControllerTest.java @@ -85,4 +85,19 @@ void testThatGetStructureDefinitionReturnsDefinitionDto() { assertThat(output.getDefinition(), is(notNullValue())); assertThat(output.getDefinition().contains("\"id\": \"qicore-patient\""), is(true)); } + + @Test + void testGetValueSetDefinition() { + // given + String valueSetDefinition = + "{\"resourceType\": \"ValueSet\", \"id\": \"omb-ethnicity-category\",\"url\": \"http://hl7.org/fhir/us/core/ValueSet/omb-ethnicity-category\"}"; + when(structureDefinitionService.getValueSetDefinition(anyString())) + .thenReturn(valueSetDefinition); + + // when + String output = resourceController.getValueSetDefinition("url"); + + // then + assertThat(output, is(equalTo(valueSetDefinition))); + } } diff --git a/src/test/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionServiceTest.java b/src/test/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionServiceTest.java index 2ddfc89..ade6602 100644 --- a/src/test/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionServiceTest.java +++ b/src/test/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionServiceTest.java @@ -9,6 +9,7 @@ import org.hl7.fhir.r4.model.Extension; import org.hl7.fhir.r4.model.StringType; import org.hl7.fhir.r4.model.StructureDefinition; +import org.hl7.fhir.r4.model.ValueSet; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -337,4 +338,21 @@ void testGetCategoryByTypeReturnsCategoryFromExtension() { // then assertThat(output, is(equalTo("Base.Individuals"))); } + + @Test + void getValueSetDefinition() { + // given + ValueSet valueSet = new ValueSet().setUrl("test").setName("omb ethnicity category"); + when(validationSupportChainQiCore600.fetchValueSet(valueSet.getUrl())).thenReturn(valueSet); + when(validationSupportChainQiCore600.getFhirContext()).thenReturn(fhirContextQiCoreStu600); + // when + String output = structureDefinitionService.getValueSetDefinition(valueSet.getUrl()); + + // then + assertThat( + output, + is( + equalTo( + "{\n \"resourceType\": \"ValueSet\",\n \"url\": \"test\",\n \"name\": \"omb ethnicity category\"\n}"))); + } } From 98502dce75db9ed07ed8297a926551bf792992ea Mon Sep 17 00:00:00 2001 From: adongare Date: Mon, 3 Feb 2025 13:54:34 -0500 Subject: [PATCH 2/2] MAT-8144 update method documentation --- .../madie/madiefhirservice/resources/ResourceController.java | 1 - .../madiefhirservice/services/StructureDefinitionService.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java b/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java index cefc3aa..d56ae1f 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/resources/ResourceController.java @@ -35,4 +35,3 @@ public List getAllResources() { return structureDefinitionService.getAllResources(); } } -// "http://hl7.org/fhir/us/core/ValueSet/omb-ethnicity-category" diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java index 928e294..99da928 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/StructureDefinitionService.java @@ -54,7 +54,7 @@ public StructureDefinitionDto getStructureDefinitionById(String structureDefinit } /** - * Fetches the structure definition for the given resource + * Fetches the value set definition for the given value set url * * @param url of the value set definition */