public void CanBindToExpiry() { // Arrange var formCollection = new NameValueCollection { { "foo.CardNo", "9999999999999999" }, { "foo.Code", "999" }, { "Expiry.Value.Month", "7" }, { "Expiry.Value.Year", "2014" } }; // not sure why it doesn't work with foo prefix on Expiry? var valueProvider = new NameValueCollectionValueProvider(formCollection, null); var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(Card)); var bindingContext = new ModelBindingContext { ModelName = "foo", ValueProvider = valueProvider, ModelMetadata = modelMetadata }; ControllerContext controllerContext = new ControllerContext(); CardModelBinder b = new CardModelBinder(); // Act Card result = (Card)b.BindModel(controllerContext, bindingContext); // Assert Assert.AreEqual(7, result.Expiry.Value.Month, "Incorrect value for Month"); Assert.AreEqual(2014, result.Expiry.Value.Year, "Incorrect value for Year"); }
public void CanBindToExpiry() { // Arrange var formCollection = new NameValueCollection { { "foo.CardNo", "123456789" }, { "foo.Code", "123" } }; var valueProvider = new NameValueCollectionValueProvider(formCollection, null); var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(Card)); var bindingContext = new ModelBindingContext { ModelName = "foo", ValueProvider = valueProvider, ModelMetadata = modelMetadata }; var mockHttpContext = new Mock<HttpContextBase>(); mockHttpContext .SetupGet(c => c.Request["Expiry.Value.Month"]) .Returns(() => "7"); mockHttpContext .SetupGet(c => c.Request["Expiry.Value.Year"]) .Returns(() => "2014"); ControllerContext controllerContext = new ControllerContext() { HttpContext = mockHttpContext.Object }; CardModelBinder b = new CardModelBinder(); // Act Card result = (Card)b.BindModel(controllerContext, bindingContext); // Assert Assert.AreEqual("123456789", result.CardNo, "Incorrect value for CardNo"); Assert.AreEqual("123", result.Code, "Incorrect value for Code"); Assert.AreEqual(7, result.Expiry.Value.Month, "Incorrect value for Month"); Assert.AreEqual(2014, result.Expiry.Value.Year, "Incorrect value for Year"); }
public void CanBindToCard() { // Arrange: // Set up the BindingContext // 1. Set up a NameValueCollection that represents the FormData (all string values) var formCollection = new NameValueCollection { { "myCard.CardNo", "12345678" }, { "myCard.Code", "719" }, { "myCard.Expiry", "01/09/2012" } }; // 2. Set up a valueProvider, containing the formData. var valueProvider = new NameValueCollectionValueProvider(formCollection, null); // 3. Set up the meta data for the type Card var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(Card)); // 4. Create the bindingContext for the model var bindingContext = new ModelBindingContext { ModelName = "myCard", ValueProvider = valueProvider, ModelMetadata = modelMetadata }; // Set up the ControllerContext // 1. We must mock the HttpContext, using 'Moq' NuGet package var mockHttpContext = new Mock<HttpContextBase>(); // 2. Set up the value to be returned by the mockHttpContext mockHttpContext .Setup(c => c.Request["Expiry.Value.Month"]) .Returns(() => "7"); mockHttpContext .Setup(c => c.Request["Expiry.Value.Year"]) .Returns(() => "2014"); // 3. Create the controllerContext, using the mockHttpContext.Object ControllerContext controllerContext = new ControllerContext() { HttpContext = mockHttpContext.Object }; // Create an instance of the CardModelBinder var binder = new CardModelBinder(); // Act: Card result = (Card)binder.BindModel(controllerContext, bindingContext); // Assert: Assert.AreEqual(result.CardNo, "12345678", "Expected the CardNo: '12345678'"); Assert.AreEqual(result.Code, "719", "Expected the Code: '719'"); Assert.AreEqual(result.Expiry, DateTime.Parse("01/07/2014"), "Expected Expiry date: '01/07/2014', the mocked value."); }