Beispiel #1
0
        private static void DemonstrateConfigurableContextPidSegmentIsMissing()
        {
            try
            {
                //ADT A01 message with missing PID segment
                const string adtMessageWithPidSegmentMissing =
                    "MSH|^~\\&|SENDING_APPLICATION|SENDING_FACILITY|RECEIVING_APPLICATION|RECEIVING_FACILITY|" +
                    "20110613083617||ADT^A01|2323232223232|P|2.3||||\r" +
                    "EVN|A01|20110613083617||Some Reason|\r" +
                    "PV1|1|O|||||^^^^^^^^|^^^^^^^^";;

                LogToDebugConsole("Demonstration of NHAPI Tools Configurable Context...");
                LogToDebugConsole("Validation rule specified in app.config called 'MandatorySegmentADT_A01_PID' should fail here...");

                var parser = new PipeParser();

                //this should load the
                var context = new ConfigurableContext(parser.ValidationContext);
                parser.ValidationContext = context;

                //parse the message containing PID message segment
                //this should trigger a validation exception
                parser.Parse(adtMessageWithPidSegmentMissing);
            }
            catch (System.Exception ex)
            {
                LogToDebugConsole("Validation exception thrown...");
                if (ex.InnerException != null)
                {
                    LogToDebugConsole("Configurable Context-based Validation: Message failed during parsing:" +
                                      ex.InnerException.Message);
                }
            }
        }
Beispiel #2
0
        private static void TestParserConfigurableContext()
        {
            if (_messages.Count > 0)
            {
                Console.WriteLine("\n==============================================\nTesting parsing with configurable context.");
                var parser  = new PipeParser();
                var context = new ConfigurableContext(parser.ValidationContext);
                parser.ValidationContext = context;

                Console.WriteLine("Encodingrules added:\t  {0}", context.EncodingRuleCount);
                Console.WriteLine("Messagerules added:\t  {0}", context.MessageRuleCount);
                Console.WriteLine("PrimitiveTyperules added: {0}", context.PrimitiveRuleCount);
                Console.WriteLine();

                var count = 0;
                foreach (var m in _messages)
                {
                    var im = parser.Parse(m);
                    _parsedMessages.Add(im);

                    var structure = im.GetStructureName();
                    Console.WriteLine("Parsed {0}, V{1}.", structure, im.Version);
                    count++;
                }
                Console.WriteLine("\nDone! (Parsed {0})", count);
            }
        }
        public HL7RequestInfo ParseRequestInfo(string message, string protocol)
        {
            HL7RequestInfo result = new HL7RequestInfo();
            PipeParser     parser = new PipeParser();

            try
            {
                ConfigurableContext configContext = new ConfigurableContext(parser.ValidationContext);
                parser.ValidationContext = configContext;
            }
            catch
            {
                // Ignore any error, since the config is probably missing
            }

            try
            {
                IMessage hl7Message = parser.Parse(message);

                result = new HL7RequestInfo();
                if (HandleEachMessageAsEvent)
                {
                    result.Key = "V" + hl7Message.Version.Replace(".", "") + "." + hl7Message.GetStructureName();
                }
                else
                {
                    result.Key = "V" + hl7Message.Version.Replace(".", "") + ".MessageFactory";
                }

                if (!string.IsNullOrEmpty(protocol))
                {
                    result.Key += protocol;
                }

                result.Message = hl7Message;

                // Parse the message
                return(result);
            }
            catch (Exception ex)
            {
                var location = ConfigurationManager.AppSettings["ParseErrorLogDirectory"];
                if (!string.IsNullOrEmpty(location))
                {
                    if (!Directory.Exists(location))
                    {
                        Directory.CreateDirectory(location);
                    }

                    string filename = string.Format("{0}_{1}_{2}", DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmssfff"), Guid.NewGuid());
                    string fullPath = Path.Combine(location, filename);
                    File.WriteAllText(fullPath + ".HL7", message);

                    string errorMessage = ex.ToString();
                    File.WriteAllText(fullPath + ".log", errorMessage);
                }
                throw;
            }
        }
        public HL7RequestInfo ParseRequestInfo(string message, string protocol)
        {
            HL7RequestInfo result = new HL7RequestInfo();
            PipeParser     parser = new PipeParser();

            try
            {
                ConfigurableContext configContext = new ConfigurableContext(parser.ValidationContext);
                parser.ValidationContext = configContext;
            }
            catch (Exception ex)
            {
                // Ignore any error, since the config is probably missing
            }

            try
            {
                IMessage hl7Message = parser.Parse(message);
                result = new HL7RequestInfo();
                if (HandleEachMessageAsEvent)
                {
                    result.Key = "V" + hl7Message.Version.Replace(".", "") + "." + hl7Message.GetStructureName();
                }
                else
                {
                    result.Key = "V" + hl7Message.Version.Replace(".", "") + ".MessageFactory";
                }

                if (!string.IsNullOrEmpty(protocol))
                {
                    result.Key += protocol;
                }

                result.Message = hl7Message;
            }
            catch (Exception ex)
            {
                XmlDocument xml     = HL7ToXmlConverter.ConvertToXml(message);
                var         version = xml.GetElementsByTagName("MSH.11").Item(0);
                result.versionname        = Convert.ToString(version.InnerText);
                result.feild10            = Convert.ToString(xml.GetElementsByTagName("MSH.9").Item(0).InnerText);
                result.sendingapp         = Convert.ToString(xml.GetElementsByTagName("MSH.2").Item(0).InnerText);
                result.sendingEnvironment = Convert.ToString(xml.GetElementsByTagName("MSH.3").Item(0).InnerText);
                result.feild11            = Convert.ToString(xml.GetElementsByTagName("MSH.10").Item(0).InnerText);
                result.feild15            = Convert.ToString(xml.GetElementsByTagName("MSH.14").Item(0).InnerText);
                result.feild16            = Convert.ToString(xml.GetElementsByTagName("MSH.15").Item(0).InnerText);
            }

            // Parse the message
            return(result);
        }
        public async Task Can_retrieve_record_using_first_or_Default_asynchronously()
        {
            var configContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, new TestRecord { Id = 1, Name = "A" }, new TestRecord { Id = 2, Name = "B" });
            });

            var opHelper = new DbOperationsHelper(configContext);

            var result = await opHelper.GetRecordAsync(t => t.Id == 1);

            result.Should().NotBeNull();
            result.Id.Should().Be(1);
            result.Name.Should().Be("A");
        }
        public void Can_retrieve_records_using_where_method()
        {
            var configContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, new TestRecord { Id = 1, Name = "A" }, new TestRecord { Id = 2, Name = "B" }, new TestRecord { Id = 1, Name = "C" });
            });

            var opHelper = new DbOperationsHelper(configContext);

            var results = opHelper.GetRecords(t => t.Id == 1)?.ToArray();

            results.Should().HaveCount(2);
            results.Should().Contain(t => t.Id == 1 && t.Name == "A");
            results.Should().Contain(t => t.Id == 1 && t.Name == "C");
        }
Beispiel #7
0
        public void ParsesAllHl7MessagesWithConfigurableContext()
        {
            Console.WriteLine("\n==============================================\nTesting parsing with configurable context.");

            // Arrange
            var expectedEncodingRulesCount      = 1;
            var expectedMessageRulesCount       = 5;
            var expectedPrimitiveTypeRulesCount = 0;

            var expectedParse = new List <ParseResult>
            {
                new ParseResult("ADT_A01", "2.5"),
                new ParseResult("ADT_A08", "2.3"),
                new ParseResult("ADT_A08", "2.3"),
                new ParseResult("DFT_P03", "2.3"),
                new ParseResult("ORU_R01", "2.4"),
                new ParseResult("SIU_S12", "2.3")
            };

            var messages = GetHl7Strings();

            var parser  = new PipeParser();
            var context = new ConfigurableContext(parser.ValidationContext);

            parser.ValidationContext = context;

            Console.WriteLine("Encoding Rules added:\t\t{0}", context.EncodingRuleCount);
            Console.WriteLine("Message Rules added:\t\t{0}", context.MessageRuleCount);
            Console.WriteLine("PrimitiveType Rules added:\t{0}\n", context.PrimitiveRuleCount);

            var parsed = new List <ParseResult>();

            foreach (var m in messages)
            {
                var im = parser.Parse(m);

                var structure = im.GetStructureName();
                Console.WriteLine("Parsed {0}, V{1}.", structure, im.Version);
                parsed.Add(new ParseResult(structure, im.Version));
            }

            Assert.AreEqual(expectedEncodingRulesCount, context.EncodingRuleCount);
            Assert.AreEqual(expectedMessageRulesCount, context.MessageRuleCount);
            Assert.AreEqual(expectedPrimitiveTypeRulesCount, context.PrimitiveRuleCount);
            Assert.AreEqual(expectedParse, parsed);

            Console.WriteLine("\nDone! (Parsed {0})", parsed.Count);
        }
        public async Task Can_retrieve_records_with_async()
        {
            var configContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, new TestRecord { Id = 1, Name = "A" }, new TestRecord { Id = 2, Name = "B" }, new TestRecord { Id = 1, Name = "C" });
            });

            var opHelper = new DbOperationsHelper(configContext);

            var results = await opHelper.GetRecordsAsync(t => t.Id == 1);

            results.Should().HaveCount(2);
            results.Should().Contain(t => t.Id == 1 && t.Name == "A");
            results.Should().Contain(t => t.Id == 1 && t.Name == "C");

        }
        public void Can_verify_specific_entity_was_not_saved()
        {
            var testContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, new TestRecord { Id = 1, Name = "Not Joe"});
            });

            var dbOperationHelper = new DbOperationsHelper(testContext);
            var testRecord = new TestRecord
            {
                Id = 2,
                Name = "Anything"
            };
            dbOperationHelper.CreateInvalidTestRecord(testRecord);

            testContext.HasNotBeenSaved<TestRecord>(x => x.Id == 1 && x.Name == "Anything");
        }
        public void Can_verify_no_entities_of_type_were_saved()
        {
            var testContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, new List<TestRecord>());
            });

            var dbOperationHelper = new DbOperationsHelper(testContext);
            var testRecord = new TestRecord
            {
                Id = 1,
                Name = "Anything"
            };
            dbOperationHelper.CreateInvalidTestRecord(testRecord);

            testContext.HasNotBeenSaved<TestRecord>();
        }
        public void Can_verify_new_entity_has_been_saved_with_correct_properties()
        {
            var testContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, new List<TestRecord>());
            });

            var dbOperationHelper = new DbOperationsHelper(testContext);
            var testRecord = new TestRecord
            {
                Id = 1,
                Name = "Anything"
            };
            dbOperationHelper.CreateTestRecord(testRecord);

            testContext.HasBeenSaved<TestRecord>(x => x.Id == 1 && x.Name == "Anything");
        }
        public void Can_remove_existing_entity()
        {
            var testRecord = new TestRecord
            {
                Id = 1,
                Name = "Anything"
            };
            var testContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, testRecord);
            });

            var dbOperationHelper = new DbOperationsHelper(testContext);

            dbOperationHelper.RemoveTestRecord(1);

            testContext.HasNotBeenSaved<TestRecord>(x => x.Id == 1);
        }
Beispiel #13
0
        public HL7RequestInfo ParseRequestInfo(string message, string protocol)
        {
            HL7RequestInfo result = new HL7RequestInfo();
            PipeParser     parser = new PipeParser();

            try
            {
                ConfigurableContext configContext = new ConfigurableContext(parser.ValidationContext);
                parser.ValidationContext = configContext;
            }
            catch
            {
                // Ignore any error, since the config is probably missing
            }

            IMessage hl7Message = parser.Parse(message);

            result = new HL7RequestInfo();
            if (HandleEachMessageAsEvent)
            {
                result.Key = "V" + hl7Message.Version.Replace(".", "") + "." + hl7Message.GetStructureName();
            }
            else
            {
                result.Key = "V" + hl7Message.Version.Replace(".", "") + ".MessageFactory";
            }

            if (!string.IsNullOrEmpty(protocol))
            {
                result.Key += protocol;
            }

            result.Message = hl7Message;

            // Parse the message
            return(result);
        }
Beispiel #14
0
        private static void DemonstrateConfigurableContextEvn4FieldIsEmpty()
        {
            try
            {
                //ADT A01 message with ENV-4 field data left empty
                const string adtMessageToValidateAgainst =
                    "MSH|^~\\&|SENDING_APPLICATION|SENDING_FACILITY|RECEIVING_APPLICATION|RECEIVING_FACILITY|" +
                    "20110613083617||ADT^A01|2323232223232|P|2.3||||\r" +
                    "EVN|A01|20110613083617|||\r" +
                    "PID|1||135769||MOUSE^MICKEY^||19281118|M|||123 Main St.^^Lake Buena Vista^FL^32830|" +
                    "|(407)939-1289^^^[email protected]|||||1719|99999999||||||||||||||||||||\r" +
                    "PV1|1|O|||||^^^^^^^^|^^^^^^^^";;

                LogToDebugConsole("Demonstration of NHAPI Tools Configurable Context...");
                LogToDebugConsole("Validation rule specified in app.config called 'MandatoryFieldADT_EVN-4' should fail here...");

                var parser = new PipeParser();

                //this should load the
                var context = new ConfigurableContext(parser.ValidationContext);
                parser.ValidationContext = context;

                //parse the message containing no event reason code data (EVN-4)
                //this should trigger a validation exception
                parser.Parse(adtMessageToValidateAgainst);
            }
            catch (System.Exception ex)
            {
                LogToDebugConsole("Validation exception thrown...");
                if (ex.InnerException != null)
                {
                    LogToDebugConsole("Configurable Context-based Validation: Message failed during parsing:" +
                                      ex.InnerException.Message);
                }
            }
        }
        public void Can_verify_updated_entity_has_been_saved_with_modified_properties()
        {
            var testRecord = new TestRecord
            {
                Id = 1,
                Name = "Anything"
            };
            var testContext = new ConfigurableContext<TestDbContext>(ctx =>
            {
                ctx.Setup(x => x.TestRecords, testRecord);
            });

            var dbOperationHelper = new DbOperationsHelper(testContext);

            dbOperationHelper.UpdateTestRecordName(1, "Joe");

            testContext.HasBeenSaved<TestRecord>(x => x.Name == "Joe");
        }
Beispiel #16
0
        private static void TestParserConfigurableContext()
        {
            if (messages.Count > 0)
            {
                Console.WriteLine("\n==============================================\nTesting parsing with configurable context.");
                PipeParser parser = new PipeParser();
                ConfigurableContext context = new ConfigurableContext(parser.ValidationContext);
                parser.ValidationContext = context;

                Console.WriteLine("Encodingrules added:\t  {0}", context.EncodingRuleCount);
                Console.WriteLine("Messagerules added:\t  {0}", context.MessageRuleCount);
                Console.WriteLine("PrimitiveTyperules added: {0}", context.PrimitiveRuleCount);
                Console.WriteLine();

                int count = 0;
                foreach (string m in messages)
                {
                    IMessage im = parser.Parse(m);
                    parsedMessages.Add(im);
                    
                    string structure = im.GetStructureName();
                    Console.WriteLine("Parsed {0}, V{1}.", structure, im.Version);
                    count++;
                }
                Console.WriteLine("\nDone! (Parsed {0})", count);
            }
        }