public void RuleFromInvalidRuleTest()
        {
            ICustomRuleContainer testContainer = new TestCustomRules();

            PermissionRules uut = new PermissionRules();

            PermissionRules.IsAuthorizedMethod testRule = uut.RuleDelegateFromMethodName(testContainer, "BOGUS");
            Assert.IsNull(testRule);

            testRule = uut.RuleDelegateFromMethodName(testContainer, "CustomRuleIsNotValidRule");
            Assert.IsNull(testRule);


            testRule = uut.RuleDelegateFromMethodName(testContainer, "CustomRuleWrongSignatureRule");
            Assert.IsNull(testRule);
        }
        public void ContextObjectTest()
        {
            string methodName = "CustomRuleAreEqualRule";

            PermissionRules      uut             = new PermissionRules();
            ICustomRuleContainer customContainer = new TestCustomRules();

            PermissionRules.IsAuthorizedMethod del = uut.RuleDelegateFromMethodName(customContainer, methodName);
            Assert.IsNotNull(del);

            Dictionary <string, object> contextPropertyBag = customContainer.PreparePropertiesForRule(methodName, null);

            contextPropertyBag.Add("ContextCompareObject", Guid.NewGuid());

            // No context object is passed. Should return false
            bool?isAuthorized = del.Invoke(PermissionRulesTests.TestIdentity, PermissionRulesTests.TestRoles, null, contextPropertyBag);

            Assert.IsTrue(isAuthorized.HasValue);
            Assert.IsFalse(isAuthorized.Value);

            // A different context object is passed. Should return false
            isAuthorized = del.Invoke(PermissionRulesTests.TestIdentity, PermissionRulesTests.TestRoles, Guid.NewGuid(), contextPropertyBag);
            Assert.IsTrue(isAuthorized.HasValue);
            Assert.IsFalse(isAuthorized.Value);

            // The same context object is passed. Should return true
            isAuthorized = del.Invoke(PermissionRulesTests.TestIdentity, PermissionRulesTests.TestRoles, contextPropertyBag["ContextCompareObject"], contextPropertyBag);
            Assert.IsTrue(isAuthorized.HasValue);
            Assert.IsTrue(isAuthorized.Value);
        }
        public void InvalidPropertyBagTest()
        {
            string methodName = "CustomRuleAreEqualRule";

            PermissionRules      uut             = new PermissionRules();
            ICustomRuleContainer customContainer = new TestCustomRules();

            PermissionRules.IsAuthorizedMethod del = uut.RuleDelegateFromMethodName(customContainer, methodName);
            Assert.IsNotNull(del);

            Dictionary <string, object> contextPropertyBag = customContainer.PreparePropertiesForRule(methodName, null);
            // contextPropertyBag.Add("ContextCompareObject", Guid.NewGuid()); // don't pass in a ContextCompareObject

            // No context compare object is passed. Should throw error
            bool?isAuthorized = del.Invoke(PermissionRulesTests.TestIdentity, PermissionRulesTests.TestRoles, null, contextPropertyBag);
        }
        public void RuleFromTypeAndMethodNameTest()
        {
            string typeName   = "Open.SPF.Core.Test.TestCustomRules, Open.SPF.Core.Test, Version=1.2.1, Culture=neutral, PublicKeyToken=b4313207536550be";
            string methodName = "CustomRuleIsAlwaysAuthorized";

            PermissionRules      uut             = new PermissionRules();
            ICustomRuleContainer customContainer = uut.CustomRuleContainerFromTypeName(typeName);

            Assert.IsNotNull(customContainer);
            PermissionRules.IsAuthorizedMethod del = uut.RuleDelegateFromMethodName(customContainer, methodName);
            Assert.IsNotNull(del);

            string ruleName = uut.RuleNameFromMethodName(customContainer, methodName);

            Assert.IsNotNull(ruleName);
            Assert.AreEqual(methodName, ruleName);
            Dictionary <string, object> contextPropertyBag = customContainer.PreparePropertiesForRule(ruleName, null);

            bool?isAuthorized = del.Invoke(PermissionRulesTests.TestIdentity, PermissionRulesTests.TestRoles, null, contextPropertyBag);

            Assert.IsTrue(isAuthorized.HasValue);
            Assert.IsTrue(isAuthorized.Value);
        }