diff --git a/service/src/main/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingService.java b/service/src/main/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingService.java index 0a3ec0540..69d1d4bec 100644 --- a/service/src/main/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingService.java +++ b/service/src/main/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingService.java @@ -28,6 +28,7 @@ import uk.nhs.adaptors.gp2gp.ehr.utils.ResourceExtractor; import uk.nhs.adaptors.gp2gp.mhs.model.Identifier; import uk.nhs.adaptors.gp2gp.mhs.model.OutboundMessage; +import uk.nhs.adaptors.gp2gp.transformjsontoxmltool.XmlSchemaValidator; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -57,6 +58,7 @@ public class StructuredRecordMappingService { private final RandomIdGeneratorService randomIdGeneratorService; private final SupportedContentTypes supportedContentTypes; private final EhrExtractStatusService ehrExtractStatusService; + private final XmlSchemaValidator xmlSchemaValidator; private DocumentBuilder documentBuilder; @@ -151,6 +153,8 @@ public String mapStructuredRecordToEhrExtractXml(GetGpcStructuredTaskDefinition .mapBundleToEhrFhirExtractParams(structuredTaskDefinition, bundle); String ehrExtractContent = ehrExtractMapper.mapEhrExtractToXml(ehrExtractTemplateParameters); + xmlSchemaValidator.validateOutputToXmlSchema(structuredTaskDefinition.getConversationId(), ehrExtractContent); + ehrExtractStatusService.saveEhrExtractMessageId(structuredTaskDefinition.getConversationId(), ehrExtractTemplateParameters.getEhrExtractId()); diff --git a/service/src/main/java/uk/nhs/adaptors/gp2gp/transformjsontoxmltool/TransformJsonToXml.java b/service/src/main/java/uk/nhs/adaptors/gp2gp/transformjsontoxmltool/TransformJsonToXml.java index 19dde3b36..30cffdaa1 100644 --- a/service/src/main/java/uk/nhs/adaptors/gp2gp/transformjsontoxmltool/TransformJsonToXml.java +++ b/service/src/main/java/uk/nhs/adaptors/gp2gp/transformjsontoxmltool/TransformJsonToXml.java @@ -65,17 +65,22 @@ public static void main(String[] args) { @Override public void run(String... args) { try { - getFiles().forEach(file -> { - String xmlResult = mapJsonToXml(file.getJsonFileInput()); - writeToFile(xmlResult, file.getJsonFileName()); - xmlSchemaValidator.validateOutputToXmlSchema(file.getJsonFileName(), xmlResult); - }); + getFiles().forEach(this::processAndValidateFile); } catch (NHSNumberNotFound | UnreadableJsonFileException | NoJsonFileFound | Hl7TranslatedResponseError e) { LOGGER.error("error: " + e.getMessage()); } + LOGGER.info("end"); } + private void processAndValidateFile(InputFile file) { + String xmlResult = mapJsonToXml(file.getJsonFileInput()); + + writeToFile(xmlResult, file.getJsonFileName()); + + xmlSchemaValidator.validateOutputToXmlSchema(file.getJsonFileName(), xmlResult); + } + private List getFiles() throws UnreadableJsonFileException, NoJsonFileFound { File[] files = new File(JSON_FILE_INPUT_PATH).listFiles(); List jsonStringInputs = new ArrayList<>(); diff --git a/service/src/test/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingServiceTest.java b/service/src/test/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingServiceTest.java index 1a990d6ce..5181d82a9 100644 --- a/service/src/test/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingServiceTest.java +++ b/service/src/test/java/uk/nhs/adaptors/gp2gp/gpc/StructuredRecordMappingServiceTest.java @@ -37,6 +37,7 @@ import uk.nhs.adaptors.gp2gp.ehr.mapper.SupportedContentTypes; import uk.nhs.adaptors.gp2gp.ehr.mapper.parameters.EhrExtractTemplateParameters; import uk.nhs.adaptors.gp2gp.mhs.model.OutboundMessage; +import uk.nhs.adaptors.gp2gp.transformjsontoxmltool.XmlSchemaValidator; import wiremock.org.custommonkey.xmlunit.DetailedDiff; import wiremock.org.custommonkey.xmlunit.XMLUnit; @@ -68,6 +69,8 @@ class StructuredRecordMappingServiceTest { private SupportedContentTypes supportedContentTypes; @Mock private EhrExtractStatusService ehrExtractStatusService; + @Mock + private XmlSchemaValidator xmlSchemaValidator; @InjectMocks private StructuredRecordMappingService structuredRecordMappingService; @@ -280,6 +283,31 @@ void When_BuildingSkeletonForEhrExtractWithoutChildComponentNodesToReplace_Expec assertXMLEquals(skeletonEhrExtract, expectedSkeletonEhrExtract); } + @Test + void When_MapStructuredRecordToEhrExtractXml_Expect_XmlValidatedAndReturned() { + var structuredTaskDefinition = mock(GetGpcStructuredTaskDefinition.class); + var bundle = mock(Bundle.class); + var ehrExtractTemplateParameters = mock(EhrExtractTemplateParameters.class); + var ehrExtractContent = "ehrExtractXmlContent"; + var expectedOutput = "wrappedEhrExtractXml"; + var conversationId = "conversationId123"; + + when(ehrExtractMapper.mapBundleToEhrFhirExtractParams(structuredTaskDefinition, bundle)) + .thenReturn(ehrExtractTemplateParameters); + when(ehrExtractMapper.mapEhrExtractToXml(ehrExtractTemplateParameters)) + .thenReturn(ehrExtractContent); + when(structuredTaskDefinition.getConversationId()) + .thenReturn(conversationId); + when(outputMessageWrapperMapper.map(structuredTaskDefinition, ehrExtractContent)) + .thenReturn(expectedOutput); + + var actualOutput = structuredRecordMappingService.mapStructuredRecordToEhrExtractXml(structuredTaskDefinition, bundle); + + verify(xmlSchemaValidator).validateOutputToXmlSchema("conversationId123", ehrExtractContent); + assertThat(actualOutput).isEqualTo(expectedOutput); + } + + public static void assertXMLEquals(String actualXML, String expectedXML) throws Exception { XMLUnit.setIgnoreWhitespace(true);