Skip to main content

UpdateModel Unit Testing Gotcha!

If you’re unit testing and make a call to UpdateModel, you get the case where your object doesn’t get updated.

Say your controller has an Edit Post action similar to:

public ActionResult Edit(Customer customer)
Customer _customer = repository.GetByKey(customer.CustomerKey);
return RedirectToAction("Index");
Now you might think that the call to UpdateModel will use your the object you passed in. Wrong! It wants the form values that get passed as part of the post request. So if you’re unit testing and using MVC fakes, you need to pass in some form values.
Customer customer = new Customer()
CustomerKey = 1234,
CustomerName = "ABC Siding",
Address = "1 Main",
City = "Springfield",
State = "IL",
ZipCode = "62701",
FirstName = "Fred",
LastName = "Jones",
Phone = "2175551212",
Fax = "2175551213",
IsActive = true

NameValueCollection formParams = new NameValueCollection {
{ "CustomerName", customer.CustomerName },
{ "Address", customer.Address },
{ "City", customer.City },
{ "State", customer.State },
{ "ZipCode", customer.ZipCode },
{ "FirstName", customer.FirstName },
{ "LastName", customer.LastName },
{ "Phone", customer.Phone },
{ "Fax", customer.Fax },
{ "IsActive", customer.IsActive.ToString() }

target.ControllerContext = new FakeControllerContext(
target, "PaulBrown", new string[] { ApplicationRoles.ViewCustomersGroup },
null, formParams, null, null, null);
Once you pass in the form vars, everything works fine. Now the question I’m asking myself is why I’ve got an argument in the method signature at all. The answer is because that was how Scott Gu did it in NerdDinner. Gonna have to look at that!


Popular posts from this blog

Migrating Legacy Apps to the New SimpleMembership Provider

Asp.Net MVC4 uses the new SimpleMembership provider, changes the table structure and adds a new hashing algorithm. The reasons for the changes can be found in this article by Jon Galloway. This article shows how to migrate your existing apps to the new provider.I’m assuming that you stored your passwords in the unrecoverable SHA-1 format. If you didn’t, then you’ll have to change a couple of things. All of my apps are done this way so… I’m also assuming that you have created the basic skeleton of the new app and ran it once so the correct tables will be created.First, we’ll look at the new tables. Previously, we had all of those aspnet_xxxxxx tables. Here’s the new ones.UserProfileContains all of the elements relevant to the user. This is a combination of the aspnet_Users table and the aspnet_Profiles table.webpages_MembershipStores the password info when not using OAuth, Live, Facebook, etc. This table is somewhat of a match to the aspnet_Membership table.webpages_OAuthMembershipStor…

JavaScript function to automatically add slashes to date

In converting an old Windows app to a browser app, the user wanted to be able to enter dates without the slashes. Here's a simple jscript: 1:// Function to convert short date string (MMddyy) 2:// or (MMddyyyy) to a date string (mm/dd/yyyy). 3:// txtBox is the actual textbox control 4:// with the value to be processed. 5:function FixShortDate(txtBox) { 6:if (txtBox == null) { 7:return'' } 8: 9:var re = new RegExp(/(\d{6})(\d{2})?/); 10: 11:if (re.test(txtBox.value)) 12: { 13:if (txtBox.value.length == 8) { 14: txtBox.value = txtBox.value.substring(0, 2) + '/' + txtBox.value.substring(2, 4) + '/' + txtBox.value.substring(4, 8) 15: } 16: 17:if (txtBox.value.length == 6) { 18:if (txtBox.value.substring(4, 6) < 20)