public string GetMessageTemplate(MessageContext context) { //Use Name of the Rule Validator as the Key to get the error message format string //RuleValidator types have Generics which return Type Name as LengthValidator`1 and we need to remove that string key = context.ValidatorType.Name.Split('`').FirstOrDefault(); return GetMessageTemplate(key); }
public static ValidationResult Create(RuleValidator validator, RuleValidatorContext context, IList<Object> parameterValues, object messageKey, IEnumerable<ValidationResult> nestedValidationResults = null) { string message = string.Empty; var messageService = new MessageService(); if (String.IsNullOrEmpty(validator.Message)) { var messageContext = new MessageContext(context, validator.GetType(), validator.Negate, validator.MessageStoreName, messageKey, validator.MessageFormatter); message = messageService.GetDefaultMessageAndFormat(messageContext, parameterValues); } else { //Since the message was supplied, don't get the default message from the store, just format it message = messageService.FormatMessage(validator.Message, context, parameterValues, validator.MessageFormatter); } //Override level if all the nested validation errors are Warnings if (nestedValidationResults != null && nestedValidationResults.All(vr => vr.Level == ValidationLevelType.Warn)) { return new ValidationResult(context.PropertyInfo, message, ValidationLevelType.Warn, context.PropertyValue, nestedValidationResults); } else { return new ValidationResult(context.PropertyInfo, message, context.Level, context.PropertyValue, nestedValidationResults); } //return new ValidationResult(context.PropertyInfo, message, context.Level, context.PropertyValue, nestedValidationResults); }
public static ValidationResult Create(RuleValidator validator, RuleValidatorContext context, IList<Object> parameterValues, object messageKey) { string message = string.Empty; var messageService = new MessageService(); if (String.IsNullOrEmpty(validator.Message)) { var messageContext = new MessageContext(context, validator.GetType(), validator.Negate, validator.MessageStoreName, messageKey, validator.MessageFormatter); message = messageService.GetDefaultMessageAndFormat(messageContext, parameterValues); } else { //Since the message was supplied, don't get the default message from the store, just format it message = messageService.FormatMessage(validator.Message, context, parameterValues, validator.MessageFormatter); } return new ValidationResult(context.PropertyInfo, message, context.Level, context.PropertyValue); }
public string BuildRuleKeyFromContext(MessageContext context) { //Use Name of the Rule Validator as the Key to get the error message format string //RuleValidator types have Generics which return Type Name as LengthValidator`1 and we need to remove that string key = context.ValidatorType.Name.Split('`').FirstOrDefault(); // Remove "Nullable" from end of type name if (key.EndsWith("Nullable")) { key = key.Remove(key.Length - 8); } // Prefix key with "Not_" for negated rule messages if (context.Negate) { key = "Not_" + key; } return key; }
public string GetMessageTemplate(MessageContext context) { var ruleKey = BuildRuleKeyFromContext(context); IMessageStore messageStore; if (!String.IsNullOrEmpty(context.MessageStoreName)) { //Explicit request for this Message Store messageStore = MessageStoreFactory.GetMessageStore(context.MessageStoreName); } else { //Message Store not defined. Look for overrides first, then fall back to default if not found //Select the last message store found messageStore = MessageStoreFactory.GetAllMessageStores().ToList().Last( x => x.IsMessageInStore(ruleKey)); } var messageTemplate = messageStore.GetMessageTemplate(ruleKey); return messageTemplate; }
public void GetFormattedErrorMessage_ReturnsFormattedString() { //Create an Entity var emptyContact = new Contact(); emptyContact.FirstName = null; emptyContact.LastName = null; //Create PropertyValidator var propertyValidator = new PropertyValidator<Contact, string>(contact => contact.LastName); //Create a rule RuleValidator<Contact, string> ruleValidator = new LengthBetween<Contact>(1, 5); //Create a context var context = new RuleValidatorContext<Contact, string>(emptyContact, propertyValidator, null); //create it like this? IOC? Factory? //IMessageStore messageStore = new ResourceMessageStore(); //string errorMessage = messageStore.GetFormattedDefaultMessage(ruleValidator.GetType().Name, context, ruleValidator.Parameters); var messageService = new MessageService(); var messageContext = new MessageContext(context, ruleValidator.GetType(), false, null, null); var paramValues = (from ruleParameter in ruleValidator.Params select (object) ruleParameter.GetParamValue()) .ToList(); var errorMessage = messageService.GetDefaultMessageAndFormat(messageContext, paramValues); Assert.That(errorMessage, Is.Not.Null.Or.Empty); Assert.That(errorMessage, Is.StringContaining("Last Name")); Assert.That(errorMessage, Is.StringContaining("1")); Assert.That(errorMessage, Is.StringContaining("5")); //null: Search for Actual value but it's empty b/c the value is null }
public string GetDefaultMessageAndFormat(MessageContext context, object[] parameters) { string messageTemplate = GetMessageTemplate(context); return FormatMessage(messageTemplate, context.RuleContext, parameters, context.PropertyValueFormatter); }