public void TestReadConditionsSecondLevel()
        {
            string policyCatalogueFilename = m_testPath + "SamplePolicyCatalogue.xml";
            string policyLanguageFilename = m_testPath + "SampleLanguageBase.xml";
            string policyFilename = m_testPath + "SamplePolicy.xml";

            XmlPolicyLanguageStore.Instance.AddLanguage(System.IO.File.ReadAllText(policyLanguageFilename));

            XMLPolicyCatalogueStore catalogueStore = XMLPolicyCatalogueStore.Instance;
            catalogueStore.AddPolicyCatalogue(System.IO.File.ReadAllText(policyCatalogueFilename));

            XmlStore store = new XmlStore(System.IO.File.ReadAllText(policyFilename));

            XmlPolicyReader xmlPolicyReader = store.Reader as XmlPolicyReader;
            string policyId = "{8FC9EB93-C376-4E96-B22E-71FAA848393D}";
            string ruleId = "{56C991B8-953D-46AD-B9E9-0CFB08F52C23}";
            string conditionGroupId = "{D64056E5-A19D-4B29-8F4A-A70337B42A19}";
            string childConditionGroupId = "{661EDD6F-D750-493A-9932-E56C8C22E2CF}";
            string conditionsXpath = string.Format(@"/PolicySetStore/PolicySets/PolicySet[@id='{0}']/Policies/Policy[@id='{1}']/Conditions/ConditionGroup[@id='{2}']/ConditionGroup[@id='{3}']",
                policyId, ruleId, conditionGroupId, childConditionGroupId);

            PolicyObjectCollection<IPolicyObject> conditions = new PolicyObjectCollection<IPolicyObject>();

            XmlConditionGroupReader conditionReader = new XmlConditionGroupReader(xmlPolicyReader, conditions, conditionsXpath);
            conditionReader.Read();

            Assert.AreEqual(1, conditions.Count);

            ICondition condition = conditions[0] as ICondition;
            Assert.IsNotNull(condition);
            Assert.AreEqual(new Guid("{6B7F6B0C-747A-4BD0-A65D-A1FB9E44FE7C}"), condition.Identifier);
            Assert.AreEqual("IDataComparer", condition.Class);
            Assert.AreEqual(OperatorType.GreaterThan, condition.Operator);
        }
        public void TestReadConditionGroups()
        {
            string policyCatalogueFilename = m_testPath + "SamplePolicyCatalogue.xml";
            string policyLanguageFilename = m_testPath + "SampleLanguageBase.xml";
            string policyFilename = m_testPath + "SamplePolicy.xml";

            XmlPolicyLanguageStore.Instance.AddLanguage(System.IO.File.ReadAllText(policyLanguageFilename));

            XMLPolicyCatalogueStore catalogueStore = XMLPolicyCatalogueStore.Instance;
            catalogueStore.AddPolicyCatalogue(System.IO.File.ReadAllText(policyCatalogueFilename));

            XmlStore store = new XmlStore(System.IO.File.ReadAllText(policyFilename));

            XmlPolicyReader xmlPolicyReader = store.Reader as XmlPolicyReader;
            string policyId = "{8FC9EB93-C376-4E96-B22E-71FAA848393D}";
            string ruleId = "{56C991B8-953D-46AD-B9E9-0CFB08F52C23}";
            string conditionGroupId = "{D64056E5-A19D-4B29-8F4A-A70337B42A19}";
            string conditionsXpath = string.Format(@"/PolicySetStore/PolicySets/PolicySet[@id='{0}']/Policies/Policy[@id='{1}']/Conditions/ConditionGroup[@id='{2}']",
                policyId, ruleId, conditionGroupId);

            PolicyObjectCollection<IPolicyObject> conditions = new PolicyObjectCollection<IPolicyObject>();

            XmlConditionGroupReader XmlConditionGroupReader = new XmlConditionGroupReader(xmlPolicyReader, conditions, conditionsXpath);
            XmlConditionGroupReader.Read();

            Assert.AreEqual(2, conditions.Count);

            IConditionGroup conditionGroup = conditions[0] as IConditionGroup;
            Assert.IsNotNull(conditionGroup);
            Assert.AreEqual(new Guid("{661EDD6F-D750-493A-9932-E56C8C22E2CF}"), conditionGroup.Identifier);
            Assert.AreEqual("Profanity", conditionGroup.Name.Value);
            Assert.AreEqual(1, conditionGroup.Conditions.Count);

            ICondition conditionGroupCondition = conditionGroup.Conditions[0] as ICondition;
            Assert.IsNotNull(conditionGroupCondition);
            Assert.AreEqual(new Guid("{6B7F6B0C-747A-4BD0-A65D-A1FB9E44FE7C}"), conditionGroupCondition.Identifier);
            Assert.AreEqual(OperatorType.GreaterThan, conditionGroupCondition.Operator);
            Assert.AreEqual(new Guid("{4E2F50C5-D310-47A1-AE3A-621F5C77FA68}"), conditionGroupCondition.DataLeft.Identifier);
            IDataSource dataSource = conditionGroupCondition.DataLeft.Data as IDataSource;
            Assert.IsNotNull(dataSource, "Expected a valid data source");
            IDataItem data = conditionGroupCondition.DataRight.Data as IDataItem;
            Assert.IsNotNull(data);
            Assert.AreEqual(10, data.Value);

            ICondition condition = conditions[1] as ICondition;
            Assert.IsNotNull(condition);
            Assert.AreEqual(new Guid("{A6F876B6-AD6D-4842-BC0D-4635D1EEE916}"), condition.Identifier);
            Assert.AreEqual("IDataComparer", condition.Class);
            Assert.AreEqual(OperatorType.GreaterThanOrEqualTo, condition.Operator);
            Assert.AreEqual(new Guid("{7CED5561-FD8C-423C-838F-9440EDFE6758}"), condition.DataLeft.Identifier);
            dataSource = condition.DataLeft.Data as IDataSource;
            Assert.IsNotNull(dataSource, "Expected a valid data source");
            data = condition.DataRight.Data as IDataItem;
            Assert.IsNotNull(data);
            Assert.AreEqual(2, data.Value);
        }
        public void TestReadMultiplePoliciesConditionGroups()
        {
            string policyCatalogueFilename = m_testPath + "ExpectedMultiplePoliciesCatalogue.xml";
            string policyLanguageFilename = m_testPath + "ExpectedMultiplePoliciesLanguage.xml";
            string policyFilename = m_testPath + "ExpectedWriteMultiplePolicies.xml";

            XmlPolicyLanguageStore.Instance.AddLanguage(System.IO.File.ReadAllText(policyLanguageFilename));

            XMLPolicyCatalogueStore catalogueStore = XMLPolicyCatalogueStore.Instance;
            catalogueStore.AddPolicyCatalogue(System.IO.File.ReadAllText(policyCatalogueFilename));

            XmlStore store = new XmlStore(System.IO.File.ReadAllText(policyFilename));

            XmlPolicyReader xmlPolicyReader = store.Reader as XmlPolicyReader;
            string policyId = "{8FC9EB93-C376-4E96-B22E-71FAA848393D}";
            string ruleId = "{C0F6D4BB-CBF1-41FC-8A28-616D6FC1DC73}";
            string conditionGroupId = "{D64056E5-A19D-4B29-8F4A-A70337B42A19}";
            string conditionsXpath = string.Format(@"/PolicySetStore/PolicySets/PolicySet[@id='{0}']/Policies/Policy[@id='{1}']/Conditions/ConditionGroup[@id='{2}']",
                policyId, ruleId, conditionGroupId);

            IPolicyObjectCollection<IPolicyObject> conditions = new PolicyObjectCollection<IPolicyObject>();
            XmlConditionGroupReader conditionReader = new XmlConditionGroupReader(xmlPolicyReader, conditions, conditionsXpath);
            conditionReader.Read();

            Assert.AreEqual(1, conditions.Count);
            IConditionGroup conditionGroup = conditions[0] as IConditionGroup;
            Assert.IsNotNull(conditionGroup);
            Assert.AreEqual(new Guid("{661EDD6F-D750-493A-9932-E56C8C22E2CF}"), conditionGroup.Identifier);
            Assert.AreEqual(1, conditionGroup.Conditions.Count);
            Assert.AreEqual(new Guid("{6B7F6B0C-747A-4BD0-A65D-A1FB9E44FE7C}"), conditionGroup.Conditions[0].Identifier);
        }