public void UpdateModelThrowsIfModelStateInvalid() {
            // Arrange
            MyModel myModel = new MyModelSubclassed();

            Controller controller = new EmptyController();
            controller.ModelState.AddModelError("key", "some exception message");

            // Act & assert
            ExceptionHelper.ExpectInvalidOperationException(
                delegate {
                    controller.UpdateModel(myModel, new SimpleValueProvider());
                },
                "The model of type 'System.Web.Mvc.Test.ControllerTest+MyModel' could not be updated.");
        }
        public void UpdateModelWithoutBindPropertiesImpliesAllPropertiesAreUpdateable() {
            // Arrange
            MyModel myModel = new MyModelSubclassed();
            Controller controller = new EmptyController();

            // Act
            controller.UpdateModel(myModel, "somePrefix", new SimpleValueProvider());

            // Assert
            Assert.IsTrue(myModel.BindingContext.PropertyFilter("prop1"), "Incorrect filter applied.");
            Assert.IsTrue(myModel.BindingContext.PropertyFilter("prop2"), "Incorrect filter applied.");
            Assert.IsTrue(myModel.BindingContext.PropertyFilter("prop3"), "Incorrect filter applied.");
        }
        public void UpdateModelReturnsIfModelStateValid() {
            // Arrange
            MyModel myModel = new MyModelSubclassed();
            Controller controller = new EmptyController();

            // Act
            controller.UpdateModel(myModel, new SimpleValueProvider());

            // Assert
            // nothing to do - if we got here, the test passed
        }
        public void UpdateModelSuppliesControllerValueProviderIfNoValueProviderSpecified() {
            // Arrange
            MyModel myModel = new MyModelSubclassed();
            IValueProvider valueProvider = new SimpleValueProvider();

            Controller controller = new EmptyController() { ValueProvider = valueProvider };

            // Act
            controller.UpdateModel(myModel, "somePrefix", new[] { "prop1", "prop2" });

            // Assert
            Assert.AreEqual(valueProvider, myModel.BindingContext.ValueProvider);
        }
        public void TryUpdateModelSuppliesEmptyModelNameIfNoPrefixSpecified() {
            // Arrange
            MyModel myModel = new MyModelSubclassed();
            Controller controller = new EmptyController();

            // Act
            bool returned = controller.TryUpdateModel(myModel, new[] { "prop1", "prop2" }, new SimpleValueProvider());

            // Assert
            Assert.IsTrue(returned);
            Assert.AreEqual(String.Empty, myModel.BindingContext.ModelName);
        }
        public void TryUpdateModelReturnsFalseIfModelStateInvalid() {
            // Arrange
            MyModel myModel = new MyModelSubclassed();

            Controller controller = new EmptyController();
            controller.ModelState.AddModelError("key", "some exception message");

            // Act
            bool returned = controller.TryUpdateModel(myModel, new SimpleValueProvider());

            // Assert
            Assert.IsFalse(returned);
        }
        public void TryUpdateModelCallsModelBinderForModel() {
            // Arrange
            MyModel myModel = new MyModelSubclassed();
            IValueProvider valueProvider = new SimpleValueProvider();

            Controller controller = new EmptyController();
            controller.ControllerContext = GetControllerContext("someAction");

            // Act
            bool returned = controller.TryUpdateModel(myModel, "somePrefix", new[] { "prop1", "prop2" }, null, valueProvider);

            // Assert
            Assert.IsTrue(returned);
            Assert.AreEqual(valueProvider, myModel.BindingContext.ValueProvider);
            Assert.AreEqual("somePrefix", myModel.BindingContext.ModelName);
            Assert.AreEqual(controller.ModelState, myModel.BindingContext.ModelState);
            Assert.AreEqual(typeof(MyModel), myModel.BindingContext.ModelType);
            Assert.IsTrue(myModel.BindingContext.PropertyFilter("prop1"), "Incorrect filter applied.");
            Assert.IsTrue(myModel.BindingContext.PropertyFilter("prop2"), "Incorrect filter applied.");
            Assert.IsFalse(myModel.BindingContext.PropertyFilter("prop3"), "Incorrect filter applied.");
        }
        public void TryUpdateModelWithoutBindPropertiesImpliesAllPropertiesAreUpdateable()
        {
            // Arrange
            MyModel myModel = new MyModelSubclassed();
            Controller controller = new EmptyController();

            // Act
            bool returned = controller.TryUpdateModel(myModel, "somePrefix", new SimpleValueProvider());

            // Assert
            Assert.True(returned);
            Assert.True(myModel.BindingContext.PropertyFilter("prop1"));
            Assert.True(myModel.BindingContext.PropertyFilter("prop2"));
            Assert.True(myModel.BindingContext.PropertyFilter("prop3"));
        }
        public void TryUpdateModelSuppliesControllerValueProviderIfNoValueProviderSpecified()
        {
            // Arrange
            MyModel myModel = new MyModelSubclassed();
            IValueProvider valueProvider = new SimpleValueProvider();

            Controller controller = new EmptyController();
            controller.ValueProvider = valueProvider;

            // Act
            bool returned = controller.TryUpdateModel(myModel, "somePrefix", new[] { "prop1", "prop2" });

            // Assert
            Assert.True(returned);
            Assert.Equal(valueProvider, myModel.BindingContext.ValueProvider);
        }