public void Initialization() { Assert.That(_propertyRule.DisplayName, Is.TypeOf(typeof(LazyStringSource))); Assert.That(_propertyRule.DisplayName.GetString(), Is.Null); Assert.That(_propertyRule.PropertyName, Is.EqualTo("LastName")); Assert.That(_propertyRule.GetDisplayName(), Is.EqualTo("Last Name")); }
public void PropertyDescription_should_return_property_name_split() { var builder = _validator.RuleFor(x => x.DateOfBirth); PropertyRule rule = null; builder.Configure(r => rule = r); rule.GetDisplayName(null).ShouldEqual("Date Of Birth"); }
/// <summary> /// Get the formatted error message of the validator. /// </summary> /// <returns>A formatted error message string.</returns> protected virtual Func<string, string> FormatMessage(PropertyRule rule, IPropertyValidator validator) { return displayName => { return new MessageFormatter() .AppendPropertyName(displayName ?? rule.GetDisplayName()) .BuildMessage(validator.ErrorMessageSource.GetString()); }; }
/// <summary> /// Get the formatted error message of the validator. /// </summary> /// <returns>A formatted error message string.</returns> protected virtual Func <string, string> FormatMessage(PropertyRule rule, IPropertyValidator validator) { return(displayName => { return new MessageFormatter() .AppendPropertyName(displayName ?? rule.GetDisplayName()) .BuildMessage(validator.ErrorMessageSource.GetString(null)); }); }
public void Rule_for_a_non_memberexpression_should_not_generate_property_name() { var builder = _validator.RuleFor(x => x.CalculateSalary()); PropertyRule rule = null; builder.Configure(r => rule = r); rule.GetDisplayName(null).ShouldBeNull(); rule.PropertyName.ShouldBeNull(); }
public void PropertyDescription_should_return_custom_property_name() { var builder = _validator.RuleFor(x => x.DateOfBirth); PropertyRule rule = null; builder.Configure(r => rule = r); builder.NotEqual(default(DateTime)).WithName("Foo"); rule.GetDisplayName(null).ShouldEqual("Foo"); }
/// <summary> /// Inspect the validator type and add the rules/messages with the correct properties. /// </summary> /// <param name="rule">FluentValidation Property Rule.</param> /// <param name="validator">Validator to inspect.</param> /// <param name="propertyName">Name of the property to check.</param> internal override void AddRuleBasedOnValidatorType(PropertyRule rule, IPropertyValidator validator, string propertyName) { var displayName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(rule.GetDisplayName()); var errorMessageTemplate = validator.Options.ErrorMessageSource.GetString(null); // This is the open extension point for OCP (Open Closed Principle) switch (validator) { case NotNullValidator _: case NotEmptyValidator _: this.AddRule(propertyName, displayName, errorMessageTemplate, "required", true); break; case AspNetCoreCompatibleEmailValidator _: this.AddRule(propertyName, displayName, errorMessageTemplate, "regex", AspNetCoreCompatibleEmailAddressRegex); break; case EmailValidator _: this.AddRule(propertyName, displayName, errorMessageTemplate, "regex", Net4xEmailAddressRegex); break; case RegularExpressionValidator expressionValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "regex", expressionValidator.Expression); break; case EqualValidator equalValidator: var comparisonValue = equalValidator.MemberToCompare?.Name ?? equalValidator.ValueToCompare; this.AddRule(propertyName, displayName, errorMessageTemplate, "compare", comparisonValue, ("ComparisonValue", comparisonValue)); break; case LessThanValidator lessThanValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "lessThan", lessThanValidator.ValueToCompare, ("ComparisonValue", lessThanValidator.ValueToCompare)); break; case LessThanOrEqualValidator lessThanOrEqualValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "lessThanOrEqualTo", lessThanOrEqualValidator.ValueToCompare, ("ComparisonValue", lessThanOrEqualValidator.ValueToCompare)); break; case GreaterThanValidator greaterThanValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "greaterThan", greaterThanValidator.ValueToCompare, ("ComparisonValue", greaterThanValidator.ValueToCompare)); break; case GreaterThanOrEqualValidator greaterThanOrEqualValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "greaterThanOrEqualTo", greaterThanOrEqualValidator.ValueToCompare, ("ComparisonValue", greaterThanOrEqualValidator.ValueToCompare)); break; case InclusiveBetweenValidator inclusiveBetweenValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "range", new FromToValues(inclusiveBetweenValidator.From, inclusiveBetweenValidator.To), ("From", inclusiveBetweenValidator.From), ("To", inclusiveBetweenValidator.To)); break; case ExclusiveBetweenValidator exclusiveBetweenValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "exclusiveRange", new FromToValues(exclusiveBetweenValidator.From, exclusiveBetweenValidator.To), ("From", exclusiveBetweenValidator.From), ("To", exclusiveBetweenValidator.To)); break; case ExactLengthValidator exactLengthValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "exactLength", exactLengthValidator.Max, ("MaxLength", exactLengthValidator.Max)); break; case MinimumLengthValidator minimumLengthValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "minLength", minimumLengthValidator.Min, ("MinLength", minimumLengthValidator.Min)); break; case MaximumLengthValidator maximumLengthValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "maxLength", maximumLengthValidator.Max, ("MaxLength", maximumLengthValidator.Max)); break; case LengthValidator lengthValidator: this.AddRule(propertyName, displayName, errorMessageTemplate, "length", new MinMaxValues(lengthValidator.Min, lengthValidator.Max), ("MinLength", lengthValidator.Min), ("MaxLength", lengthValidator.Max)); break; default: this.AddRule(propertyName, displayName, errorMessageTemplate, "remote", rule.PropertyName); break; } }