// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Web.Http.Metadata.Providers; using System.Web.Http.Util; using System.Web.Http.Validation; using System.Web.TestUtil; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace System.Web.Http.ModelBinding { public class ModelBindingContextTest { [Fact] public void CopyConstructor() { // Arrange ModelBindingContext originalBindingContext = new ModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(object)), ModelName = "theName", ModelState = new ModelStateDictionary(), ValueProvider = new SimpleHttpValueProvider() }; // Act ModelBindingContext newBindingContext = new ModelBindingContext(originalBindingContext); // Assert Assert.Null(newBindingContext.ModelMetadata); Assert.Equal("", newBindingContext.ModelName); Assert.Equal(originalBindingContext.ModelState, newBindingContext.ModelState); Assert.Equal(originalBindingContext.ValueProvider, newBindingContext.ValueProvider); } [Fact] public void ModelProperty() { // Arrange ModelBindingContext bindingContext = new ModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(int)) }; // Act & assert MemberHelper.TestPropertyValue(bindingContext, "Model", 42); } [Fact] public void ModelProperty_ThrowsIfModelMetadataDoesNotExist() { // Arrange ModelBindingContext bindingContext = new ModelBindingContext(); // Act & assert Assert.Throws( () => bindingContext.Model = null, "The ModelMetadata property must be set before accessing this property."); } [Fact] public void ModelNameProperty() { // Arrange ModelBindingContext bindingContext = new ModelBindingContext(); // Act & assert Assert.Reflection.StringProperty(bindingContext, bc => bc.ModelName, String.Empty); } [Fact] public void ModelStateProperty() { // Arrange ModelBindingContext bindingContext = new ModelBindingContext(); ModelStateDictionary modelState = new ModelStateDictionary(); // Act & assert MemberHelper.TestPropertyWithDefaultInstance(bindingContext, "ModelState", modelState); } [Fact] public void ModelAndModelTypeAreFedFromModelMetadata() { // Act ModelBindingContext bindingContext = new ModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(() => 42, typeof(int)) }; // Assert Assert.Equal(42, bindingContext.Model); Assert.Equal(typeof(int), bindingContext.ModelType); } [Fact] public void ValidationNodeProperty() { // Act ModelBindingContext bindingContext = new ModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(() => 42, typeof(int)) }; // Act & assert MemberHelper.TestPropertyWithDefaultInstance(bindingContext, "ValidationNode", new ModelValidationNode(bindingContext.ModelMetadata, "someName")); } [Fact] public void ValidationNodeProperty_DefaultValues() { // Act ModelBindingContext bindingContext = new ModelBindingContext { ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(() => 42, typeof(int)), ModelName = "theInt" }; // Act ModelValidationNode validationNode = bindingContext.ValidationNode; // Assert Assert.NotNull(validationNode); Assert.Equal(bindingContext.ModelMetadata, validationNode.ModelMetadata); Assert.Equal(bindingContext.ModelName, validationNode.ModelStateKey); } } }