public void GenerateXMLTest() { MockObjectRepository mockTdb = new MockObjectRepository(); mockTdb.InitializeCDARepository(); ImplementationGuide ig = mockTdb.FindOrCreateImplementationGuide(Constants.IGTypeNames.CDA, "Test IG", null, DateTime.Now); Template template = mockTdb.CreateTemplate("urn:oid:2.16.22.22.11", "Document", "Test Doc Type", ig, "ClinicalDocument", "ClinicalDocument", "Test Description"); var tca1 = mockTdb.AddConstraintToTemplate(template, null, null, "@classCode", "SHALL", "1..1", value: "test1"); var tca2 = mockTdb.AddConstraintToTemplate(template, null, null, "@moodCode", "SHALL", "1..1", value: "test2"); var tc1 = mockTdb.AddConstraintToTemplate(template, null, null, "entryRelationship", "SHALL", "1..1"); var tc2 = mockTdb.AddConstraintToTemplate(template, tc1, null, "observation", "SHOULD", "0..1"); var tc3 = mockTdb.AddConstraintToTemplate(template, tc2, null, "value", "SHALL", "1..1", "CD", value: "4321", displayName: "Test"); template.TemplateSamples = new System.Data.Entity.Core.Objects.DataClasses.EntityCollection <TemplateSample>(); template.TemplateSamples.Add(new TemplateSample() { XmlSample = "<test><example>VALUE</example></test>" }); List <Template> templates = new List <Template>(); templates.Add(template); IGSettingsManager igSettings = new IGSettingsManager(mockTdb, ig.Id); TemplateExporter exporter = new TemplateExporter(templates, mockTdb, ig.Id); string export = exporter.GenerateXML(); Assert.IsFalse(string.IsNullOrEmpty(export)); }
public void TestBuildContextStringForAddress_ContainedByMultiple() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); var igType = tdb.FindImplementationGuideType(Constants.IGTypeNames.CDA); var unspecifiedTemplateType = tdb.FindOrCreateTemplateType(igType, MockObjectRepository.DEFAULT_CDA_UNSPECIFIED_TYPE); var docTemplateType = tdb.FindOrCreateTemplateType(igType, Constants.IGTypeNames.CDA); var entryTemplateType = tdb.FindOrCreateTemplateType(igType, MockObjectRepository.DEFAULT_CDA_ENTRY_TYPE); var ig = tdb.FindOrCreateImplementationGuide(igType, "Test IG"); TemplateContextBuilder tcb = new TemplateContextBuilder(tdb, igType, igType.GetSimpleSchema()); Template addrTemplate = tdb.CreateTemplate("urn:oid:1.2.3.4", unspecifiedTemplateType, "Test Address Template", ig, "addr", "AD"); Template containingTemplate1 = tdb.CreateTemplate("urn:oid:4.3.2.1", docTemplateType, "Test Doc Template", ig, "ClinicalDocument", "ClinicalDocument"); var c1_1 = tdb.AddConstraintToTemplate(containingTemplate1, null, null, "recordTarget", "SHALL", "1..1"); var c1_2 = tdb.AddConstraintToTemplate(containingTemplate1, c1_1, null, "patientRole", "SHALL", "1..1"); tdb.AddConstraintToTemplate(containingTemplate1, c1_2, addrTemplate, "addr", "SHALL", "1..1"); Template containingTemplate2 = tdb.CreateTemplate("urn:oid:3.2.1.4", entryTemplateType, "Test Entry Template", ig, "observation", "Observation"); var c2_1 = tdb.AddConstraintToTemplate(containingTemplate2, null, null, "participant", "SHALL", "1..1"); var c2_2 = tdb.AddConstraintToTemplate(containingTemplate2, c2_1, null, "participantRole", "SHALL", "1..1"); tdb.AddConstraintToTemplate(containingTemplate2, c2_2, addrTemplate, "addr", "SHALL", "1..1"); var contextString = tcb.BuildContextString(addrTemplate); Assert.AreEqual("cda:ClinicalDocument[cda:templateId[@root='4.3.2.1']]/cda:recordTarget/cda:patientRole/cda:addr | cda:observation[cda:templateId[@root='3.2.1.4']]/cda:participant/cda:participantRole/cda:addr", contextString); }
public void GetRecursiveTemplates_ThreeVersions_V3Changed() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); // Version 1 var implementationGuide1 = tdb.FindOrAddImplementationGuide(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME, "IG V1"); var template1 = tdb.GenerateTemplate("1.2.3.4", "Document", "Doc Template V1", implementationGuide1, "ClinicalDocument", "ClinicalDocument"); // Version 2 var implementationGuide2 = tdb.FindOrAddImplementationGuide(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME, "IG V2", previousVersion: implementationGuide1); // Version 3 var implementationGuide3 = tdb.FindOrAddImplementationGuide(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME, "IG V3", previousVersion: implementationGuide2); var template2 = tdb.GenerateTemplate("1.2.3.4", "Document", "Doc Template V3", implementationGuide3, "ClinicalDocument", "ClinicalDocument", previousVersion: template1); // Check list of templates for version 1 var templates = implementationGuide1.GetRecursiveTemplates(tdb); Assert.IsNotNull(templates, "Version 1 returned null value"); Assert.AreEqual(1, templates.Count, "Version 1 returned incorrect number of templates"); // Check list of templates for version 2 templates = implementationGuide2.GetRecursiveTemplates(tdb); Assert.IsNotNull(templates, "Version 2 returned null value"); Assert.AreEqual(1, templates.Count, "Version 2 returned incorrect number of templates"); // Check list of templates for version 3 templates = implementationGuide3.GetRecursiveTemplates(tdb); Assert.IsNotNull(templates, "Version 3 returned null value"); Assert.AreEqual(1, templates.Count, "Version 3 returned incorrect number of templates"); }
public void GetRecursiveTemplates_ContainedNotInferred_MultiVersions() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); var externalIG = tdb.FindOrAddImplementationGuide(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME, "External IG"); var exTemplate1 = tdb.GenerateTemplate("4.3.2.1", "Entry", "Ext Entry Template", externalIG, "observation", "Observation"); // Version 1, create the template var implementationGuide1 = tdb.FindOrAddImplementationGuide(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME, "IG V1"); var template1 = tdb.GenerateTemplate("1.2.3.4", "Document", "Doc Template V1", implementationGuide1, "ClinicalDocument", "ClinicalDocument"); var tc1 = tdb.GenerateConstraint(template1, null, null, "entryRelationship", "SHALL", "1..1"); tdb.GenerateConstraint(template1, tc1, exTemplate1, "observation", "SHALL", "1..1"); // Version 2, deprecate the template, remove contained external template var implementationGuide2 = tdb.FindOrAddImplementationGuide(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME, "IG V2", previousVersion: implementationGuide1); var template2 = tdb.GenerateTemplate("1.2.3.4", "Document", "Doc Template V2", implementationGuide2, "ClinicalDocument", "ClinicalDocument", previousVersion: template1); // Check list of templates for version 1 var templates = implementationGuide1.GetRecursiveTemplates(tdb, inferred: false); Assert.IsNotNull(templates, "Version 1 returned null value"); Assert.AreEqual(1, templates.Count, "Version 1 returned incorrect number of templates"); // Check list of templates for version 2 templates = implementationGuide2.GetRecursiveTemplates(tdb, inferred: false); Assert.IsNotNull(templates, "Version 2 returned null value"); Assert.AreEqual(1, templates.Count, "Version 2 returned incorrect number of templates"); }
public void ExportTemplatesModelTest1() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); Organization org = tdb.FindOrAddOrganization("LCG Test"); ImplementationGuide ig = tdb.FindOrAddImplementationGuide(tdb.FindImplementationGuideType(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME), "Test Implementation Guide"); IGSettingsManager igSettings = new IGSettingsManager(tdb, ig.Id); Template template = tdb.GenerateTemplate("1.2.3.4", "Document", "Test Template", ig, "observation", "Observation", "Test Description", "Test Notes", org); var tc1 = tdb.GenerateConstraint(template, null, null, "entryRelationship", "SHALL", "1..1"); var tc2 = tdb.GenerateConstraint(template, tc1, null, "observation", "SHOULD", "0..1"); var tc3 = tdb.GenerateConstraint(template, tc2, null, "value", "SHALL", "1..1", "CD", value: "4321", displayName: "Test"); tc3.Description = "Test description"; tc3.Label = "Test Label"; var tc4 = tdb.GeneratePrimitive(template, null, "SHALL", "This is a test"); ExportTemplate export = template.Export(tdb, igSettings); Assert.IsNotNull(export); Assert.AreEqual(template.Oid, export.identifier); Assert.AreEqual(template.Name, export.title); Assert.AreEqual(template.TemplateType.Name, export.templateType); Assert.AreEqual(template.PrimaryContext, export.context); Assert.AreEqual(template.PrimaryContextType, export.contextType); Assert.AreEqual(template.Description, export.Description); Assert.AreEqual(template.Notes, export.Notes); Assert.AreEqual(template.OrganizationName, export.organizationName); // Assert constraints Assert.IsNotNull(export.Constraint); Assert.AreEqual(2, export.Constraint.Count); // tc1 Assert.AreEqual(tc1.Context, export.Constraint[0].context); Assert.AreEqual(ExportConformanceTypes.SHALL, export.Constraint[0].conformance); Assert.AreEqual(tc1.Cardinality, export.Constraint[0].cardinality); // tc4 Assert.IsNull(export.Constraint[1].context); Assert.AreEqual(true, export.Constraint[1].isPrimitive); Assert.AreEqual(tc4.PrimitiveText, export.Constraint[1].NarrativeText); // tc2 Assert.AreEqual(1, export.Constraint[0].Constraint.Count); Assert.AreEqual(tc2.Context, export.Constraint[0].Constraint[0].context); Assert.AreEqual(ExportConformanceTypes.SHOULD, export.Constraint[0].Constraint[0].conformance); Assert.AreEqual(tc2.Cardinality, export.Constraint[0].Constraint[0].cardinality); // tc3 Assert.AreEqual(1, export.Constraint[0].Constraint[0].Constraint.Count); Assert.AreEqual(tc3.Context, export.Constraint[0].Constraint[0].Constraint[0].context); Assert.AreEqual(ExportConformanceTypes.SHALL, export.Constraint[0].Constraint[0].Constraint[0].conformance); Assert.AreEqual(tc3.Cardinality, export.Constraint[0].Constraint[0].Constraint[0].cardinality); Assert.AreEqual(tc3.Description, export.Constraint[0].Constraint[0].Constraint[0].Description); Assert.AreEqual(tc3.Label, export.Constraint[0].Constraint[0].Constraint[0].Label); Assert.IsFalse(string.IsNullOrEmpty(export.Constraint[0].Constraint[0].Constraint[0].Description)); }
public void ExportTemplatesModelTest2() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); Organization org = tdb.FindOrAddOrganization("LCG Test"); ImplementationGuide ig = tdb.FindOrAddImplementationGuide(tdb.FindImplementationGuideType(MockObjectRepository.DEFAULT_CDA_IG_TYPE_NAME), "Test Implementation Guide"); IGSettingsManager igSettings = new IGSettingsManager(tdb, ig.Id); Template template = tdb.GenerateTemplate("1.2.3.4", "Document", "Test Template", ig, "observation", "Observation", "Test Description", "Test Notes"); ExportTemplate export = template.Export(tdb, igSettings); Assert.IsNotNull(export); Assert.AreEqual(template.Oid, export.identifier); Assert.AreEqual(template.Name, export.title); Assert.AreEqual(template.TemplateType.Name, export.templateType); Assert.AreEqual(template.PrimaryContext, export.context); Assert.AreEqual(template.PrimaryContextType, export.contextType); Assert.AreEqual(template.Description, export.Description); Assert.AreEqual(template.Notes, export.Notes); Assert.IsNull(export.organizationName); Assert.AreEqual(template.OwningImplementationGuide.Name, export.ImplementationGuide.name); }
public void TestBuildContextStringForAddress_NotContained() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); var igType = tdb.FindImplementationGuideType(Constants.IGTypeNames.CDA); var unspecifiedTemplateType = tdb.FindOrCreateTemplateType(igType, MockObjectRepository.DEFAULT_CDA_UNSPECIFIED_TYPE); var ig = tdb.FindOrCreateImplementationGuide(igType, "Test IG"); TemplateContextBuilder tcb = new TemplateContextBuilder(tdb, igType, igType.GetSimpleSchema()); Template template = tdb.CreateTemplate("urn:oid:1.2.3.4", unspecifiedTemplateType, "Test Template", ig, "addr", "AD"); var contextString = tcb.BuildContextString(template); Assert.AreEqual("cda:addr", contextString); }
public void TestCloneTemplate() { MockObjectRepository mockDb = new MockObjectRepository(); mockDb.InitializeCDARepository(); var ig = mockDb.FindOrAddImplementationGuide("CDA", "My Test IG"); var template1 = mockDb.GenerateTemplate("1.2.3.4.1", "Document", "My Test Template", ig); template1.AuthorId = 2; mockDb.GenerateConstraint(template1, null, null, "recordTarget", "SHALL", "1..1"); template1.TemplateSamples.Add(new TemplateSample() { Name = "My Test Sample", XmlSample = "<test></test>" }); // Test 1 var clone1 = template1.CloneTemplate(mockDb, null); Assert.IsNotNull(clone1); Assert.AreEqual("D_My_Test_Template (Copy)", clone1.Bookmark); Assert.AreEqual("My Test Template (Copy)", clone1.Name); Assert.AreEqual("1.2.3.4.1.1", clone1.Oid); Assert.AreEqual(2, clone1.AuthorId); Assert.AreEqual(1, clone1.Constraints.Count); // Test the sample for clone1 Assert.AreEqual(1, clone1.TemplateSamples.Count); Assert.AreEqual("My Test Sample", clone1.TemplateSamples.First().Name); Assert.AreEqual("<test></test>", clone1.TemplateSamples.First().XmlSample); mockDb.Templates.AddObject(clone1); // Test 2 var clone2 = template1.CloneTemplate(mockDb, 1); Assert.IsNotNull(clone2); Assert.AreEqual("D_My_Test_Template (Copy 2)", clone2.Bookmark); Assert.AreEqual("My Test Template (Copy 2)", clone2.Name); Assert.AreEqual("1.2.3.4.1.2", clone2.Oid); Assert.AreEqual(1, clone2.AuthorId); Assert.AreEqual(1, clone2.Constraints.Count); }
public void TestImportController() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); tdb.InitializeLCG(); string importXml = Helper.GetSampleContents("Trifolia.Test.DocSamples.ccda1-native.xml"); ExportModel model = ExportModel.Deserialize(importXml); Helper.AuthLogin(tdb, MockObjectRepository.DEFAULT_USERNAME); ImportController controller = new ImportController(tdb); var importResponse = controller.ImportTrifoliaModel(model); Assert.IsTrue(importResponse.Success, "Expected import to succeed"); importResponse = controller.ImportTrifoliaModel(model); Assert.IsTrue(importResponse.Success, "Expected import to succeed for a second time"); }
public void ImportTemplatesTest() { MockObjectRepository tdb = new MockObjectRepository(); tdb.InitializeCDARepository(); var implementationGuide = tdb.FindOrCreateImplementationGuide(Constants.IGTypeNames.CDA, "Test IG"); string importXml = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" + "<Trifolia xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.lantanagroup.com\">" + " <Template identifier=\"urn:oid:1.2.3.4.5\" implementationGuideType=\"CDA\" templateType=\"Document\" title=\"Test Template 1\" bookmark=\"D_Test_Template_1\" context=\"ClinicalDocument\">" + " <ImplementationGuide name=\"Test IG\" />" + " <Description>Test Description 2</Description>" + " <Notes>Test Note 1</Notes>" + " <Constraint isVerbose=\"false\" number=\"1000\" context=\"templateId\" conformance=\"SHALL\" cardinality=\"1..1\" />" + " <Constraint isVerbose=\"false\" number=\"1001\" context=\"code\" conformance=\"SHALL\" cardinality=\"1..1\">" + " <Constraint isVerbose=\"false\" number=\"1002\" context=\"@code\" conformance=\"SHALL\" cardinality=\"1..1\">" + " <SingleValueCode code=\"12345X\" displayName=\"Test Static Value\" />" + " </Constraint>" + " </Constraint>" + " <Constraint isVerbose=\"false\" number=\"1003\" context=\"code\" conformance=\"SHALL\" cardinality=\"1..1\">" + " <Constraint isVerbose=\"false\" number=\"1004\" context=\"@code\" conformance=\"SHALL\" cardinality=\"1..1\" dataType=\"CE\">" + " <ValueSet identifier=\"urn:oid:9.8.7.6.5.4.3.2.1\" isStatic=\"true\" />" + " </Constraint>" + " </Constraint>" + " </Template>" + " <Template identifier=\"urn:oid:1.2.3.4.5.6\" implementationGuideType=\"CDA\" templateType=\"Document\" title=\"Test Template 2\" bookmark=\"D_Test_Template_2\" impliedTemplateOid=\"urn:oid:1.2.3.4.5\" context=\"Document\">" + " <ImplementationGuide name=\"Test IG\" />" + " <Description>Test Description 1</Description>" + " <Notes>Test Note 2</Notes>" + " <Constraint isVerbose=\"false\" number=\"1005\" context=\"code\" conformance=\"SHALL\" cardinality=\"1..1\" />" + " </Template>" + " <Template identifier=\"urn:oid:1.2.3.4.5.6.7\" implementationGuideType=\"CDA\" templateType=\"Document\" title=\"Test Template 3\" bookmark=\"D_Test_Template_3\" context=\"Document\">" + " <ImplementationGuide name=\"Test IG\" />" + " <Description>Test Description 3</Description>" + " <Notes>Test Note 3</Notes>" + " <Constraint isVerbose=\"false\" number=\"1006\" conformance=\"SHALL\" cardinality=\"1..1\" containedTemplateOid=\"urn:oid:1.2.3.4.5.6\" />" + " <Constraint isVerbose=\"false\" number=\"1007\" context=\"entry\" conformance=\"SHALL\" cardinality=\"1..1\">" + " <Constraint isVerbose=\"false\" number=\"1008\" context=\"observation\" conformance=\"SHALL\" cardinality=\"1..1\" containedTemplateOid=\"urn:oid:1.2.3.4.5.6\" />" + " </Constraint>" + " </Template>" + "</Trifolia>"; TemplateImporter importer = new TemplateImporter(tdb); List <Template> templates = importer.Import(importXml); Assert.AreEqual(0, importer.Errors.Count, "Should not have errors"); Assert.IsNotNull(templates, "Did not expect import to return null list of templates"); Assert.AreEqual(3, templates.Count, "Expected to find 3 imported templates"); Template firstTemplate = templates[0]; Assert.AreEqual("urn:oid:1.2.3.4.5", firstTemplate.Oid, "First template's oid was not correct."); Assert.AreEqual("Test Template 1", firstTemplate.Name, "First template's title was not set correctly."); Assert.AreEqual("D_Test_Template_1", firstTemplate.Bookmark, "First template's bookmark was not set correctly."); Assert.IsNotNull(firstTemplate.ImplementationGuideType, "First template's implementation guide type was not set."); Assert.AreEqual(Constants.IGTypeNames.CDA, firstTemplate.ImplementationGuideType.Name, "First template's implementation guide was not correct."); Assert.IsNotNull(firstTemplate.TemplateType, "First template's type was not set."); Assert.AreEqual("Document", firstTemplate.TemplateType.Name, "First template's type was not correct."); Assert.IsNotNull(firstTemplate.PrimaryContext, "First template's context was not set."); Assert.AreEqual("ClinicalDocument", firstTemplate.PrimaryContext, "First template's context was not correct."); Assert.AreEqual(5, firstTemplate.ChildConstraints.Count, "Expected to find 5 constraints in the first template."); TemplateConstraint constraint = firstTemplate.ChildConstraints.ToList()[0]; Assert.IsNotNull(constraint.Context, "First constraint of first template does not have a context."); Assert.AreEqual(constraint.Context, "templateId", "First constraint of first template does not have the correct context."); Assert.AreEqual(constraint.Cardinality, "1..1", "First constraint of first template does not have the correct cardinality."); Assert.IsNotNull(constraint.Conformance, "First constraint of first template does does not have a conformance."); Assert.AreEqual(constraint.Conformance, "SHALL", "First constraint of first template does does not have the correct conformance."); TemplateConstraint secondConstraint = firstTemplate.ChildConstraints.ToList()[2]; Assert.IsNotNull(secondConstraint.ParentConstraint, "Third constraint of the first template does not have a parent constraint."); }