public void TestFixtureSetUp()
        {
            _testViewModel           = new TestViewModel();
            _validationConfiguration = new ValidationConfiguration();

            var convention0 = new DefaultPropertyConvention(x => !x.Name.StartsWith("Optional"));

            convention0.AddValidationRule <IsRequired <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(convention0);

            var convention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));

            convention1.AddValidationRule <IsUrl <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(convention1);

            var convention2 = new DefaultPropertyConvention(x => x.Name.Contains("Email"));

            convention2.AddValidationRule <IsEmail <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(convention2);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType <TestViewModel>();

            IValidationResults <TestViewModel> validationResults = _validationConfiguration.Validate(_testViewModel);

            _testViewModel.ValidationResults.CloneFrom(validationResults);

            _testView = new TestView();
            _testView.SetModel(_testViewModel);
        }
        public void Gets_label_from_DisplayNameAttribute()
        {
            var conventions = new DefaultPropertyConvention();
            var model       = conventions.Create(typeof(TestModel).GetProperty("Name"), new TestModel(), "Name", typeof(TestModel));

            model.Label.ShouldEqual("Foo");
        }
Exemple #3
0
        public void Should_be_able_to_actually_validate_an_object_that_implements_ICanBeValidated_using_the_default_conventions()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));

            defaultPropertyConvention1.AddValidationRule <IsUrl <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            DefaultPropertyConvention defaultPropertyConvention2 = new DefaultPropertyConvention(x => x.Name.Contains("Email"));

            defaultPropertyConvention2.AddValidationRule <IsEmail <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention2);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType <TestViewModel>();

            IValidationResults <TestViewModel> validationResults = _validationConfiguration.Validate(_testViewModel);

            validationResults.ShouldNotBeNull();
            validationResults.GetInvalidFields().Count().ShouldEqual(3);
            validationResults.GetInvalidFields().First().ShouldEqual("property => property.False_Email_1");
            validationResults.GetInvalidFields().Last().ShouldEqual("property => property.False_Url");
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().First()).Count().ShouldEqual(1);
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().First()).First().ShouldBeOfType <IsEmail <TestViewModel> >();
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().Last()).Count().ShouldEqual(1);
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().Last()).First().ShouldBeOfType <IsUrl <TestViewModel> >();
        }
Exemple #4
0
        public void Should_be_able_to_add_validation_rules_to_default_property_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.Contains(""));

            defaultPropertyConvention.AddValidationRule <IsRequired <CanBeAnyViewModel> >();

            defaultPropertyConvention.GetValidationRules().Count().ShouldEqual(1);
        }
Exemple #5
0
        public void Should_be_able_to_add_default_validation_rules_for_properties_by_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.Contains(""));

            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention);

            _validationConfiguration.DefaultPropertyConventions.GetDefaultPropertyConventions().Count().ShouldEqual(1);
        }
Exemple #6
0
        public void Should_not_be_able_to_assign_two_default_property_convemtions_with_the_same_property_filter_conventions_to_default_property_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.StartsWith("Email"));

            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            DefaultPropertyConvention defaultPropertyConvention2 = new DefaultPropertyConvention(x => x.Name.StartsWith("Email"));

            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention2);

            _validationConfiguration.DefaultPropertyConventions.GetDefaultPropertyConventions().Count().ShouldEqual(1);
        }
        public void Should_add_a_validation_rule_to_a_scanned_ICanBeValidated_implementation_on_a_specific_property()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));
            defaultPropertyConvention1.AddValidationRule<IsUrl<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType<TestViewModel>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(3);

            _validationConfiguration.DiscoveredTypes.AddRuleFor<TestViewModel>(x => x.Valid_Email, new ValidationRuleSetup(typeof(IsRequired<>), new AdditionalProperties()));

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(4);
        }
        public void Should_add_the_default_property_conventions_to_discovered_types_when_they_are_added()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));
            defaultPropertyConvention1.AddValidationRule<IsUrl<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            DefaultPropertyConvention defaultPropertyConvention2 = new DefaultPropertyConvention(x => x.Name.Contains("Email"));
            defaultPropertyConvention2.AddValidationRule<IsEmail<CanBeAnyViewModel>>();
            defaultPropertyConvention2.AddValidationRule<IsRequired<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention2);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType<TestViewModel>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(9);
        }
Exemple #9
0
        public void Should_be_able_to_add_aditional_required_properties_to_validation_rule()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.Contains("question"));

            var properties = new AdditionalProperties();
            var expression = new AdditionalPropertyExpression(properties);

            expression.NeedsAdditionalPropertyMatching(p => p.Name.Contains("answer"));
            expression.NeedsAdditionalPropertyMatching(p => !p.Name.Contains("question"));

            defaultPropertyConvention.AddValidationRule <IsRequired <CanBeAnyViewModel> >(properties);

            defaultPropertyConvention.GetValidationRules().Count().ShouldEqual(1);
            defaultPropertyConvention.GetAdditionalPropertiesForRule(defaultPropertyConvention.GetValidationRules().First()).Count().ShouldEqual(2);
        }
Exemple #10
0
        public void Should_remove_all_validation_rules_from_a_scanned_ICanBeValidated_implementation()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));

            defaultPropertyConvention1.AddValidationRule <IsUrl <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType <TestViewModel>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(3);

            _validationConfiguration.DiscoveredTypes.RemoveAllRulesFor <TestViewModel>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(0);
        }
Exemple #11
0
        public void Should_not_add_duplicate_validation_rules_to_a_scanned_ICanBeValidated_implementation_on_a_specific_property()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));

            defaultPropertyConvention1.AddValidationRule <IsUrl <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType <TestViewModel>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(3);

            _validationConfiguration.DiscoveredTypes.AddRuleFor <TestViewModel>(x => x.Valid_Url_1, new ValidationRuleSetup(typeof(IsUrl <>), new AdditionalProperties()));

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(3);
        }
Exemple #12
0
        public void Should_add_the_default_property_conventions_to_discovered_types_when_they_are_added()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));

            defaultPropertyConvention1.AddValidationRule <IsUrl <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            DefaultPropertyConvention defaultPropertyConvention2 = new DefaultPropertyConvention(x => x.Name.Contains("Email"));

            defaultPropertyConvention2.AddValidationRule <IsEmail <CanBeAnyViewModel> >();
            defaultPropertyConvention2.AddValidationRule <IsRequired <CanBeAnyViewModel> >();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention2);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType <TestViewModel>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(9);
        }
        public ByDefaultDslChain PropertiesMatching(Expression <Func <PropertyInfo, bool> > propertyFilter, Action <RuleExpression> rules)
        {
            var propertyConvention = _validationConfiguration.DefaultPropertyConventions.GetDefaultPropertyConventions()
                                     .Where(convention => convention.ToString() == new UglyExpressionConvertor().ToString(propertyFilter))
                                     .FirstOrDefault();

            if (propertyConvention != null)
            {
                rules(new RuleExpression(propertyConvention));
                return(this);
            }

            var defaultPropertyConvention = new DefaultPropertyConvention(propertyFilter);

            rules(new RuleExpression(defaultPropertyConvention));

            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention);
            return(this);
        }
        public void Should_be_able_to_actually_validate_an_object_that_implements_ICanBeValidated_using_the_default_conventions()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));
            defaultPropertyConvention1.AddValidationRule<IsUrl<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            DefaultPropertyConvention defaultPropertyConvention2 = new DefaultPropertyConvention(x => x.Name.Contains("Email"));
            defaultPropertyConvention2.AddValidationRule<IsEmail<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention2);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType<TestViewModel>();

            IValidationResults<TestViewModel> validationResults = _validationConfiguration.Validate(_testViewModel);

            validationResults.ShouldNotBeNull();
            validationResults.GetInvalidFields().Count().ShouldEqual(3);
            validationResults.GetInvalidFields().First().ShouldEqual("property => property.False_Email_1");
            validationResults.GetInvalidFields().Last().ShouldEqual("property => property.False_Url");
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().First()).Count().ShouldEqual(1);
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().First()).First().ShouldBeOfType<IsEmail<TestViewModel>>();
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().Last()).Count().ShouldEqual(1);
            validationResults.GetBrokenRulesFor(validationResults.GetInvalidFields().Last()).First().ShouldBeOfType<IsUrl<TestViewModel>>();
        }
        public void Should_not_be_able_to_assign_two_default_property_convemtions_with_the_same_property_filter_conventions_to_default_property_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.StartsWith("Email"));
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            DefaultPropertyConvention defaultPropertyConvention2 = new DefaultPropertyConvention(x => x.Name.StartsWith("Email"));
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention2);

            _validationConfiguration.DefaultPropertyConventions.GetDefaultPropertyConventions().Count().ShouldEqual(1);
        }
Exemple #16
0
        public void Should_be_able_to_assign_a_property_filter_convention_to_default_property_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.StartsWith("Email"));

            defaultPropertyConvention.ToString().ShouldEqual("property => property.Name.StartsWith(\"Email\")");
        }
 public void Gets_label_from_DisplayNameAttribute()
 {
     var conventions = new DefaultPropertyConvention();
     var model = conventions.Create(typeof(TestModel).GetProperty("Name"), new TestModel(), "Name", typeof(TestModel));
     model.Label.ShouldEqual("Foo");
 }
 public void AddDefaultPropertyConvention(DefaultPropertyConvention defaultPropertyConvention)
 {
     if (!_defaultPropertyConventions.Contains(defaultPropertyConvention, new DefaultPropertyConventionComparer()))
         _defaultPropertyConventions.Add(defaultPropertyConvention);
 }
 public RuleExpression(DefaultPropertyConvention defaultPropertyConvention)
 {
     _defaultPropertyConvention = defaultPropertyConvention;
 }
        public void TestFixtureSetUp()
        {
            _testViewModel = new TestViewModel();
            _validationConfiguration = new ValidationConfiguration();

            var convention0 = new DefaultPropertyConvention(x => !x.Name.StartsWith("Optional"));
            convention0.AddValidationRule<IsRequired<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(convention0);

            var convention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));
            convention1.AddValidationRule<IsUrl<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(convention1);

            var convention2 = new DefaultPropertyConvention(x => x.Name.Contains("Email"));
            convention2.AddValidationRule<IsEmail<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(convention2);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType<TestViewModel>();

            IValidationResults<TestViewModel> validationResults = _validationConfiguration.Validate(_testViewModel);
            _testViewModel.ValidationResults.CloneFrom(validationResults);

            _testView = new TestView();
            _testView.SetModel(_testViewModel);
        }
        public void Should_be_able_to_add_default_validation_rules_for_properties_by_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.Contains(""));

            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention);

            _validationConfiguration.DefaultPropertyConventions.GetDefaultPropertyConventions().Count().ShouldEqual(1);
        }
        public void Should_be_able_to_add_aditional_required_properties_to_validation_rule()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.Contains("question"));

            var properties = new AdditionalProperties();
            var expression = new AdditionalPropertyExpression(properties);
            expression.NeedsAdditionalPropertyMatching(p => p.Name.Contains("answer"));
            expression.NeedsAdditionalPropertyMatching(p => !p.Name.Contains("question"));

            defaultPropertyConvention.AddValidationRule<IsRequired<CanBeAnyViewModel>>(properties);

            defaultPropertyConvention.GetValidationRules().Count().ShouldEqual(1);
            defaultPropertyConvention.GetAdditionalPropertiesForRule(defaultPropertyConvention.GetValidationRules().First()).Count().ShouldEqual(2);
        }
        public void Should_be_able_to_assign_a_property_filter_convention_to_default_property_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.StartsWith("Email"));

            defaultPropertyConvention.ToString().ShouldEqual("property => property.Name.StartsWith(\"Email\")");
        }
        public void Should_not_be_able_to_add_duplicate_validation_rules_to_default_property_convention()
        {
            DefaultPropertyConvention defaultPropertyConvention = new DefaultPropertyConvention(x => x.Name.Contains(""));

            defaultPropertyConvention.AddValidationRule<IsRequired<CanBeAnyViewModel>>();
            defaultPropertyConvention.AddValidationRule<IsRequired<CanBeAnyViewModel>>();

            defaultPropertyConvention.GetValidationRules().Count().ShouldEqual(1);
        }
        public void Should_remove_a_validation_rule_from_a_scanned_ICanBeValidated_implementation()
        {
            DefaultPropertyConvention defaultPropertyConvention1 = new DefaultPropertyConvention(x => x.Name.Contains("Url"));
            defaultPropertyConvention1.AddValidationRule<IsUrl<CanBeAnyViewModel>>();
            defaultPropertyConvention1.AddValidationRule<IsEmail<CanBeAnyViewModel>>();
            _validationConfiguration.DefaultPropertyConventions.AddDefaultPropertyConvention(defaultPropertyConvention1);

            _validationConfiguration.DiscoveredTypes.AddDiscoveredType<TestViewModel>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(6);

            _validationConfiguration.DiscoveredTypes.RemoveRuleFrom<TestViewModel, IsUrl<TestViewModel>>();

            _validationConfiguration.DiscoveredTypes.GetRulesFor(new TestViewModel()).Count().ShouldEqual(3);
        }