public void NullCheckFailedHandler_ModelStateValid_CallbackReturnsNull_DoesNothing() { // Arrange ControllerContext controllerContext = new ControllerContext { Controller = new EmptyController() }; ModelMetadata modelMetadata = GetMetadataForType(typeof(Person)); ModelValidationNode validationNode = new ModelValidationNode(modelMetadata, "foo"); ModelValidatedEventArgs e = new ModelValidatedEventArgs(controllerContext, null /* parentNode */); // Act ModelBinderErrorMessageProvider originalProvider = ModelBinderConfig.ValueRequiredErrorMessageProvider; try { ModelBinderConfig.ValueRequiredErrorMessageProvider = delegate { return(null); }; EventHandler <ModelValidatedEventArgs> handler = MutableObjectModelBinder.CreateNullCheckFailedHandler(controllerContext, modelMetadata, null /* incomingValue */); handler(validationNode, e); } finally { ModelBinderConfig.ValueRequiredErrorMessageProvider = originalProvider; } // Assert Assert.True(controllerContext.Controller.ViewData.ModelState.IsValid); }
public void NullCheckFailedHandler_ModelStateValid_AddsErrorString() { // Arrange ControllerContext controllerContext = new ControllerContext { Controller = new EmptyController() }; ModelMetadata modelMetadata = GetMetadataForType(typeof(Person)); ModelValidationNode validationNode = new ModelValidationNode(modelMetadata, "foo"); ModelValidatedEventArgs e = new ModelValidatedEventArgs( controllerContext, null /* parentNode */ ); // Act EventHandler <ModelValidatedEventArgs> handler = MutableObjectModelBinder.CreateNullCheckFailedHandler( controllerContext, modelMetadata, null /* incomingValue */ ); handler(validationNode, e); // Assert Assert.True(controllerContext.Controller.ViewData.ModelState.ContainsKey("foo")); Assert.Equal( "A value is required.", controllerContext.Controller.ViewData.ModelState["foo"].Errors[0].ErrorMessage ); }
public void NullCheckFailedHandler_ModelStateAlreadyInvalid_DoesNothing() { // Arrange ControllerContext controllerContext = new ControllerContext { Controller = new EmptyController() }; controllerContext.Controller.ViewData.ModelState.AddModelError( "foo.bar", "Some existing error." ); ModelMetadata modelMetadata = GetMetadataForType(typeof(Person)); ModelValidationNode validationNode = new ModelValidationNode(modelMetadata, "foo"); ModelValidatedEventArgs e = new ModelValidatedEventArgs( controllerContext, null /* parentNode */ ); // Act EventHandler <ModelValidatedEventArgs> handler = MutableObjectModelBinder.CreateNullCheckFailedHandler( controllerContext, modelMetadata, null /* incomingValue */ ); handler(validationNode, e); // Assert Assert.False(controllerContext.Controller.ViewData.ModelState.ContainsKey("foo")); }
public void CanUpdateProperty_ReadOnlyString_ReturnsFalse() { // Arrange ModelMetadata propertyMetadata = GetMetadataForCanUpdateProperty("ReadOnlyString"); // Act bool canUpdate = MutableObjectModelBinder.CanUpdatePropertyInternal(propertyMetadata); // Assert Assert.False(canUpdate); }
public void CanUpdateProperty_ReadOnlyReferenceTypeNotBlacklisted_ReturnsTrue() { // Arrange ModelMetadata propertyMetadata = GetMetadataForCanUpdateProperty("ReadOnlyObject"); // Act bool canUpdate = MutableObjectModelBinder.CanUpdatePropertyInternal(propertyMetadata); // Assert Assert.True(canUpdate); }
public void CanUpdateProperty_HasPublicSetter_ReturnsTrue() { // Arrange ModelMetadata propertyMetadata = GetMetadataForCanUpdateProperty("ReadWriteString"); // Act bool canUpdate = MutableObjectModelBinder.CanUpdatePropertyInternal(propertyMetadata); // Assert Assert.True(canUpdate); }
public void GetRequiredPropertiesCollection_MixedAttributes() { // Arrange Type modelType = typeof(ModelWithMixedBindingBehaviors); // Act HashSet <string> requiredProperties; HashSet <string> skipProperties; MutableObjectModelBinder.GetRequiredPropertiesCollection(modelType, out requiredProperties, out skipProperties); // Assert Assert.Equal(new[] { "Required" }, requiredProperties.ToArray()); Assert.Equal(new[] { "Never" }, skipProperties.ToArray()); }
public void GetRequiredPropertiesCollection_MixedAttributes() { // Arrange Type modelType = typeof(ModelWithMixedBindingBehaviors); // Act HashSet <string> requiredProperties; HashSet <string> skipProperties; MutableObjectModelBinder.GetRequiredPropertiesCollection(modelType, out requiredProperties, out skipProperties); // Assert CollectionAssert.AreEquivalent(requiredProperties.ToList(), new string[] { "Required" }); CollectionAssert.AreEquivalent(skipProperties.ToList(), new string[] { "Never" }); }