diff --git a/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java b/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java index 165366b5d3..1e56533ed3 100644 --- a/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java +++ b/server/src/main/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidator.java @@ -82,6 +82,8 @@ public Response validate(Response response, ConnectorMessage connectorMessage) { } else { response.setStatus(Status.SENT); } + } else { + handleInvalidACK(response); } } else { // ER7 response received @@ -175,9 +177,7 @@ public Response validate(Response response, ConnectorMessage connectorMessage) { } if (!valid) { - response.setStatus(Status.QUEUED); - response.setStatusMessage("Invalid HL7 v2.x acknowledgement received."); - response.setError(response.getStatusMessage()); + handleInvalidACK(response); } } } catch (Exception e) { @@ -300,6 +300,12 @@ private void handleNACK(Response response, boolean rejected, String msa3, String response.setError(nackMessage.toString()); } + private void handleInvalidACK(Response response) { + response.setStatus(Status.QUEUED); + response.setStatusMessage("Invalid HL7 v2.x acknowledgement received."); + response.setError(response.getStatusMessage()); + } + private void handleInvalidControlId(Response response, String originalControlID, String msa2) { response.setStatus(Status.ERROR); diff --git a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java b/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java index abdacf9740..ef576bd427 100644 --- a/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java +++ b/server/src/test/java/com/mirth/connect/plugins/datatypes/hl7v2/HL7v2ResponseValidatorTest.java @@ -236,13 +236,20 @@ public void testXmlErrorAndRejectedAcks() { assertEquals("NACK sent from receiver. (Rejected)", validate("CR").getStatusMessage()); } - /* - * Characterizes existing behaviour: an unknown ACK code in an ER7 response is QUEUED as invalid - * (see testUnknownAckCodeIsInvalid), but in an XML response the status is left as it was. - */ @Test - public void testXmlUnknownAckCodeLeavesStatusUnchanged() { - assertEquals(Status.SENT, validate("XX").getStatus()); + public void testXmlUnknownAckCodeIsInvalid() { + Response response = validate("XX"); + + assertEquals(Status.QUEUED, response.getStatus()); + assertEquals("Invalid HL7 v2.x acknowledgement received.", response.getStatusMessage()); + } + + @Test + public void testXmlMissingMsaIsInvalid() { + Response response = validate("ACK"); + + assertEquals(Status.QUEUED, response.getStatus()); + assertEquals("Invalid HL7 v2.x acknowledgement received.", response.getStatusMessage()); } @Test