// Adds errors for various parts of the model, including the root. private void AddMultipleErrors(ModelStateDictionary modelState) { modelState.AddModelError("Property3.Property2", "This is an error for Property3.Property2."); modelState.AddModelError("Property3.OrderedProperty3", "This is an error for Property3.OrderedProperty3."); modelState.AddModelError("Property3.OrderedProperty2", "This is an error for Property3.OrderedProperty2."); var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(ValidationModel), nameof(ValidationModel.Property3)); modelState.AddModelError("Property3", "This is an error for Property3."); modelState.AddModelError("Property3", new InvalidCastException("Exception will be ignored."), metadata); metadata = provider.GetMetadataForProperty(typeof(ValidationModel), nameof(ValidationModel.Property2)); modelState.AddModelError("Property2", "This is an error for Property2."); modelState.AddModelError("Property2", "This is another error for Property2."); modelState.AddModelError("Property2", new OverflowException("Produces invalid value message"), metadata); metadata = provider.GetMetadataForType(typeof(ValidationModel)); modelState.AddModelError(string.Empty, "This is an error for the model root."); modelState.AddModelError(string.Empty, "This is another error for the model root."); modelState.AddModelError(string.Empty, new InvalidOperationException("Another ignored Exception."), metadata); }
public void GetErrorMessage_Required() { IModelMetadataProvider provider = new EmptyModelMetadataProvider(); RequiredAdapter adapter = new RequiredAdapter(new RequiredAttribute()); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AllTypesView), "StringField"); ModelValidationContextBase context = new ModelValidationContextBase(new ActionContext(), metadata, provider); String expected = String.Format(Validations.Required, context.ModelMetadata.PropertyName); String actual = adapter.GetErrorMessage(context); Assert.Equal(Validations.Required, adapter.Attribute.ErrorMessage); Assert.Equal(expected, actual); }
public void GetErrorMessage_MinLength() { IModelMetadataProvider provider = new EmptyModelMetadataProvider(); MinLengthAdapter adapter = new MinLengthAdapter(new MinLengthAttribute(128)); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AllTypesView), "StringField"); ModelValidationContextBase context = new ModelValidationContextBase(new ActionContext(), metadata, provider); String expected = Validation.For("MinLength", context.ModelMetadata.PropertyName, 128); String actual = adapter.GetErrorMessage(context); Assert.Equal(Validation.For("MinLength"), adapter.Attribute.ErrorMessage); Assert.Equal(expected, actual); }
public void GetErrorMessage_MinLength() { IModelMetadataProvider provider = new EmptyModelMetadataProvider(); MinLengthAdapter adapter = new MinLengthAdapter(new MinLengthAttribute(128)); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "MinLength"); ModelValidationContextBase context = new ModelValidationContextBase(new ActionContext(), metadata, provider); String expected = String.Format(Validations.MinLength, "MinLength", 128); String actual = adapter.GetErrorMessage(context); Assert.Equal(Validations.MinLength, adapter.Attribute.ErrorMessage); Assert.Equal(expected, actual); }
public void GetClientValidationRules_ReturnsEmailValidationRule() { IServiceProvider services = Substitute.For <IServiceProvider>(); IModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "EmailAddress"); ClientModelValidationContext context = new ClientModelValidationContext(metadata, provider, services); ModelClientValidationRule actual = adapter.GetClientValidationRules(context).Single(); String expectedMessage = attribute.FormatErrorMessage(metadata.GetDisplayName()); Assert.Equal(expectedMessage, actual.ErrorMessage); Assert.Equal("email", actual.ValidationType); Assert.Empty(actual.ValidationParameters); }
private static ClientModelValidationContext GetValidationContextWithArea(string currentArea) { var serviceCollection = GetServiceCollection(); var serviceProvider = serviceCollection.BuildServiceProvider(); var routeCollection = GetRouteCollectionWithArea(serviceProvider); var routeData = new RouteData { Routers = { routeCollection, }, Values = { { "action", "Index" }, { "controller", "Home" }, }, }; if (!string.IsNullOrEmpty(currentArea)) { routeData.Values["area"] = currentArea; } var actionContext = GetActionContext(serviceProvider, routeData); var urlHelper = new UrlHelper(actionContext); var factory = new Mock <IUrlHelperFactory>(MockBehavior.Strict); factory .Setup(f => f.GetUrlHelper(actionContext)) .Returns(urlHelper); // Make an IUrlHelperFactory available through the ActionContext. serviceCollection.AddSingleton <IUrlHelperFactory>(factory.Object); serviceProvider = serviceCollection.BuildServiceProvider(); actionContext.HttpContext.RequestServices = serviceProvider; var metadataProvider = new EmptyModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForProperty( containerType: typeof(string), propertyName: nameof(string.Length)); return(new ClientModelValidationContext( actionContext, metadata, metadataProvider, new AttributeDictionary())); }
public MvcTreeTagHelperTests() { MvcTree tree = new MvcTree(); tree.SelectedIds.Add(123456); tree.Nodes.Add(new MvcTreeNode("Test")); tree.Nodes[0].Children.Add(new MvcTreeNode(4567, "Test2")); tree.Nodes[0].Children.Add(new MvcTreeNode(123456, "Test1")); EmptyModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelExplorer explorer = new ModelExplorer(provider, provider.GetMetadataForProperty(typeof(MvcTreeView), "MvcTree"), tree); helper = new MvcTreeTagHelper(); helper.For = new ModelExpression("MvcTree", explorer); output = new TagHelperOutput("div", new TagHelperAttributeList(), (_, __) => Task.FromResult <TagHelperContent?>(null)); }
public void GetClientValidationRules_ReturnsGreaterValidationRule() { IServiceProvider services = Substitute.For <IServiceProvider>(); IModelMetadataProvider provider = new EmptyModelMetadataProvider(); GreaterThanAdapter adapter = new GreaterThanAdapter(new GreaterThanAttribute(128)); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "GreaterThan"); ClientModelValidationContext context = new ClientModelValidationContext(metadata, provider, services); String expectedMessage = new GreaterThanAttribute(128).FormatErrorMessage("GreaterThan"); ModelClientValidationRule actual = adapter.GetClientValidationRules(context).Single(); Assert.Equal(128M, actual.ValidationParameters["min"]); Assert.Equal(expectedMessage, actual.ErrorMessage); Assert.Equal("greater", actual.ValidationType); Assert.Single(actual.ValidationParameters); }
public void GetClientValidationRules_ReturnsEqualToValidationRule() { IServiceProvider services = Substitute.For <IServiceProvider>(); IModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "EqualTo"); EqualToAdapter adapter = new EqualToAdapter(new EqualToAttribute("StringLength")); ClientModelValidationContext context = new ClientModelValidationContext(metadata, provider, services); String expectedMessage = new EqualToAttribute("StringLength").FormatErrorMessage("EqualTo"); ModelClientValidationRule actual = adapter.GetClientValidationRules(context).Single(); Assert.Equal("*.StringLength", actual.ValidationParameters["other"]); Assert.Equal(expectedMessage, actual.ErrorMessage); Assert.Equal("equalto", actual.ValidationType); Assert.Single(actual.ValidationParameters); }
public JsTreeTagHelperTests() { JsTree tree = new JsTree(); tree.SelectedIds.Add(4567); tree.SelectedIds.Add(12345); tree.Nodes.Add(new JsTreeNode("Test")); tree.Nodes[0].Nodes.Add(new JsTreeNode(12345, "Test1")); tree.Nodes[0].Nodes.Add(new JsTreeNode(23456, "Test2")); EmptyModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelExplorer explorer = new ModelExplorer(provider, provider.GetMetadataForProperty(typeof(JsTreeView), "JsTree"), tree); helper = new JsTreeTagHelper(); helper.For = new ModelExpression("JsTree", explorer); output = new TagHelperOutput("div", new TagHelperAttributeList(), (useCachedResult, encoder) => null); }
public JsTreeTagHelperTests() { JsTreeView tree = new JsTreeView(); tree.JsTree.SelectedIds.Add("4567"); tree.JsTree.SelectedIds.Add("12345"); tree.JsTree.Nodes.Add(new JsTreeNode("Test")); tree.JsTree.Nodes[0].Nodes.Add(new JsTreeNode("12345", "Test1")); tree.JsTree.Nodes[0].Nodes.Add(new JsTreeNode("23456", "Test2")); EmptyModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelExplorer explorer = new ModelExplorer(provider, provider.GetMetadataForProperty(tree.GetType(), "JsTree"), tree); output = new TagHelperOutput("div", new TagHelperAttributeList(), _ => null); helper = new JsTreeTagHelper(HtmlHelperFactory.CreateHtmlHelper(tree)); helper.For = new ModelExpression("JsTree", explorer); helper.ViewContext = helper.Html.ViewContext; }
public void GetClientValidationRules_SetsOtherPropertyDisplayName() { IServiceProvider services = Substitute.For <IServiceProvider>(); IModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "EqualTo"); EqualToAttribute attribute = new EqualToAttribute("EqualTo"); attribute.OtherPropertyDisplayName = null; ClientModelValidationContext context = new ClientModelValidationContext(metadata, provider, services); new EqualToAdapter(attribute).GetClientValidationRules(context); String expected = ResourceProvider.GetPropertyTitle(typeof(AdaptersModel), "EqualTo"); String actual = attribute.OtherPropertyDisplayName; Assert.Equal(expected, actual); }
public void SimpleDisplayTextReturnsFirstPropertyNullDisplayTextForNonNullModelWithNullDisplayColumnPropertyValue() { // Arrange SimpleDisplayTextModelWithoutToString model = new SimpleDisplayTextModelWithoutToString(); EmptyModelMetadataProvider propertyProvider = new EmptyModelMetadataProvider(); ModelMetadata propertyMetadata = propertyProvider.GetMetadataForProperty(() => model.FirstProperty, typeof(SimpleDisplayTextModelWithoutToString), "FirstProperty"); propertyMetadata.NullDisplayText = "Null Display Text"; Mock <ModelMetadataProvider> provider = new Mock <ModelMetadataProvider>(); provider.Setup(p => p.GetMetadataForProperties(model, typeof(SimpleDisplayTextModelWithoutToString))) .Returns(new[] { propertyMetadata }); ModelMetadata metadata = new ModelMetadata(provider.Object, null, () => model, typeof(SimpleDisplayTextModelWithoutToString), null); // Act string result = metadata.SimpleDisplayText; // Assert Assert.Equal(propertyMetadata.NullDisplayText, result); }
private static InputTagHelper GetTagHelper( IHtmlGenerator htmlGenerator, object container, Type containerType, Func <object> modelAccessor, string propertyName, string expressionName) { var metadataProvider = new EmptyModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForProperty(modelAccessor, containerType, propertyName); var modelExpression = new ModelExpression(expressionName, metadata); var viewContext = TestableHtmlGenerator.GetViewContext(container, htmlGenerator, metadataProvider); var inputTagHelper = new InputTagHelper { For = modelExpression, Generator = htmlGenerator, ViewContext = viewContext, }; return(inputTagHelper); }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var input = Model.ModelExplorer.GetExplorerForProperty("SearchTerm"); IModelMetadataProvider metadataProvider = new EmptyModelMetadataProvider(); ModelMetadata metadata = metadataProvider.GetMetadataForProperty(Model.ModelExplorer.Model.GetType(), Prop); ModelExplorer container = input; ModelExplorer modelExplorer = new ModelExplorer(metadataProvider, input, metadata, null); ModelExpression nm = new ModelExpression("SearchTerm", modelExplorer); TagHelperAttribute aspFor = new TagHelperAttribute("asp-for", nm, HtmlAttributeValueStyle.DoubleQuotes); TagHelperAttributeList attrs = new TagHelperAttributeList(); attrs.Add(aspFor); TagHelperContext newContext = new TagHelperContext(context.TagName, attrs, context.Items, context.UniqueId); TagHelperOutput newOutput = new TagHelperOutput("input", output.Attributes, output.GetChildContentAsync); await base.ProcessAsync(newContext, newOutput); var test = output; }
public void Constructor_SerializesErrorsFromModelStateDictionary_AddsDefaultMessage() { // Arrange var modelStateDictionary = new ModelStateDictionary(); var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); modelStateDictionary.AddModelError("unsafeError", new Exception("This message should not be returned to clients"), metadata); // Act var problemDescription = new ValidationProblemDetails(modelStateDictionary); // Assert Assert.Equal("One or more validation errors occurred.", problemDescription.Title); Assert.Collection( problemDescription.Errors, item => { Assert.Equal("unsafeError", item.Key); Assert.Equal(new[] { "The input was not valid." }, item.Value); }); }
// Adds one or more errors for all properties in OrderedModel. But adds errors out of order. private void AddOrderedErrors(ModelStateDictionary modelState) { var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(OrderedModel), nameof(OrderedModel.Property3)); modelState.AddModelError("Property3", "This is an error for Property3."); modelState.AddModelError("Property3", new InvalidCastException("An ignored Exception."), metadata); modelState.AddModelError("Property2", "This is an error for Property2."); modelState.AddModelError("Property2", "This is another error for Property2."); modelState.AddModelError("OrderedProperty3", "This is an error for OrderedProperty3."); modelState.AddModelError("OrderedProperty2", "This is an error for OrderedProperty2."); modelState.AddModelError("OrderedProperty2", "This is another error for OrderedProperty2."); modelState.AddModelError("LastProperty", "This is an error for LastProperty."); modelState.AddModelError("Property1", "This is an error for Property1."); modelState.AddModelError("Property1", "This is another error for Property1."); modelState.AddModelError("OrderedProperty1", "This is an error for OrderedProperty1."); modelState.AddModelError("OrderedProperty2", "This is yet-another error for OrderedProperty2."); }
public void SimpleDisplayTextReturnsFirstPropertyNullDisplayTextForNonNullModelWithNullDisplayColumnPropertyValue() { // Arrange SimpleDisplayTextModelWithoutToString model = new SimpleDisplayTextModelWithoutToString(); EmptyModelMetadataProvider propertyProvider = new EmptyModelMetadataProvider(); ModelMetadata propertyMetadata = propertyProvider.GetMetadataForProperty(() => model.FirstProperty, typeof(SimpleDisplayTextModelWithoutToString), "FirstProperty"); propertyMetadata.NullDisplayText = "Null Display Text"; Mock<ModelMetadataProvider> provider = new Mock<ModelMetadataProvider>(); provider.Setup(p => p.GetMetadataForProperties(model, typeof(SimpleDisplayTextModelWithoutToString))) .Returns(new[] { propertyMetadata }); ModelMetadata metadata = new ModelMetadata(provider.Object, null, () => model, typeof(SimpleDisplayTextModelWithoutToString), null); // Act string result = metadata.SimpleDisplayText; // Assert Assert.Equal(propertyMetadata.NullDisplayText, result); }