public void AddModelError_WithErrorString_AddsTooManyModelErrors_WhenMaxErrorsIsReached() { // Arrange var expected = "The maximum number of allowed model errors has been reached."; var dictionary = new ModelStateDictionary { MaxAllowedErrors = 5 }; var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); dictionary.AddModelError("key1", "error1"); dictionary.AddModelError("key2", new Exception(), metadata); dictionary.AddModelError("key3", new Exception(), metadata); dictionary.AddModelError("key4", "error4"); dictionary.AddModelError("key5", "error5"); // Act and Assert Assert.True(dictionary.HasReachedMaxErrors); Assert.Equal(5, dictionary.ErrorCount); var error = Assert.Single(dictionary[string.Empty].Errors); Assert.IsType<TooManyModelErrorsException>(error.Exception); Assert.Equal(expected, error.Exception.Message); // TooManyModelErrorsException added instead of key5 error. Assert.DoesNotContain("key5", dictionary.Keys); }
public StringLengthAdapterTests() { adapter = new StringLengthAdapter(new StringLengthAttribute(128)); IModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "StringLength"); context = new ModelValidationContextBase(new ActionContext(), metadata, provider); }
public FileSizeAdapterTests() { attributes = new Dictionary<String, String>(); adapter = new FileSizeAdapter(new FileSizeAttribute(12.25)); IModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "FileSize"); context = new ClientModelValidationContext(new ActionContext(), metadata, provider, attributes); }
public void GetBinder_ForNotStringReturnsNull() { IModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelBinderProviderContext context = Substitute.For<ModelBinderProviderContext>(); context.Metadata.Returns(provider.GetMetadataForProperty(typeof(ProviderModel), "Date")); Assert.Null(new TrimmingModelBinderProvider().GetBinder(context)); }
public EqualToAdapterTests() { attributes = new Dictionary<String, String>(); adapter = new EqualToAdapter(new EqualToAttribute("StringLength")); IModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "EqualTo"); context = new ClientModelValidationContext(new ActionContext(), metadata, provider, attributes); }
public void GetErrorMessage_Range() { IModelMetadataProvider provider = new EmptyModelMetadataProvider(); RangeAdapter adapter = new RangeAdapter(new RangeAttribute(4, 128)); ModelMetadata metadata = provider.GetMetadataForProperty(typeof(AdaptersModel), "Range"); ModelValidationContextBase context = new ModelValidationContextBase(new ActionContext(), metadata, provider); String expected = String.Format(Validations.Range, "Range", 4, 128); String actual = adapter.GetErrorMessage(context); Assert.Equal(Validations.Range, adapter.Attribute.ErrorMessage); Assert.Equal(expected, actual); }
public void ModelStateDictionary_ReturnGenericErrorMessage_WhenModelStateNotSet() { // Arrange var expected = "The supplied value is invalid for Length."; var dictionary = new ModelStateDictionary(); var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act dictionary.TryAddModelError("key", new FormatException(), metadata); // Assert var error = Assert.Single(dictionary["key"].Errors); Assert.Equal(expected, error.ErrorMessage); }
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 void ModelStateDictionary_NoErrorMessage_ForNonFormatException() { // Arrange var dictionary = new ModelStateDictionary(); dictionary.SetModelValue("key", new string[] { "some value" }, "some value"); var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act dictionary.TryAddModelError("key", new InvalidOperationException(), metadata); // Assert var error = Assert.Single(dictionary["key"].Errors); Assert.Empty(error.ErrorMessage); }
public void ModelStateDictionary_ReturnSpecificErrorMessage_WhenModelStateSet() { // Arrange var expected = "The value 'some value' is not valid for Length."; var dictionary = new ModelStateDictionary(); dictionary.SetModelValue("key", new string[] { "some value" }, "some value"); var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act dictionary.TryAddModelError("key", new FormatException(), metadata); // Assert var error = Assert.Single(dictionary["key"].Errors); Assert.Equal(expected, error.ErrorMessage); }
public void TryAddModelError_WithErrorString_ReturnsFalse_AndAddsMaxModelErrorMessage() { // Arrange var expected = "The maximum number of allowed model errors has been reached."; var dictionary = new ModelStateDictionary { MaxAllowedErrors = 3 }; var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act and Assert Assert.False(dictionary.HasReachedMaxErrors); var result = dictionary.TryAddModelError("key1", "error1"); Assert.True(result); Assert.False(dictionary.HasReachedMaxErrors); result = dictionary.TryAddModelError("key2", new Exception(), metadata); Assert.True(result); Assert.False(dictionary.HasReachedMaxErrors); // Still room for TooManyModelErrorsException. result = dictionary.TryAddModelError("key3", "error3"); Assert.False(result); Assert.True(dictionary.HasReachedMaxErrors); result = dictionary.TryAddModelError("key4", "error4"); // no-op Assert.False(result); Assert.True(dictionary.HasReachedMaxErrors); Assert.Equal(3, dictionary.ErrorCount); Assert.Equal(3, dictionary.Count); var error = Assert.Single(dictionary[string.Empty].Errors); Assert.IsType <TooManyModelErrorsException>(error.Exception); Assert.Equal(expected, error.Exception.Message); // TooManyModelErrorsException added instead of key3 error. Assert.DoesNotContain("key3", dictionary.Keys); // Last addition did nothing. Assert.DoesNotContain("key4", dictionary.Keys); }
public void AddModelErrorUsesExistingModelStateIfPresent() { // Arrange var dictionary = new ModelStateDictionary(); dictionary.AddModelError("some key", "some error"); var exception = new Exception(); var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act dictionary.AddModelError("some key", exception, metadata); // Assert Assert.Equal(2, dictionary.ErrorCount); var kvp = Assert.Single(dictionary); Assert.Equal("some key", kvp.Key); Assert.Equal(2, kvp.Value.Errors.Count); Assert.Equal("some error", kvp.Value.Errors[0].ErrorMessage); Assert.Same(exception, kvp.Value.Errors[1].Exception); }
public void ModelStateConstructorWithoutDetail_AddsCorrectDictionaryItems() { // Arrange ModelStateDictionary modelState = new ModelStateDictionary(); var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); modelState.AddModelError("[0].Name", "error1"); modelState.AddModelError("[0].Name", "error2"); modelState.AddModelError("[0].Address", "error"); modelState.AddModelError("[2].Name", new Exception("OH NO"), metadata); // Act HttpError error = new HttpError(modelState, false); // Assert HttpError modelStateError = error["ModelState"] as HttpError; Assert.Contains(new KeyValuePair<string, object>("Message", "The request is invalid."), error); Assert.Contains("error1", modelStateError["[0].Name"] as IEnumerable<string>); Assert.Contains("error2", modelStateError["[0].Name"] as IEnumerable<string>); Assert.Contains("error", modelStateError["[0].Address"] as IEnumerable<string>); Assert.True(modelStateError.ContainsKey("[2].Name")); Assert.DoesNotContain("OH NO", modelStateError["[2].Name"] as IEnumerable<string>); }
public void ModelStateDictionary_TracksAddedErrorsOverCopyConstructor() { // Arrange var expected = "The maximum number of allowed model errors has been reached."; var dictionary = new ModelStateDictionary { MaxAllowedErrors = 3 }; var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act dictionary.AddModelError("key1", "error1"); dictionary.TryAddModelError("key3", new Exception(), metadata); var copy = new ModelStateDictionary(dictionary); copy.AddModelError("key2", "error2"); // Assert Assert.Equal(3, copy.Count); var error = Assert.Single(copy[string.Empty].Errors); Assert.IsType<TooManyModelErrorsException>(error.Exception); Assert.Equal(expected, error.Exception.Message); }
public void TryAddModelError_WithErrorString_ReturnsFalse_AndAddsMaxModelErrorMessage() { // Arrange var expected = "The maximum number of allowed model errors has been reached."; var dictionary = new ModelStateDictionary { MaxAllowedErrors = 3 }; var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act and Assert Assert.False(dictionary.HasReachedMaxErrors); var result = dictionary.TryAddModelError("key1", "error1"); Assert.True(result); Assert.False(dictionary.HasReachedMaxErrors); result = dictionary.TryAddModelError("key2", new Exception(), metadata); Assert.True(result); Assert.False(dictionary.HasReachedMaxErrors); // Still room for TooManyModelErrorsException. result = dictionary.TryAddModelError("key3", "error3"); Assert.False(result); Assert.True(dictionary.HasReachedMaxErrors); result = dictionary.TryAddModelError("key4", "error4"); // no-op Assert.False(result); Assert.True(dictionary.HasReachedMaxErrors); Assert.Equal(3, dictionary.ErrorCount); Assert.Equal(3, dictionary.Count); var error = Assert.Single(dictionary[string.Empty].Errors); Assert.IsType<TooManyModelErrorsException>(error.Exception); Assert.Equal(expected, error.Exception.Message); // TooManyModelErrorsException added instead of key3 error. Assert.DoesNotContain("key3", dictionary.Keys); // Last addition did nothing. Assert.DoesNotContain("key4", dictionary.Keys); }
public void TryAddModelError_WithException_ReturnsFalse_AndAddsMaxModelErrorMessage() { // Arrange var expected = "The maximum number of allowed model errors has been reached."; var dictionary = new ModelStateDictionary { MaxAllowedErrors = 3 }; var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act and Assert var result = dictionary.TryAddModelError("key1", "error1"); Assert.True(result); result = dictionary.TryAddModelError("key2", new Exception(), metadata); Assert.True(result); result = dictionary.TryAddModelError("key3", new Exception(), metadata); Assert.False(result); Assert.Equal(3, dictionary.Count); var error = Assert.Single(dictionary[string.Empty].Errors); Assert.IsType<TooManyModelErrorsException>(error.Exception); Assert.Equal(expected, error.Exception.Message); }
public void AddModelError_WithException_AddsTooManyModelError_WhenMaxErrorIsReached() { // Arrange var expected = "The maximum number of allowed model errors has been reached."; var dictionary = new ModelStateDictionary { MaxAllowedErrors = 4 }; var provider = new EmptyModelMetadataProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); dictionary.AddModelError("key1", new Exception(), metadata); dictionary.AddModelError("key2", "error2"); dictionary.AddModelError("key3", "error3"); dictionary.AddModelError("key3", new Exception(), metadata); // Act and Assert Assert.True(dictionary.HasReachedMaxErrors); Assert.Equal(4, dictionary.ErrorCount); Assert.Equal(4, dictionary.Count); var error = Assert.Single(dictionary[string.Empty].Errors); Assert.IsType<TooManyModelErrorsException>(error.Exception); Assert.Equal(expected, error.Exception.Message); // Second key3 model error resulted in TooManyModelErrorsException instead. error = Assert.Single(dictionary["key3"].Errors); Assert.Null(error.Exception); Assert.Equal("error3", error.ErrorMessage); }