From fe358a5bec7717a2d046802b21cf38bd8a685cfe Mon Sep 17 00:00:00 2001 From: nmorasb Date: Wed, 5 Jun 2024 16:38:13 -0400 Subject: [PATCH 1/3] MAT-7166: generate .madie file and include in zip during test case export --- pom.xml | 2 +- .../services/TestCaseBundleService.java | 25 +++++++++++++++++++ .../services/TestCaseBundleServiceTest.java | 18 ++++++++++--- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 6d968c3e..1c60ce46 100644 --- a/pom.xml +++ b/pom.xml @@ -141,7 +141,7 @@ gov.cms.madie madie-java-models - 0.6.30-SNAPSHOT + 0.6.38-SNAPSHOT com.jayway.jsonpath diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java index db39a836..013134eb 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java @@ -20,6 +20,9 @@ import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import gov.cms.madie.models.dto.TestCaseExportMetaData; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.hl7.fhir.r4.model.BooleanType; @@ -317,6 +320,22 @@ private String generateReadMe(List testCases) { return readMe; } + private String generateMadieMetadataFile(List testCases) throws JsonProcessingException { + if (CollectionUtils.isEmpty(testCases)) { + return ""; + } + List metaDataList = testCases.stream().map(testCase -> + TestCaseExportMetaData.builder() + .testCaseId(testCase.getId()) + .title(testCase.getTitle()) + .series(testCase.getSeries()) + .description(testCase.getDescription()) + .build() + ).toList(); + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(metaDataList); + } + public void setExportBundleType(ExportDTO exportDTO, Measure measure) { if (exportDTO.getBundleType() != null) { BundleType bundleType = BundleType.valueOf(exportDTO.getBundleType().name()); @@ -361,6 +380,12 @@ public byte[] zipTestCaseContents( entry.setSize(readme.length()); zos.putNextEntry(entry); zos.write(readme.getBytes()); + // Add the .madie metadata file + String metadata = generateMadieMetadataFile(testCases); + ZipEntry metaDataEntry = new ZipEntry(".madie"); + entry.setSize(metadata.length()); + zos.putNextEntry(metaDataEntry); + zos.write(metadata.getBytes()); // Add the TestCases back the zip ZipEntry zipEntry = zis.getNextEntry(); while (zipEntry != null) { diff --git a/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java b/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java index 53a11608..8cf207d2 100644 --- a/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java +++ b/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java @@ -11,12 +11,15 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -112,7 +115,7 @@ void updateEntryTest() { } @Test - void zipTestCaseContentsTest() { + void zipTestCaseContentsTest() throws IOException { PackagingUtilityImpl utility = Mockito.mock(PackagingUtilityImpl.class); @@ -133,6 +136,10 @@ void zipTestCaseContentsTest() { testCaseBundleService.zipTestCaseContents( madieMeasure, exportableTestCaseBundle, testCaseList); assertNotNull(results); + Map zipContents = getZipContents(results); + assertEquals(2, zipContents.size()); + assertTrue(zipContents.containsKey("README.txt")); + assertTrue(zipContents.containsKey(".madie")); } @Test @@ -313,9 +320,10 @@ void getTestCaseExportBundleReturnsMeasureReportWithNoGroupPopulations() { assertEquals(0, measureReport.getGroup().size()); } - @Disabled +// @Disabled @Test - void zipTestCaseContents() throws IOException { + void zipTestCaseContents() throws IOException, ClassNotFoundException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { + Map testCaseBundleMap = new HashMap<>(); testCaseBundleMap.put( "test1", @@ -328,15 +336,17 @@ void zipTestCaseContents() throws IOException { .newJsonParser() .parseResource(Bundle.class, madieMeasure.getTestCases().get(1).getJson())); + factory.when(() -> PackagingUtilityFactory.getInstance(anyString())).thenReturn(new PackagingUtilityImpl()); byte[] result = testCaseBundleService.zipTestCaseContents( madieMeasure, testCaseBundleMap, madieMeasure.getTestCases()); Map zipContents = getZipContents(result); - assertEquals(3, zipContents.size()); + assertEquals(4, zipContents.size()); assertTrue(zipContents.containsKey("test1.json")); assertTrue(zipContents.containsKey("test2.json")); assertTrue(zipContents.containsKey("README.txt")); + assertTrue(zipContents.containsKey(".madie")); } private Map getZipContents(byte[] inputBytes) throws IOException { From e258c0522019b7d43785e39511e5f4fbd0b2a908 Mon Sep 17 00:00:00 2001 From: nmorasb Date: Fri, 7 Jun 2024 11:01:06 -0400 Subject: [PATCH 2/3] MAT-7166: add patient file to madie tc export file --- .../madie/madiefhirservice/services/TestCaseBundleService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java index 013134eb..ef555d9e 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java @@ -330,6 +330,7 @@ private String generateMadieMetadataFile(List testCases) throws JsonPr .title(testCase.getTitle()) .series(testCase.getSeries()) .description(testCase.getDescription()) + .patientId(testCase.getPatientId() == null ? null : testCase.getPatientId().toString()) .build() ).toList(); ObjectMapper mapper = new ObjectMapper(); From 2bc4d2ac361037d27df98beb354d4b05dc75b7bc Mon Sep 17 00:00:00 2001 From: nmorasb Date: Fri, 7 Jun 2024 11:05:32 -0400 Subject: [PATCH 3/3] MAT-7166: formatting changes from build --- .../services/TestCaseBundleService.java | 27 ++++++++++++------- .../services/TestCaseBundleServiceTest.java | 16 +++++++---- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java index 9ac32ce7..b41bd310 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java @@ -328,19 +328,26 @@ private String generateReadMe(List testCases) { return readMe; } - private String generateMadieMetadataFile(List testCases) throws JsonProcessingException { + private String generateMadieMetadataFile(List testCases) + throws JsonProcessingException { if (CollectionUtils.isEmpty(testCases)) { return ""; } - List metaDataList = testCases.stream().map(testCase -> - TestCaseExportMetaData.builder() - .testCaseId(testCase.getId()) - .title(testCase.getTitle()) - .series(testCase.getSeries()) - .description(testCase.getDescription()) - .patientId(testCase.getPatientId() == null ? null : testCase.getPatientId().toString()) - .build() - ).toList(); + List metaDataList = + testCases.stream() + .map( + testCase -> + TestCaseExportMetaData.builder() + .testCaseId(testCase.getId()) + .title(testCase.getTitle()) + .series(testCase.getSeries()) + .description(testCase.getDescription()) + .patientId( + testCase.getPatientId() == null + ? null + : testCase.getPatientId().toString()) + .build()) + .toList(); ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(metaDataList); } diff --git a/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java b/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java index d076b65e..647b501f 100644 --- a/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java +++ b/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java @@ -14,7 +14,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -38,7 +37,6 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -320,9 +318,15 @@ void getTestCaseExportBundleReturnsMeasureReportWithNoGroupPopulations() { assertEquals(0, measureReport.getGroup().size()); } -// @Disabled + // @Disabled @Test - void zipTestCaseContents() throws IOException, ClassNotFoundException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { + void zipTestCaseContents() + throws IOException, + ClassNotFoundException, + InvocationTargetException, + InstantiationException, + IllegalAccessException, + NoSuchMethodException { Map testCaseBundleMap = new HashMap<>(); testCaseBundleMap.put( @@ -336,7 +340,9 @@ void zipTestCaseContents() throws IOException, ClassNotFoundException, Invocatio .newJsonParser() .parseResource(Bundle.class, madieMeasure.getTestCases().get(1).getJson())); - factory.when(() -> PackagingUtilityFactory.getInstance(anyString())).thenReturn(new PackagingUtilityImpl()); + factory + .when(() -> PackagingUtilityFactory.getInstance(anyString())) + .thenReturn(new PackagingUtilityImpl()); byte[] result = testCaseBundleService.zipTestCaseContents( madieMeasure, testCaseBundleMap, madieMeasure.getTestCases());