public void Constructor_SetErrorMessage() { // Arrange / Act var sut = new StringLengthValidationRule(ERROR_MESSAGE, 20); // Assert sut.ErrorMessage.Should().Be(ERROR_MESSAGE); }
public void Validate_ForNullNotAllowed_Fails() { // Arrange string value = null; var sut = new StringLengthValidationRule(ERROR_MESSAGE, 20); // Act var result = sut.Validate(value); // Assert result.Should().BeFalse(); }
public void Validate_ForNullAllowed_Pass() { // Arrange string value = null; var sut = new StringLengthValidationRule(ERROR_MESSAGE, 20, nullIsValid: true); // Act var result = sut.Validate(value); // Assert result.Should().BeTrue(); }
public void Validate_ForMinLength(int length, int valueLength, bool expected) { // Arrange var value = GetValueOfLength(valueLength); var sut = new StringLengthValidationRule(ERROR_MESSAGE, length, checkMaxLength: false); // Act var result = sut.Validate(value); // Assert result.Should().Be(expected); }
private static void CreateValidationRules(ValueBindingModel valueBindingModel) { // validation rules var rules = new List <ValidationRule>(); if (!valueBindingModel.IsOptional) { switch (valueBindingModel.Control.Type) { case ControlTypes.Options: rules.Add(new OptionSelectedValidationRule()); break; case ControlTypes.Folder: case ControlTypes.InputFile: case ControlTypes.Integer: case ControlTypes.Multiline: case ControlTypes.Number: case ControlTypes.OutputFile: case ControlTypes.Text: case ControlTypes.Uri: rules.Add(new NotNullOrEmptyValidationRule()); break; } } // these could also be hardcoded in the xaml of the control itself // but we want to keep flexibility for when to activate them. switch (valueBindingModel.Control.Type) { case ControlTypes.Folder: rules.Add(new FolderExistsValidationRule()); break; case ControlTypes.InputFile: rules.Add(new FileExistsValiadtionRule()); break; case ControlTypes.Uri: rules.Add(new UriValidationRule()); break; } var mask = valueBindingModel.Control.Properties.Mask(); if (!String.IsNullOrWhiteSpace(mask)) { switch (valueBindingModel.Control.Type) { case ControlTypes.Folder: case ControlTypes.InputFile: case ControlTypes.OutputFile: // no-op break; case ControlTypes.Text: var rule = new RegexValidationRule(); rule.Regex = mask; rules.Add(rule); break; default: Trace.WriteLine(String.Format( "No validation rule was applied to '{0}' for the mask attribute '{1}'.", valueBindingModel.Name, mask), "ValidationRules"); break; } } var min = valueBindingModel.Control.Properties.MinValue(); var max = valueBindingModel.Control.Properties.MaxValue(); if (!String.IsNullOrWhiteSpace(min) || !String.IsNullOrWhiteSpace(max)) { switch (valueBindingModel.Control.Type) { case ControlTypes.Integer: var intRule = IntegerMinMaxValidationRule.Create(min, max); if (intRule != null) { rules.Add(intRule); } break; case ControlTypes.Number: var nmbRule = NumberMinMaxValidationRule.Create(min, max); if (nmbRule != null) { rules.Add(nmbRule); } break; case ControlTypes.Folder: case ControlTypes.InputFile: case ControlTypes.Multiline: case ControlTypes.OutputFile: case ControlTypes.Text: case ControlTypes.Uri: var lngRule = StringLengthValidationRule.Create(min, max); if (lngRule != null) { rules.Add(lngRule); } break; default: Trace.WriteLine(String.Format( "No validation rule was applied to '{0}' for the min ('{1}') and max ('{2}') attributes.", valueBindingModel.Name, min, max), "ValidationRules"); break; } } if (rules.Count > 0) { valueBindingModel.Control.ValidationRules = rules; } }