I have just started learning and usingASP.NET MVC 2 and also getting more involved into unit testing my code. My question is broadly how to simulate a user log in by passing in credentials within my test.
I am using MSpec and trying to get my head around fakeiteasy in order to write up my test. So far, I believe I've written one test correctly (It passes the test condition) for when an unauthenticated user tries to access a page.
Subject( typeof( HomeController ) )]
public class context_for_a_home_controller_for_not_logged_user
{
protected static HomeController HomeController;
Establish context = () =>
{
// Create controller
HomeController = new HomeController();
HomeController.ControllerContext = A.Fake<ControllerContext>();
};
}
[Subject(typeof(HomeController))]
public class when_the_home_page_is_requested : context_for_a_home_controller_for_not_logged_user
{
static ActionResult result;
Because of = () =>
result = HomeController.Index();
It should_return_the_log_in_page_if_user_not_logged_in = () =>
{ result.ShouldBeAView().And().ShouldUseDefaultView(); };
}
So far so good. However, I'd like to test for the scenario for when an authenticated user hits the home controller. I'm stuck in how to simulate an authenticated user and any help or advice would be welcome.
TIA,
David
After getting in touch with Patrik Hagne, the creator of FakeItEasy, he came up with the following:
[Subject( typeof( HomeController ) )]
public class context_for_a_home_controller_for_logged_user
{
protected static HomeController HomeController;
Establish context = () =>
{
// Create controller
HomeController = new HomeController();
HomeController.ControllerContext = A.Fake<ControllerContext>();
var fakePrincipal = A.Fake<IPrincipal>();
var fakeIdentity = new GenericIdentity( "username" );
A.CallTo( () => fakePrincipal.Identity ).Returns( fakeIdentity );
A.CallTo( () => HomeController.ControllerContext.HttpContext.User ).Returns( fakePrincipal );
};
}
That did the trick! Thanks Patrik!