示例#1
0
        public void ShouldMapAllPropertiesFromRequestForm()
        {
            var ctx  = GetControllerContext();
            var form = ctx.HttpContext.Request.Form;

            form.Add("employee.id", "123456");
            form.Add("employee.Name", "John");
            form.Add("employee.salary", "45000.00");
            form.Add("employee.hiredate", "12/25/2005");

            form.Add("employee.homeaddress.street", "123 Nowhere Lane");
            form.Add("employee.homeaddress.city", "Nowhere");
            form.Add("employee.homeaddress.state", "AK");
            form.Add("employee.homeaddress.zip", "99999");

            form.Add("employee.workaddress.street", "1 Microsoft Way");
            form.Add("employee.workaddress.city", "Redmond");
            form.Add("employee.workaddress.state", "WA");
            form.Add("employee.workaddress.zip", "98052");

            form.Add("employee.dependents[0].id", "9");
            form.Add("employee.dependents[0].name", "Son");

            form.Add("employee.dependents[1].id", "8");
            form.Add("employee.dependents[1].name", "Wife");

            var binder       = new DefaultCslaModelBinder();
            var model        = Employee.GetEmployee(1);
            var modelContext = new ModelBindingContext()
            {
                Model         = model,
                ModelType     = typeof(Employee),
                ModelName     = "employee",
                ValueProvider = new ValueProviderDictionary(ctx)
            };
            var result = binder.BindModel(ctx, modelContext);

            Employee o = (Employee)result;

            Assert.AreEqual(123456, o.ID);
            Assert.AreEqual("John", o.Name);
            Assert.AreEqual(45000m, o.Salary);
            Assert.AreEqual(new SmartDate("12/25/2005"), o.HireDate);

            Assert.AreEqual("123 Nowhere Lane", o.HomeAddress.Street);
            Assert.AreEqual("Nowhere", o.HomeAddress.City);
            Assert.AreEqual("AK", o.HomeAddress.State);
            Assert.AreEqual(99999, o.HomeAddress.Zip);

            Assert.IsNotNull(o.WorkAddress, "Work address should not be null.");
            Assert.AreEqual("1 Microsoft Way", o.WorkAddress.Street);
            Assert.AreEqual("Redmond", o.WorkAddress.City);
            Assert.AreEqual("WA", o.WorkAddress.State);
            Assert.AreEqual(98052, o.WorkAddress.Zip);

            Assert.AreEqual(9, o.Dependents[0].ID);
            Assert.AreEqual("Son", o.Dependents[0].Name);
            Assert.AreEqual(8, o.Dependents[1].ID);
            Assert.AreEqual("Wife", o.Dependents[1].Name);
        }
示例#2
0
        public void ModelStateShouldBeInvalidWhenBindToPropertyRaisedException()
        {
            var ctx  = GetControllerContext();
            var form = ctx.HttpContext.Request.Form;

            form.Add("id", "123456");
            form.Add("UnauthorizedProperty", "Test");

            var binder       = new DefaultCslaModelBinder();
            var model        = Employee.GetEmployee(1);
            var modelContext = new ModelBindingContext()
            {
                Model                 = model,
                ModelType             = typeof(Employee),
                ModelName             = "employee",
                ValueProvider         = new ValueProviderDictionary(ctx),
                FallbackToEmptyPrefix = true
            };
            var result = binder.BindModel(ctx, modelContext);

            Employee o = (Employee)result;

            Assert.AreEqual(123456, o.ID);
            Assert.IsFalse(modelContext.ModelState.IsValid);
        }
示例#3
0
        public void ShouldTryToCallCslaFactoryWhenModelIsEmpty()
        {
            var mockInst = new Mock <IModelInstantiator>();

            mockInst
            .Expect(i => i.CallFactoryMethod("Create", typeof(Employee), typeof(Employee), It.IsAny <object[]>()))
            .Returns(Employee.NewEmployee())
            .Verifiable();

            var ctx = GetControllerContext();

            ctx.RouteData.Values["action"] = "Create";

            var form = ctx.HttpContext.Request.Form;

            form.Add("employee.id", "123456");
            form.Add("employee.Name", "John");

            var binder       = new DefaultCslaModelBinder(mockInst.Object);
            var modelContext = new ModelBindingContext()
            {
                Model         = null,
                ModelType     = typeof(Employee),
                ModelName     = "employee",
                ValueProvider = new ValueProviderDictionary(ctx)
            };

            var result = binder.BindModel(ctx, modelContext);

            Employee o = (Employee)result;

            Assert.AreEqual(123456, o.ID);
            Assert.AreEqual("John", o.Name);
            mockInst.VerifyAll();
        }
示例#4
0
        public void ShouldMapBusinessCollection()
        {
            var mockInst = new Mock <IModelInstantiator>();

            mockInst
            .Expect(i => i.CallFactoryMethod("Edit", typeof(DevEmployees), typeof(DevEmployees), It.IsAny <object[]>()))
            .Returns(DevEmployees.GetDevEmployees(1))
            .Verifiable();

            var ctx = GetControllerContext();

            ctx.RouteData.Values["action"] = "Edit";

            var form = ctx.HttpContext.Request.Form;

            form.Add("devemployees[0].id", "123456");
            form.Add("devemployees[0].Name", "John");
            form.Add("devemployees[1].id", "567890");
            form.Add("devemployees[1].Name", "Bob");

            var binder       = new DefaultCslaModelBinder(mockInst.Object);
            var modelContext = new ModelBindingContext()
            {
                Model         = null,
                ModelType     = typeof(DevEmployees),
                ModelName     = "devEmployees",
                ValueProvider = new ValueProviderDictionary(ctx)
            };

            var result = binder.BindModel(ctx, modelContext);

            DevEmployees o = (DevEmployees)result;

            Assert.AreEqual(123456, o[0].ID);
            Assert.AreEqual("John", o[0].Name);
            Assert.AreEqual(567890, o[1].ID);
            Assert.AreEqual("Bob", o[1].Name);
            mockInst.VerifyAll();
        }