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"); }
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_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); }
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_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); }
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_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); }
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); }
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_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 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_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_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); }