// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using Moq; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace System.Web.Mvc.Test { public class HttpPostedFileBaseModelBinderTest { [Fact] public void BindModelReturnsEmptyResultIfEmptyFileInputElementInPost() { // Arrange Mock mockFile = new Mock(); mockFile.Setup(f => f.ContentLength).Returns(0); mockFile.Setup(f => f.FileName).Returns(String.Empty); Mock mockControllerContext = new Mock(); mockControllerContext.SetupGet(c => c.HttpContext.Request.Files["fileName"]).Returns(mockFile.Object); HttpPostedFileBaseModelBinder binder = new HttpPostedFileBaseModelBinder(); ModelBindingContext bindingContext = new ModelBindingContext() { ModelName = "fileName" }; // Act object result = binder.BindModel(mockControllerContext.Object, bindingContext); // Assert Assert.Null(result); } [Fact] public void BindModelReturnsNullIfNoFileInputElementInPost() { // Arrange Mock mockControllerContext = new Mock(); mockControllerContext.Setup(c => c.HttpContext.Request.Files["fileName"]).Returns((HttpPostedFileBase)null); HttpPostedFileBaseModelBinder binder = new HttpPostedFileBaseModelBinder(); ModelBindingContext bindingContext = new ModelBindingContext() { ModelName = "fileName" }; // Act object result = binder.BindModel(mockControllerContext.Object, bindingContext); // Assert Assert.Null(result); } [Fact] public void BindModelReturnsResultIfFileFound() { // Arrange Mock mockFile = new Mock(); mockFile.Setup(f => f.ContentLength).Returns(1234); mockFile.Setup(f => f.FileName).Returns("somefile"); Mock mockControllerContext = new Mock(); mockControllerContext.SetupGet(c => c.HttpContext.Request.Files["fileName"]).Returns(mockFile.Object); HttpPostedFileBaseModelBinder binder = new HttpPostedFileBaseModelBinder(); ModelBindingContext bindingContext = new ModelBindingContext() { ModelName = "fileName" }; // Act object result = binder.BindModel(mockControllerContext.Object, bindingContext); // Assert Assert.NotNull(result); Assert.Same(mockFile.Object, result); } [Fact] public void BindModelThrowsIfBindingContextIsNull() { // Arrange ControllerContext controllerContext = new Mock().Object; HttpPostedFileBaseModelBinder binder = new HttpPostedFileBaseModelBinder(); // Act & assert Assert.ThrowsArgumentNull( delegate { binder.BindModel(controllerContext, null); }, "bindingContext"); } [Fact] public void BindModelThrowsIfControllerContextIsNull() { // Arrange HttpPostedFileBaseModelBinder binder = new HttpPostedFileBaseModelBinder(); // Act & assert Assert.ThrowsArgumentNull( delegate { binder.BindModel(null, null); }, "controllerContext"); } } }