public void Login_redirects_to_return_url_after_successful_login([Frozen] ILoginLogoutManager loginLogoutManager, [Frozen] IValidatesRedirectUrls redirectValidator, Agiil.Web.Models.Auth.LoginCredentials credentials, string username, [NoAutoProperties] LoginController sut) { // Arrange Mock.Get(loginLogoutManager) .Setup(x => x.AttemptLogin(It.IsAny <ILoginRequest>())) .Returns(new LoginResult(username)); credentials.ReturnUrl = "/Sample/Url"; Mock.Get(redirectValidator) .Setup(x => x.IsValid(It.IsAny <string>())) .Returns(true); // Act var result = sut.Login(credentials); // Assert Assert.IsInstanceOf <RedirectResult>(result, "Result is a redirect-to-URL"); var redirect = (RedirectResult)result; Assert.AreEqual("/Sample/Url", redirect.Url, "Correct URL"); Assert.IsFalse(redirect.Permanent, "Non-permanent redirect"); }
public void Login_ignores_return_url_if_it_is_not_valid([Frozen] ILoginLogoutManager loginLogoutManager, [Frozen] IValidatesRedirectUrls redirectValidator, Agiil.Web.Models.Auth.LoginCredentials credentials, string username, [NoAutoProperties] LoginController sut) { // Arrange Mock.Get(loginLogoutManager) .Setup(x => x.AttemptLogin(It.IsAny <ILoginRequest>())) .Returns(new LoginResult(username)); credentials.ReturnUrl = "/Sample/Url"; Mock.Get(redirectValidator) .Setup(x => x.IsValid(It.IsAny <string>())) .Returns(false); // Act var result = sut.Login(credentials); // Assert Assert.IsInstanceOf <RedirectToRouteResult>(result, "Result is a redirect-to-URL"); var redirect = (RedirectToRouteResult)result; Assert.AreEqual("Login", redirect.RouteValues["controller"], "Correct controller"); Assert.AreEqual(nameof(LoginController.Index), redirect.RouteValues["action"], "Correct action"); }
public void Logout_uses_login_logout_manager_service([Frozen] ILoginLogoutManager loginLogoutManager, [NoAutoProperties] LoginController sut) { // Arrange Mock.Get(loginLogoutManager) .Setup(x => x.AttemptLogout()) .Returns(LogoutResult.LogoutSuccessful); // Act sut.Logout(); // Assert Mock.Get(loginLogoutManager).Verify(x => x.AttemptLogout(), Times.Once()); }
public void Login_uses_login_logout_manager_service([Frozen] ILoginLogoutManager loginLogoutManager, Agiil.Web.Models.Auth.LoginCredentials credentials, [NoAutoProperties] LoginController sut) { // Arrange Mock.Get(loginLogoutManager) .Setup(x => x.AttemptLogin(It.IsAny <ILoginRequest>())) .Returns(LoginResult.LoginFailed); // Act sut.Login(credentials); // Assert Mock.Get(loginLogoutManager).Verify(x => x.AttemptLogin(It.IsAny <ILoginRequest>()), Times.Once()); }
public void Logout_redirects_to_logged_out_page_on_successful_logout([Frozen] ILoginLogoutManager loginLogoutManager, [NoAutoProperties] LoginController sut) { // Arrange Mock.Get(loginLogoutManager) .Setup(x => x.AttemptLogout()) .Returns(LogoutResult.LogoutSuccessful); // Act var result = sut.Logout(); // Assert Assert.IsInstanceOf <RedirectToRouteResult>(result, "Result is a redirect-to-route"); var redirect = (RedirectToRouteResult)result; Assert.AreEqual("Login", redirect.RouteValues["controller"], "Correct controller"); Assert.AreEqual(nameof(LoginController.LoggedOut), redirect.RouteValues["action"], "Correct action"); }
public void Login_ignores_return_url_on_failed_login([Frozen] ILoginLogoutManager loginLogoutManager, Agiil.Web.Models.Auth.LoginCredentials credentials, [NoAutoProperties] LoginController sut) { // Arrange Mock.Get(loginLogoutManager) .Setup(x => x.AttemptLogin(It.IsAny <ILoginRequest>())) .Returns(LoginResult.LoginFailed); credentials.ReturnUrl = "/Sample/Url"; // Act var result = sut.Login(credentials); // Assert Assert.IsInstanceOf <RedirectToRouteResult>(result, "Result is a redirect-to-route"); var redirect = (RedirectToRouteResult)result; Assert.AreEqual("Login", redirect.RouteValues["controller"], "Correct controller"); Assert.AreEqual(nameof(LoginController.Index), redirect.RouteValues["action"], "Correct action"); }
public void Login_redirects_to_home_controller_after_successful_login([Frozen] ILoginLogoutManager loginLogoutManager, Agiil.Web.Models.Auth.LoginCredentials credentials, string username, [NoAutoProperties] LoginController sut) { // Arrange Mock.Get(loginLogoutManager) .Setup(x => x.AttemptLogin(It.IsAny <ILoginRequest>())) .Returns(new LoginResult(username)); credentials.ReturnUrl = null; // Act var result = sut.Login(credentials); // Assert Assert.IsInstanceOf <RedirectToRouteResult>(result, "Result is a redirect-to-route"); var redirect = (RedirectToRouteResult)result; Assert.AreEqual("Login", redirect.RouteValues["controller"], "Correct controller"); Assert.AreEqual(nameof(LoginController.Index), redirect.RouteValues["action"], "Correct action"); }
public LoginController(LoginRequestCreator loginRequestCreator, ILoginLogoutManager loginLogoutManager, IValidatesRedirectUrls redirectUriValidator) { if (redirectUriValidator == null) { throw new ArgumentNullException(nameof(redirectUriValidator)); } if (loginLogoutManager == null) { throw new ArgumentNullException(nameof(loginLogoutManager)); } if (loginRequestCreator == null) { throw new ArgumentNullException(nameof(loginRequestCreator)); } this.redirectUriValidator = redirectUriValidator; this.loginRequestCreator = loginRequestCreator; this.loginLogoutManager = loginLogoutManager; }