public void CustomerPictureModelBinder_Returns_CustomerPicture_With_Photo()
        {
            //Arrange
            int customerId = 15;
            string photoAsString = Convert.ToBase64String(new byte[] { 0x10, 0x10, 0x01 });

            //Create a mock of the posted file.
            SHttpPostedFileBase customerPhoto = new SHttpPostedFileBase();
            customerPhoto.InputStreamGet = () => new MemoryStream(Convert.FromBase64String(photoAsString));
            customerPhoto.ContentLengthGet = () => photoAsString.Length;


            //Create the binder
            IValueProvider provider = new SIValueProvider()
            {
                //Mock the contains prefix string to return true only for the Photo and the CustomerId
                ContainsPrefixString = x => x.StartsWith("CustomerPicture.Photo") || x.StartsWith("CustomerPicture.CustomerId") || x.Equals("CustomerPicture"),
                //Mock the values returned for Photo and CustomerId.
                GetValueString = x =>
                {
                    switch (x)
                    {
                        case "CustomerPicture.Photo":
                            return new ValueProviderResult(customerPhoto, photoAsString, null);
                        case "CustomerPicture.CustomerId":
                            return new ValueProviderResult(15, "15", null);
                        default:
                            return null;
                    }
                }
            };

            
            ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(CustomerPicture));
            
            CustomerPictureModelBinder binder = new CustomerPictureModelBinder();
            
            ControllerContext context = new ControllerContext();
            
            ModelBindingContext bindingContext = new ModelBindingContext()
            {
                ModelName = "CustomerPicture",
                ValueProvider = provider,
                ModelMetadata = metadata
            };

            //Act
            CustomerPicture result = binder.BindModel(context, bindingContext) as CustomerPicture;


            //Assert
            Assert.AreEqual(customerId, result.CustomerId);
            Assert.IsNull(result.Customer);
        }
        public void CustomerPictureModelBinder_Returns_CustomerPicture_Without_Photo_When_There_Isnt_Photo()
        {
            //Arrange
            int customerId = 15;
            IValueProvider provider = new SIValueProvider()
            {
                
                ContainsPrefixString = x => x.StartsWith("CustomerPicture.CustomerId") || x.Equals("CustomerPicture"),
                GetValueString = x =>
                {
                    switch (x)
                    {
                        case "CustomerPicture.CustomerId":
                            return new ValueProviderResult(15, "15", null);
                        default:
                            return null;
                    }
                }
            };
            
            ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(CustomerPicture));
            
            CustomerPictureModelBinder binder = new CustomerPictureModelBinder();
            
            ControllerContext context = new ControllerContext();
            
            ModelBindingContext bindingContext = new ModelBindingContext()
            {
                ModelName = "CustomerPicture",
                ValueProvider = provider,
                ModelMetadata = metadata
            };

            //Act
            CustomerPicture result = binder.BindModel(context, bindingContext) as CustomerPicture;

            //Assert
            Assert.AreEqual(customerId, result.CustomerId);
            Assert.IsNull(result.Customer);
            Assert.IsNull(result.Photo);
        }