private static Dictionary <string, HttpPostedFileBase[]> GetHttpPostedFileDictionary(ControllerContext controllerContext) { HttpFileCollectionBase files = controllerContext.HttpContext.Request.Files; // fast-track common case of no files if (files.Count == 0) { return(_emptyDictionary); } // build up the 1:many file mapping List <KeyValuePair <string, HttpPostedFileBase> > mapping = new List <KeyValuePair <string, HttpPostedFileBase> >(); string[] allKeys = files.AllKeys; for (int i = 0; i < files.Count; i++) { string key = allKeys[i]; if (key != null) { HttpPostedFileBase file = HttpPostedFileBaseModelBinder.ChooseFileOrNull(files[i]); mapping.Add(new KeyValuePair <string, HttpPostedFileBase>(key, file)); } } // turn the mapping into a 1:many dictionary var grouped = mapping.GroupBy(el => el.Key, el => el.Value, StringComparer.OrdinalIgnoreCase); return(grouped.ToDictionary(g => g.Key, g => g.ToArray(), StringComparer.OrdinalIgnoreCase)); }
public void BindModelThrowsIfControllerContextIsNull() { // Arrange HttpPostedFileBaseModelBinder binder = new HttpPostedFileBaseModelBinder(); // Act & assert ExceptionHelper.ExpectArgumentNullException( delegate { binder.BindModel(null, null); }, "controllerContext"); }
public void BindModelThrowsIfBindingContextIsNull() { // Arrange ControllerContext controllerContext = new Mock<ControllerContext>().Object; HttpPostedFileBaseModelBinder binder = new HttpPostedFileBaseModelBinder(); // Act & assert ExceptionHelper.ExpectArgumentNullException( delegate { binder.BindModel(controllerContext, null); }, "bindingContext"); }
public void BindModelReturnsNullIfNoFileInputElementInPost() { // Arrange Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>(); 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.IsNull(result); }
public void BindModelReturnsEmptyResultIfEmptyFileInputElementInPost() { // Arrange Mock<HttpPostedFileBase> mockFile = new Mock<HttpPostedFileBase>(); mockFile.Setup(f => f.ContentLength).Returns(0); mockFile.Setup(f => f.FileName).Returns(String.Empty); Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>(); 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.IsNull(result); }
public void BindModelReturnsResultIfFileFound() { // Arrange Mock<HttpPostedFileBase> mockFile = new Mock<HttpPostedFileBase>(); mockFile.Setup(f => f.ContentLength).Returns(1234); mockFile.Setup(f => f.FileName).Returns("somefile"); Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>(); 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.IsNotNull(result); Assert.AreSame(mockFile.Object, result, "Returned file did not match mock file."); }