You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2015/03/25 10:46:25 UTC

camel git commit: Added some validation test for HL7 Dataformat marshalling

Repository: camel
Updated Branches:
  refs/heads/master 7584d4c9c -> f078028be


Added some validation test for HL7 Dataformat marshalling


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f078028b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f078028b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f078028b

Branch: refs/heads/master
Commit: f078028be5970c9f36b9555afd2ffc974f470bf1
Parents: 7584d4c
Author: Willem Jiang <wi...@gmail.com>
Authored: Wed Mar 25 17:45:52 2015 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Wed Mar 25 17:46:12 2015 +0800

----------------------------------------------------------------------
 .../camel/component/hl7/HL7ValidateTest.java    | 77 +++++++++++++++++++-
 1 file changed, 75 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f078028b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ValidateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ValidateTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ValidateTest.java
index b3aaac0..47f41a3 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ValidateTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ValidateTest.java
@@ -19,11 +19,18 @@ package org.apache.camel.component.hl7;
 import ca.uhn.hl7v2.DefaultHapiContext;
 import ca.uhn.hl7v2.HL7Exception;
 import ca.uhn.hl7v2.HapiContext;
+import ca.uhn.hl7v2.Version;
 import ca.uhn.hl7v2.model.DataTypeException;
+import ca.uhn.hl7v2.model.Message;
+import ca.uhn.hl7v2.model.v24.message.ADT_A01;
+import ca.uhn.hl7v2.model.v24.segment.PID;
 import ca.uhn.hl7v2.parser.GenericParser;
 import ca.uhn.hl7v2.parser.Parser;
+import ca.uhn.hl7v2.validation.ValidationContext;
+import ca.uhn.hl7v2.validation.ValidationException;
+import ca.uhn.hl7v2.validation.builder.ValidationRuleBuilder;
 import ca.uhn.hl7v2.validation.impl.NoValidation;
-
+import ca.uhn.hl7v2.validation.impl.ValidationContextFactory;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -73,8 +80,38 @@ public class HL7ValidateTest extends CamelTestSupport {
         template.sendBody("direct:unmarshalOkCustom", body);
 
         assertMockEndpointsSatisfied();
-    }    
+    }
+    
+    @Test
+    public void testMarshalWithValidation() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:end");
+        mock.expectedMessageCount(0);
+
+        Message message = createADT01Message();
+        try {
+            template.sendBody("direct:start1", message);
+            fail("Should have thrown exception");
+        } catch (CamelExecutionException e) {
+            assertIsInstanceOf(HL7Exception.class, e.getCause());
+            assertIsInstanceOf(ValidationException.class, e.getCause().getCause());
+            System.out.println(e.getCause().getCause().getMessage());
+            assertTrue("Should be a validation error message", e.getCause().getCause().getMessage().startsWith("Validation failed:"));
+        }
 
+        assertMockEndpointsSatisfied();
+    }
+    
+    @Test
+    public void testMarshalWithoutValidation() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:end");
+        mock.expectedMessageCount(1);
+
+        Message message = createADT01Message();
+        template.sendBody("direct:start2", message);
+
+        assertMockEndpointsSatisfied();
+    }
+    
     protected RouteBuilder createRouteBuilder() throws Exception {
         HapiContext hapiContext = new DefaultHapiContext();
         hapiContext.setValidationContext(new NoValidation());
@@ -82,11 +119,33 @@ public class HL7ValidateTest extends CamelTestSupport {
         hl7 = new HL7DataFormat();
         hl7.setParser(p);
         
+        /*
+         * Let's start by adding a validation rule to the default validation
+         * that disallows PID-2 to be empty.
+         */
+        ValidationRuleBuilder builder = new ValidationRuleBuilder() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            protected void configure() {
+                forVersion(Version.V24)
+                        .message("ADT", "*")
+                        .terser("PID-2", not(empty()));
+            }
+        };
+        ValidationContext customValidationContext = ValidationContextFactory.fromBuilder(builder);
+        
+        HapiContext customContext = new DefaultHapiContext(customValidationContext);
+        final Parser customParser = new GenericParser(customContext);
+        
         return new RouteBuilder() {
             public void configure() throws Exception {
                 from("direct:unmarshalFailed").unmarshal().hl7().to("mock:unmarshal");
                 from("direct:unmarshalOk").unmarshal().hl7(false).to("mock:unmarshal");
                 from("direct:unmarshalOkCustom").unmarshal(hl7).to("mock:unmarshal");
+                from("direct:start1").marshal().hl7(customParser).to("mock:end");
+                from("direct:start2").marshal().hl7(true).to("mock:end");
+                
             }
         };
     }
@@ -119,5 +178,19 @@ public class HL7ValidateTest extends CamelTestSupport {
         body.append(line8);
         return body.toString();
     }
+    
+    private static Message createADT01Message() throws Exception {
+        ADT_A01 adt = new ADT_A01();
+        adt.initQuickstart("ADT", "A01", "P");
+
+        // Populate the PID Segment
+        PID pid = adt.getPID();
+        pid.getPatientName(0).getFamilyName().getSurname().setValue("Doe");
+        pid.getPatientName(0).getGivenName().setValue("John");
+        pid.getPhoneNumberBusiness(0).getPhoneNumber().setValue("333123456");
+        pid.getPatientIdentifierList(0).getID().setValue("123456");
+       
+        return adt;
+    }
 
 }