diff --git a/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/conv40_50/AuditEvent40_50Test.java b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/conv40_50/AuditEvent40_50Test.java
new file mode 100644
index 000000000..244768be4
--- /dev/null
+++ b/org.hl7.fhir.convertors/src/test/java/org/hl7/fhir/convertors/conv40_50/AuditEvent40_50Test.java
@@ -0,0 +1,91 @@
+package org.hl7.fhir.convertors.conv40_50;
+
+import org.apache.commons.codec.binary.Base64;
+import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AuditEvent40_50Test {
+
+ public static final String THE_BASE_64_BINARY_STRING = "dGhpcyBpcyB2YWxpZCBiYXNlNjQ=";
+ public static final byte[] THE_BASE_64_BINARY_BYTE_ARRAY = Base64.decodeBase64(THE_BASE_64_BINARY_STRING.getBytes(ca.uhn.fhir.rest.api.Constants.CHARSET_UTF8));
+
+ public static final String INVALID_BASE_64_BINARY_STRING = "Picard was the best starship captain";
+ public static final byte[] INVALID_BASE_64_BINARY_BYTE_ARRAY = Base64.decodeBase64(THE_BASE_64_BINARY_STRING.getBytes(ca.uhn.fhir.rest.api.Constants.CHARSET_UTF8));
+
+
+ @Test
+ @DisplayName("Test r5 -> r4 AuditEvent conversion.")
+ public void testR5_R4() throws IOException {
+ InputStream r5_input = this.getClass().getResourceAsStream("/auditevent_50_with_base64binary.json");
+
+ org.hl7.fhir.r5.model.AuditEvent r5_actual = (org.hl7.fhir.r5.model.AuditEvent) new org.hl7.fhir.r5.formats.JsonParser().parse(r5_input);
+ org.hl7.fhir.r4.model.Resource r4_conv = VersionConvertorFactory_40_50.convertResource(r5_actual);
+
+ org.hl7.fhir.r4.formats.JsonParser r4_parser = new org.hl7.fhir.r4.formats.JsonParser();
+
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ r4_parser.compose(stream, r4_conv);
+
+ org.hl7.fhir.r4.model.Resource r4_streamed = (org.hl7.fhir.r4.model.AuditEvent) new org.hl7.fhir.r4.formats.JsonParser().parse(new ByteArrayInputStream(stream.toByteArray()));
+
+ assertArrayEquals(((org.hl7.fhir.r4.model.AuditEvent)r4_conv).getEntity().get(0).getQuery(), THE_BASE_64_BINARY_BYTE_ARRAY);
+ assertArrayEquals(((org.hl7.fhir.r4.model.AuditEvent)r4_streamed).getEntity().get(0).getQuery(), THE_BASE_64_BINARY_BYTE_ARRAY);
+ }
+
+ @Test
+ @DisplayName("Test r5 -> r4 AuditEvent conversion.")
+ public void testR4_R5() throws IOException {
+ InputStream r4_input = this.getClass().getResourceAsStream("/auditevent_40_with_base64binary.json");
+
+ org.hl7.fhir.r4.model.AuditEvent r4_actual = (org.hl7.fhir.r4.model.AuditEvent) new org.hl7.fhir.r4.formats.JsonParser().parse(r4_input);
+ org.hl7.fhir.r5.model.Resource r5_conv = VersionConvertorFactory_40_50.convertResource(r4_actual);
+
+ org.hl7.fhir.r5.formats.JsonParser r5_parser = new org.hl7.fhir.r5.formats.JsonParser();
+
+ ByteArrayOutputStream stream
+ = new ByteArrayOutputStream();
+
+ r5_parser.compose(stream, r5_conv);
+
+ org.hl7.fhir.r5.model.Resource r5_streamed = (org.hl7.fhir.r5.model.AuditEvent) new org.hl7.fhir.r5.formats.JsonParser().parse(new ByteArrayInputStream(stream.toByteArray()));
+
+ assertArrayEquals(((org.hl7.fhir.r5.model.AuditEvent)r5_conv).getEntity().get(0).getQuery(), THE_BASE_64_BINARY_BYTE_ARRAY);
+ assertArrayEquals(((org.hl7.fhir.r5.model.AuditEvent)r5_streamed).getEntity().get(0).getQuery(), THE_BASE_64_BINARY_BYTE_ARRAY);
+
+ }
+
+ @Test
+ @DisplayName("Test r5 -> r4 AuditEvent conversion with invalid Base64Binary.")
+ public void testR4_R5BadBase64Binary() throws IOException {
+ InputStream r4_input = this.getClass().getResourceAsStream("/auditevent_40_with_invalid_base64binary.json");
+
+ org.hl7.fhir.r4.model.AuditEvent r4_actual = (org.hl7.fhir.r4.model.AuditEvent) new org.hl7.fhir.r4.formats.JsonParser().parse(r4_input);
+
+ org.hl7.fhir.r5.model.Resource r5_conv = VersionConvertorFactory_40_50.convertResource(r4_actual);
+
+ org.hl7.fhir.r5.formats.JsonParser r5_parser = new org.hl7.fhir.r5.formats.JsonParser();
+
+ ByteArrayOutputStream stream
+ = new ByteArrayOutputStream();
+
+ r5_parser.compose(stream, r5_conv);
+
+ org.hl7.fhir.r5.model.Resource r5_streamed = (org.hl7.fhir.r5.model.AuditEvent) new org.hl7.fhir.r5.formats.JsonParser().parse(new ByteArrayInputStream(stream.toByteArray()));
+
+ System.out.println(((org.hl7.fhir.r5.model.AuditEvent)r5_conv).getEntity().get(0).getQueryElement().getValueAsString());
+
+ //FIXME we should not be even getting this far.
+ assertArrayEquals(((org.hl7.fhir.r5.model.AuditEvent)r5_conv).getEntity().get(0).getQuery(), INVALID_BASE_64_BINARY_BYTE_ARRAY);
+ assertArrayEquals(((org.hl7.fhir.r5.model.AuditEvent)r5_streamed).getEntity().get(0).getQuery(), INVALID_BASE_64_BINARY_BYTE_ARRAY);
+
+ }
+}
diff --git a/org.hl7.fhir.convertors/src/test/resources/auditevent_40_with_base64binary.json b/org.hl7.fhir.convertors/src/test/resources/auditevent_40_with_base64binary.json
new file mode 100644
index 000000000..ed6c0ff6d
--- /dev/null
+++ b/org.hl7.fhir.convertors/src/test/resources/auditevent_40_with_base64binary.json
@@ -0,0 +1,122 @@
+{
+ "resourceType": "AuditEvent",
+ "id": "example",
+ "text": {
+ "status": "generated",
+ "div": "
Application Start for under service login "Grahame" (id: Grahame's Test HL7Connect)
"
+ },
+ "type": {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110100",
+ "display": "Application Activity"
+ },
+ "subtype": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110120",
+ "display": "Application Start"
+ }
+ ],
+ "action": "E",
+ "recorded": "2012-10-25T22:04:27+11:00",
+ "outcome": "0",
+ "agent": [
+ {
+ "type": {
+ "coding": [
+ {
+ "system": "http://terminology.hl7.org/CodeSystem/extra-security-role-type",
+ "code": "humanuser",
+ "display": "human user"
+ }
+ ]
+ },
+ "role": [
+ {
+ "text": "Service User (Logon)"
+ }
+ ],
+ "who": {
+ "identifier": {
+ "value": "Grahame"
+ }
+ },
+ "requestor": false,
+ "network": {
+ "address": "127.0.0.1",
+ "type": "2"
+ }
+ },
+ {
+ "type": {
+ "coding": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110153",
+ "display": "Source Role ID"
+ }
+ ]
+ },
+ "who": {
+ "identifier": {
+ "system": "urn:oid:2.16.840.1.113883.4.2",
+ "value": "2.16.840.1.113883.4.2"
+ }
+ },
+ "altId": "6580",
+ "requestor": false,
+ "network": {
+ "address": "Workstation1.ehr.familyclinic.com",
+ "type": "1"
+ }
+ }
+ ],
+ "source": {
+ "site": "Development",
+ "observer": {
+ "display": "Grahame's Laptop"
+ },
+ "type": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110122",
+ "display": "Login"
+ }
+ ]
+ },
+ "entity": [
+ {
+ "what": {
+ "identifier": {
+ "type": {
+ "coding": [
+ {
+ "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
+ "code": "SNO"
+ }
+ ],
+ "text": "Dell Serial Number"
+ },
+ "value": "ABCDEF"
+ }
+ },
+ "type": {
+ "system": "http://terminology.hl7.org/CodeSystem/audit-entity-type",
+ "code": "4",
+ "display": "Other"
+ },
+ "role": {
+ "system": "http://terminology.hl7.org/CodeSystem/object-role",
+ "code": "4",
+ "display": "Domain Resource"
+ },
+ "lifecycle": {
+ "system": "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle",
+ "code": "6",
+ "display": "Access / Use"
+ },
+ "name": "Grahame's Laptop",
+ "query" : "dGhpcyBpcyB2YWxpZCBiYXNlNjQ="
+ }
+ ]
+}
\ No newline at end of file
diff --git a/org.hl7.fhir.convertors/src/test/resources/auditevent_40_with_invalid_base64binary.json b/org.hl7.fhir.convertors/src/test/resources/auditevent_40_with_invalid_base64binary.json
new file mode 100644
index 000000000..146cb7520
--- /dev/null
+++ b/org.hl7.fhir.convertors/src/test/resources/auditevent_40_with_invalid_base64binary.json
@@ -0,0 +1,122 @@
+{
+ "resourceType": "AuditEvent",
+ "id": "example",
+ "text": {
+ "status": "generated",
+ "div": "Application Start for under service login "Grahame" (id: Grahame's Test HL7Connect)
"
+ },
+ "type": {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110100",
+ "display": "Application Activity"
+ },
+ "subtype": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110120",
+ "display": "Application Start"
+ }
+ ],
+ "action": "E",
+ "recorded": "2012-10-25T22:04:27+11:00",
+ "outcome": "0",
+ "agent": [
+ {
+ "type": {
+ "coding": [
+ {
+ "system": "http://terminology.hl7.org/CodeSystem/extra-security-role-type",
+ "code": "humanuser",
+ "display": "human user"
+ }
+ ]
+ },
+ "role": [
+ {
+ "text": "Service User (Logon)"
+ }
+ ],
+ "who": {
+ "identifier": {
+ "value": "Grahame"
+ }
+ },
+ "requestor": false,
+ "network": {
+ "address": "127.0.0.1",
+ "type": "2"
+ }
+ },
+ {
+ "type": {
+ "coding": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110153",
+ "display": "Source Role ID"
+ }
+ ]
+ },
+ "who": {
+ "identifier": {
+ "system": "urn:oid:2.16.840.1.113883.4.2",
+ "value": "2.16.840.1.113883.4.2"
+ }
+ },
+ "altId": "6580",
+ "requestor": false,
+ "network": {
+ "address": "Workstation1.ehr.familyclinic.com",
+ "type": "1"
+ }
+ }
+ ],
+ "source": {
+ "site": "Development",
+ "observer": {
+ "display": "Grahame's Laptop"
+ },
+ "type": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110122",
+ "display": "Login"
+ }
+ ]
+ },
+ "entity": [
+ {
+ "what": {
+ "identifier": {
+ "type": {
+ "coding": [
+ {
+ "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
+ "code": "SNO"
+ }
+ ],
+ "text": "Dell Serial Number"
+ },
+ "value": "ABCDEF"
+ }
+ },
+ "type": {
+ "system": "http://terminology.hl7.org/CodeSystem/audit-entity-type",
+ "code": "4",
+ "display": "Other"
+ },
+ "role": {
+ "system": "http://terminology.hl7.org/CodeSystem/object-role",
+ "code": "4",
+ "display": "Domain Resource"
+ },
+ "lifecycle": {
+ "system": "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle",
+ "code": "6",
+ "display": "Access / Use"
+ },
+ "name": "Grahame's Laptop",
+ "query" : "Picard was the best starship captain"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/org.hl7.fhir.convertors/src/test/resources/auditevent_50_with_base64binary.json b/org.hl7.fhir.convertors/src/test/resources/auditevent_50_with_base64binary.json
new file mode 100644
index 000000000..5bd96899f
--- /dev/null
+++ b/org.hl7.fhir.convertors/src/test/resources/auditevent_50_with_base64binary.json
@@ -0,0 +1,117 @@
+{
+ "resourceType": "AuditEvent",
+ "id": "example",
+ "text": {
+ "status": "generated",
+ "div": "Application Start for under service login "Grahame" (id: Grahame's Test HL7Connect)
"
+ },
+ "category": [
+ {
+ "coding": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110100",
+ "display": "Application Activity"
+ }
+ ]
+ }
+ ],
+ "code": {
+ "coding": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110120",
+ "display": "Application Start"
+ }
+ ]
+ },
+ "action": "E",
+ "recorded": "2012-10-25T22:04:27+11:00",
+ "outcome": {
+ "code": {
+ "system": "http://terminology.hl7.org/CodeSystem/audit-event-outcome",
+ "code": "0",
+ "display": "Success"
+ }
+ },
+ "agent": [
+ {
+ "role": [
+ {
+ "text": "Service User (Logon)"
+ }
+ ],
+ "who": {
+ "identifier": {
+ "value": "Grahame"
+ }
+ },
+ "requestor": false
+ },
+ {
+ "extension": [
+ {
+ "url": "http://hl7.org/fhir/StructureDefinition/auditevent-AlternativeUserID",
+ "valueIdentifier": {
+ "type": {
+ "text": "process ID"
+ },
+ "value": "6580"
+ }
+ }
+ ],
+ "who": {
+ "identifier": {
+ "system": "urn:oid:2.16.840.1.113883.4.2",
+ "value": "2.16.840.1.113883.4.2"
+ }
+ },
+ "requestor": false,
+ "networkString": "Workstation1.ehr.familyclinic.com"
+ }
+ ],
+ "source": {
+ "observer": {
+ "display": "Grahame's Laptop"
+ },
+ "type": [
+ {
+ "coding": [
+ {
+ "system": "http://dicom.nema.org/resources/ontology/DCM",
+ "code": "110122",
+ "display": "Login"
+ }
+ ]
+ }
+ ]
+ },
+ "entity": [
+ {
+ "what": {
+ "identifier": {
+ "type": {
+ "coding": [
+ {
+ "system": "http://terminology.hl7.org/CodeSystem/v2-0203",
+ "code": "SNO"
+ }
+ ],
+ "text": "Dell Serial Number"
+ },
+ "value": "ABCDEF"
+ }
+ },
+ "role": {
+ "coding": [
+ {
+ "system": "http://terminology.hl7.org/CodeSystem/object-role",
+ "code": "4",
+ "display": "Domain Resource"
+ }
+ ]
+ },
+ "query" : "dGhpcyBpcyB2YWxpZCBiYXNlNjQ="
+ }
+ ]
+}
\ No newline at end of file