public void ShouldBePossibleEvaluateRuleAndFireExpressionListener()
        {
            var rule = new Rule();

            rule.Name = "fake.rule";

            rule.AddListener <IDictionary <string, object> >((o) =>
            {
                o["Email"] = "*****@*****.**";
            });

            var filter = rule.AddAndFilter();

            filter.Add(new EqualsConstraint("Name", "John Doe"));

            this.AddRule(rule);

            var data = new Dictionary <string, object>();

            data["Name"] = "John Doe";

            this.Engine.EvaluateAndFire(data);

            Assert.Equal("*****@*****.**", data["Email"]);
        }
示例#2
0
        public void ShouldBePossibleEvaluateRuleWithIsNullConstraintWithNotPresentProperty()
        {
            var rule   = new Rule();
            var filter = rule.AddAndFilter();

            filter.Add(new IsNullConstraint("Name"));

            this.AddRule(rule);

            var rules = this.Engine.Evaluate(new { });

            Assert.Equal(1, rules.Count());
        }
示例#3
0
        public void ShouldBePossibleEvaluateRuleWithDynamicData()
        {
            var rule   = new Rule();
            var filter = rule.AddAndFilter();

            filter.Add(new EqualsConstraint("Name", "John Doe"));
            this.AddRule(rule);

            var rules = this.Engine.Evaluate(new
            {
                Name = "John Doe"
            });

            Assert.Equal(1, rules.Count());
        }
        public void ShouldBePossibleEvaluateRuleWithLessThanConstraint()
        {
            var rule   = new Rule();
            var filter = rule.AddAndFilter();

            filter.Add(new LessThanConstraint("Age", 18));

            this.AddRule(rule);

            var rules = this.Engine.Evaluate(new
            {
                Age = 17
            });

            Assert.Equal(1, rules.Count());
        }
        public void ShouldNotBePossibleEvaluateRuleWithStartsWithConstraintAndOtherStartSubstring()
        {
            var rule   = new Rule();
            var filter = rule.AddAndFilter();

            filter.Add(new StartsWithConstraint("Name", "John"));

            this.AddRule(rule);

            var rules = this.Engine.Evaluate(new
            {
                Name = "ohn"
            });

            Assert.Equal(0, rules.Count());
        }
        public void ShouldBePossibleEvaluateRuleWithIsUtcTodayConstraint()
        {
            var rule   = new Rule();
            var filter = rule.AddAndFilter();

            filter.Add(new IsTodayConstraint("Birthday"));

            this.AddRule(rule);

            var rules = this.Engine.Evaluate(new
            {
                Birthday = DateTime.UtcNow
            });

            Assert.Equal(1, rules.Count());
        }
示例#7
0
        public void ShouldBePossibleEvaluateRuleWithNotEqualsConstraint()
        {
            var rule   = new Rule();
            var filter = rule.AddAndFilter();

            filter.Add(new NotEqualsConstraint("Name", "John Doe"));
            this.AddRule(rule);

            var data = new Dictionary <string, object>();

            data["Name"] = "Fake User";

            var rules = this.Engine.Evaluate(data);

            Assert.Equal(1, rules.Count());
        }
示例#8
0
        public void ShouldBePossibleEvaluateRuleAndFireListener()
        {
            var rule = new Rule();

            rule.Name = "fake.rule";
            rule.AddListener(new FakeRuleListener());

            var filter = rule.AddAndFilter();

            filter.Add(new EqualsConstraint("Name", "John Doe"));

            this.AddRule(rule);

            var data = new Dictionary <string, object>();

            data["Name"] = "John Doe";

            this.Engine.EvaluateAndFire(data);

            Assert.Equal(true, data["Changed"]);
        }
示例#9
0
        public void ShouldBePossibleEvaluateRuleWithCustomStrategy()
        {
            var rule = new Rule();

            rule.Name = "fake.rule";

            rule.AddAndFilter().Add(new EqualsConstraint("Name", "John Doe"));

            this.AddRule(rule);

            var data = new
            {
                Name = "John Doe"
            };

            Assert.NotEmpty(this.Engine.Evaluate(data));

            var customEngine = new RuleEngine(this.Pool, new EmptyRuleStrategy());

            Assert.Empty(customEngine.Evaluate(data));
        }