public void Can_add_new_resource_manager()
        {
            SetupValidation.AddResourceManager("resources", GetType().Assembly);

            Assert.That(ValidationContext.ResourceManagers.Count, Is.EqualTo(1));
            Assert.That(ValidationContext.ResourceManagers[0].BaseName, Is.EqualTo("resources"));
        }
        public void Can_add_self_referencing_negated_validator()
        {
            SetupValidation.For <Person>(rules => rules.Not.Null());

            var rule = context.GetRuleSetsForType <Person>()[0].Rules.First() as ValidatorRule <Person, Person>;

            Assert.That(rule.Validate(null).IsValid, Is.False);
        }
        public void Can_set_resource_on_validator()
        {
            SetupValidation.For <Person>(rules => rules.Property(p => p.Name).Empty().WithResource("Test"));

            var rule = context.GetRuleSetsForType <Person>().First().Rules.First() as ValidatorRule <Person, string>;

            Assert.That(rule.Resource, Is.EqualTo("Test"));
        }
        public void Can_reset_validation_context()
        {
            SetupValidation.AddResourceManager(new ResourceManager(GetType()));
            SetupValidation.For <Person>(rules => rules.Custom(p => false));
            SetupValidation.Reset();

            Assert.That(ValidationContext.ResourceManagers.Count, Is.EqualTo(0));
            Assert.That(ValidationContext.Current.Validate(new Person()).IsValid, Is.True);
        }
        public void Can_add_resource_manager()
        {
            var rm = new ResourceManager(GetType());

            SetupValidation.AddResourceManager(rm);

            Assert.That(ValidationContext.ResourceManagers.Count, Is.EqualTo(1));
            Assert.That(ValidationContext.ResourceManagers[0], Is.SameAs(rm));
        }
        public void Can_add_validator_rule_for_each_item_of_collection()
        {
            SetupValidation.For <Person>(rules => rules.ForEach(p => p.Possessions).Property(i => i.Weight).GreaterThan(0));

            var rule    = context.GetRuleSetsForType <Person>()[0].Rules.First() as ForEachRule <Person, Item>;
            var valRule = rule.Rules[0] as ValidatorRule <Item, float>;

            Assert.That(valRule, Is.Not.Null);
        }
        public void Can_setup_validation_in_named_context()
        {
            var testContext = new TestValidationContext();

            ValidationContext.SetNamedContext("TestContext", testContext);

            SetupValidation.InContext("TestContext").For <Person>(rules => { });

            Assert.That(testContext.GetRuleSetsForType <Person>().Count, Is.EqualTo(1));
        }
        public void Can_set_property_key()
        {
            SetupValidation.For <Person>(rules => rules.Property(p => p.Name).WithKey("_name").Empty());

            var rule = (ValidatorRule <Person, string>)context.GetRuleSetsForType <Person>().First().Rules.First();

            Assert.That(rule.Validate(new Person {
                Name = "invalid"
            }).BrokenRules.First().PropertyKey, Is.EqualTo("_name"));
        }
        public void Can_set_condition_on_validator()
        {
            var condition = new Predicate <Person>(p => true);

            SetupValidation.For <Person>(rules => rules.Property(p => p.Name).Empty().When(condition));

            var rule = context.GetRuleSetsForType <Person>()[0].Rules.First() as ValidatorRule <Person, string>;

            Assert.That(rule.Condition, Is.SameAs(condition));
        }
        public void Can_add_negated_validator_rule_for_property()
        {
            SetupValidation.For <Person>(rules => rules.Property(p => p.Name).Not.Empty());
            var person = new Person {
                Name = ""
            };

            var rule = context.GetRuleSetsForType <Person>()[0].Rules.First() as ValidatorRule <Person, string>;

            Assert.That(rule.Validate(person).IsValid, Is.False);
        }
        public void Can_convert_property()
        {
            SetupValidation.For <Person>(rules =>
                                         rules.Property(p => p.Age)
                                         .Convert(x => x.ToString())
                                         .Length(1, 2));

            var r1 = context.GetRuleSetsForType <Person>()[0].Rules.ElementAt(0) as ValidatorRule <Person, string>;

            Assert.That(r1.Validate(new Person {
                Age = 12
            }).IsValid, Is.True);
            Assert.That(r1.Validate(new Person {
                Age = 120
            }).IsValid, Is.False);
        }
        public void Can_chain_validators()
        {
            SetupValidation.For <Person>(rules =>
                                         rules.Property(p => p.Name)
                                         .Length(1, 10)
                                         .Matches("^[A-Z][a-z]+$")
                                         );

            var person = new Person {
                Name = "JOhn"
            };

            var r1 = context.GetRuleSetsForType <Person>()[0].Rules.ElementAt(0) as ValidatorRule <Person, string>;
            var r2 = context.GetRuleSetsForType <Person>()[0].Rules.ElementAt(1) as ValidatorRule <Person, string>;

            Assert.That(r1.Validate(person).IsValid, Is.True);
            Assert.That(r2.Validate(person).IsValid, Is.False);
        }
        public void Can_setup_rules_for_type()
        {
            SetupValidation.For <Person>(rules => {});

            Assert.That(context.GetRuleSetsForType <Person>().Count, Is.EqualTo(1));
        }
 public void Cannot_negate_a_negation()
 {
     SetupValidation.For <Person>(rules => rules.Not.Not.Null());
 }
Example #15
0
        public void Can_configure_and_validate_using_fluent_syntax()
        {
            SetupValidation.For <Person>(
                rules => {
                rules.Not.Null();

                rules.Property(p => p.Name)
                .WithKey("_name")
                .WithName("The person's name")
                .Not.Empty().WithMessage("Name is required.")
                .Length(2, 50).WithMessage("Name should be between 2 and 50 characters.")
                .Matches("^([A-Z][a-z]* ?)+$");

                rules.Property(p => p.Age)
                .GreaterOrEqualTo(13).WithMessage("Age must be greater than 13")
                .Convert(x => x.ToString())
                .Length(1, 2).WithMessage("Age must be one or two characters");

                rules.Property(p => p.Notes)
                .Custom(notes => notes.Count <= 10).When(p => p.Age <= 6);

                rules.ForEach(p => p.Notes)
                .Not.Empty()
                .Length(1, 255);

                rules.Property(p => p.Possessions)
                .Custom(possessions => possessions.Sum(i => i.Weight) <= 50).WithMessage("Total weights of possessions must be under 50 pounds.");

                rules.ForEach(p => p.Possessions)
                .Property(i => i.Weight)
                .LowerThan(10).WithMessage("Can't carry a single item that weights more than 10 pounds.");
            });

            var p1 = new Person
            {
                Age   = 21,
                Name  = "John Doe",
                Notes = new List <string> {
                    "Note 1"
                },
                Possessions = new List <Item> {
                    new Item {
                        Weight = 5
                    }
                }
            };

            var p2 = new Person
            {
                Age   = 21,
                Name  = "John doe",             // <-- should be invalid
                Notes = new List <string> {
                    "Note 1"
                },
                Possessions = new List <Item> {
                    new Item {
                        Weight = 12
                    }
                }                                                                      // <-- should be invalid
            };

            var r1 = Validate.Instance(p1);
            var r2 = p2.Validate();

            Assert.That(r1.IsValid, Is.True);
            Assert.That(r2.IsValid, Is.False);
            Assert.That(r2.BrokenRules.Count, Is.EqualTo(2));

            Assert.That(r2.BrokenRules[0].PropertyKey, Is.EqualTo("_name"));
            Assert.That(r2.BrokenRules[0].Message, Is.EqualTo("The person's name does not have the correct format."));
        }