I have made a lot of progress during the night. I finally managed to set up my tests. Now my code will execute the first test and end up in the CREATE METHOD of the controller. What I am trying to see if I need to change my controller method so it can take a full object (perhaps create a new IF statement checking if the admin KEY and Admin Name are not null. Do yo have any suggestions as to the design pattern and realistic Unit Testing design?
Test:
public void Creating_One_Note()
{
var note = new AdminNote()
{
NoteId = 00003,
UserKey = "89df3f2a-0c65-4552-906a-08bceabb1198",
AdminKey = "4b942342-8f73-490c-b9df-f29ac859d7d7",
NoteText = "TEST NOTE FOR THIS TEST YOU KNOW",
CreateDate = DateTime.Now,
ModifiedDate = DateTime.Now,
AdminName = "Marco",
};
var a = _controller.Create(note);
Assert.IsNotNull(a);
}
Controller Create Method:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(AdminNote adminNote)
{
try
{
if (ModelState.IsValid)
{
adminNote.AdminKey = System.Web.HttpContext.Current.User.Identity.GetUserId();
adminNote.AdminName = System.Web.HttpContext.Current.User.Identity.GetUserName();
adminNote.CreateDate = DateTime.Now;
adminNote.ModifiedDate = DateTime.Now;
adminNote.ObjectState = ObjectState.Added;
_adminNoteService.Insert(adminNote);
return RedirectToAction("UserDetails", "Admin", new { UserKey = adminNote.UserKey });
}
}
catch (Exception ex)
{
ControllerConstants.HandleException(ex);
ViewBag.PopupMessage(string.Format("We're sorry but an error occurred. {0}", ex.Message));
}
return View(adminNote);
}
As you can see my controller method returns a VIEW I know I will have to adjust my test to be able to understand this. However the controller method will jump to the exception because its trying to set the AdminKey and AdminName (information I get from the front end). For this test I am hardcoding it in and I want to see if the method adds it to the repository. What could I do in this case?