public async void Register_ValidModelAndUserCreated_CallsIStripeServiceCreateCustomer() { Mock<VeilUserManager> userManagerStub = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerStub. Setup(um => um.CreateAsync(It.IsAny<User>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Success); userManagerStub. Setup(um => um.UpdateAsync(It.IsAny<User>())). ReturnsAsync(IdentityResult.Failed() /* Return a failed result to minimize the code executed */); Mock<IStripeService> stripeServiceMock = stripeServiceStub; stripeServiceMock. Setup(ss => ss.CreateCustomer(It.IsAny<User>())). Returns("customerString"). Verifiable(); RegisterViewModel viewModel = new RegisterViewModel(); AccountController controller = new AccountController(userManagerStub.Object, null /*signInManager*/, stripeServiceMock.Object); await controller.Register(viewModel, null); Assert.That( () => stripeServiceMock.Verify(ss => ss.CreateCustomer(It.IsAny<User>()), Times.Exactly(1)), Throws.Nothing); }
public void ResetPasswordGET_ValidCode_DisplaysView() { AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null); var result = controller.ResetPassword("passwordResetToken") as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.Empty.Or.EqualTo("ResetPassword")); }
public async void ConfirmEmail_InvalidCode_ReturnsErrorView(string code) { AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null); var result = await controller.ConfirmEmail(Guid.ParseExact("3F14F913-9540-43EA-8F1A-5B08F89A3560", "D"), code) as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.EqualTo("Error")); }
public void ResetPasswordGET_NullOrWhitespaceCode_DisplaysErrorView([Values(null, "", " ")]string code) { AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null); var result = controller.ResetPassword(code) as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.EqualTo("Error")); }
public async void ConfirmEmail_DefaultId_ReturnsErrorView() { AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null); var result = await controller.ConfirmEmail(Guid.Empty, "token") as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.EqualTo("Error")); }
public async void ResetPassword_InvalidModelState_RedisplaysViewWithSameModel() { ResetPasswordViewModel viewModel = new ResetPasswordViewModel(); AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null); controller.ModelState.AddModelError(nameof(viewModel.Email), "Required"); var result = await controller.ResetPassword(viewModel) as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.Empty.Or.EqualTo("ResetPassword")); Assert.That(result.Model, Is.SameAs(viewModel)); }
public async void ConfirmEmail_ValidIdAndCodeButFailedEmailConfirmResult_ReturnsErrorView() { Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.ConfirmEmailAsync(It.IsAny<Guid>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Failed()); AccountController controller = new AccountController(userManager: userManagerMock.Object, signInManager: null, stripeService: null); var result = await controller.ConfirmEmail(Guid.ParseExact("3F14F913-9540-43EA-8F1A-5B08F89A3560", "D"), "token") as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.EqualTo("Error")); }
public void ForgotPasswordGET_Unauthenticated_ReturnsAViewResult() { Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. Setup(c => c.HttpContext.User.Identity.IsAuthenticated). Returns(false); AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null) { ControllerContext = contextStub.Object }; var result = controller.ForgotPassword() as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.Empty.Or.EqualTo("ForgotPassword")); }
public async void ForgotPassword_InvalidModelState_RedisplaysWithSameModel() { ForgotPasswordViewModel viewModel = new ForgotPasswordViewModel(); AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null); controller.ModelState.AddModelError(nameof(viewModel.Email), "Required"); var result = await controller.ForgotPassword(viewModel) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<ForgotPasswordViewModel>()); var model = (ForgotPasswordViewModel)result.Model; Assert.That(model, Is.SameAs(viewModel)); }
public void ForgotPasswordGET_Authenticated_RedirectsToManageChangePassword() { Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. Setup(c => c.HttpContext.User.Identity.IsAuthenticated). Returns(true); AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null) { ControllerContext = contextStub.Object }; var result = controller.ForgotPassword() as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo("ChangePassword")); Assert.That(result.RouteValues["Controller"], Is.EqualTo("Manage")); }
public void SignOut_WhenCalled_RedirectsToHomeIndex() { Mock<VeilUserManager> userManagerStub = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); Mock<IAuthenticationManager> authenticationManagerMock = new Mock<IAuthenticationManager>(); authenticationManagerMock. Setup(am => am.SignOut(It.IsAny<string>())). Verifiable(); Mock<VeilSignInManager> signInManagerStub = new Mock<VeilSignInManager>(userManagerStub.Object, authenticationManagerMock.Object); AccountController controller = new AccountController(userManager: null, signInManager: signInManagerStub.Object, stripeService: null); var result = controller.LogOff() as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(HomeController.Index))); Assert.That(result.RouteValues["Controller"], Is.EqualTo("Home")); }
public async void ConfirmEmail_ValidIdAndCode_CallsUserManagerConfirmEmailAsync() { Guid userId = Guid.ParseExact("3F14F913-9540-43EA-8F1A-5B08F89A3560", "D"); string token = "token"; Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.ConfirmEmailAsync(It.IsAny<Guid>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Failed() /* Return a failed result to minimize the code executed */). Verifiable(); AccountController controller = new AccountController(userManager: userManagerMock.Object, signInManager: null, stripeService: null); await controller.ConfirmEmail(userId, token); Assert.That( () => userManagerMock.Verify(um => um.ConfirmEmailAsync(It.Is<Guid>(val => val == userId), It.Is<string>(val => val == token)), Times.Exactly(1)), Throws.Nothing); }
public void SignOut_WhenCalled_CallsAuthenticationManager() { Mock<VeilUserManager> userManagerStub = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); Mock<IAuthenticationManager> authenticationManagerMock = new Mock<IAuthenticationManager>(); authenticationManagerMock. Setup(am => am.SignOut(It.IsAny<string>())). Verifiable(); Mock<VeilSignInManager> signInManagerStub = new Mock<VeilSignInManager>(userManagerStub.Object, authenticationManagerMock.Object); AccountController controller = new AccountController(userManager: null, signInManager: signInManagerStub.Object, stripeService: null); controller.LogOff(); Assert.That( () => authenticationManagerMock.Verify(am => am.SignOut(DefaultAuthenticationTypes.ApplicationCookie), Times.Exactly(1)), Throws.Nothing); }
public async void ResetPassword_ValidModelState_CallsUserManageFindByEmailAsyncWithModelEmail() { ResetPasswordViewModel viewModel = new ResetPasswordViewModel { Email = "*****@*****.**" }; Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.FindByEmailAsync(It.IsAny<string>())). ReturnsAsync(null). Verifiable(); AccountController controller = new AccountController(userManagerMock.Object, signInManager: null, stripeService: null); await controller.ResetPassword(viewModel); Assert.That( () => userManagerMock.Verify(um => um.FindByEmailAsync(viewModel.Email), Times.Once), Throws.Nothing); }
public async void Register_FailedIdentityResult_AddsAllErrorsToModelState() { string[] identityErrors = { "Error 1", "Error 2", "Error 3" }; IdentityResult failedResult = IdentityResult.Failed(identityErrors); Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.CreateAsync(It.IsAny<User>(), It.IsAny<string>())). ReturnsAsync(failedResult); RegisterViewModel viewModel = new RegisterViewModel(); AccountController controller = new AccountController(userManagerMock.Object, null /*signInManager*/, null /*stripeService*/); await controller.Register(viewModel, null); Assert.That(controller.ModelState.Count, Is.EqualTo(1)); Assert.That(controller.ModelState.First().Value.Errors.Count, Is.EqualTo(identityErrors.Length)); }
public void Register_AuthenticatedGET_RedirectsToHomeIndex() { Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. Setup(c => c.HttpContext.User.Identity.IsAuthenticated). Returns(true); AccountController controller = new AccountController(null /*userManager*/, null /*signInManager*/, null /*stripeService*/) { ControllerContext = contextStub.Object }; var result = controller.Register(null) as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo("Index")); Assert.That(result.RouteValues["Controller"], Is.EqualTo("Home")); }
public void Register_UnauthenticatedGET_SetsReturnUrlInViewBag() { string returnUrl = "/returnUrl"; Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. Setup(c => c.HttpContext.User.Identity.IsAuthenticated). Returns(false); AccountController controller = new AccountController(null /*userManager*/, null /*signInManager*/, null /*stripeService*/) { ControllerContext = contextStub.Object }; var result = controller.Register(returnUrl) as ViewResult; Assert.That(result != null); Assert.That(result.ViewBag.ReturnUrl, Is.EqualTo(returnUrl)); }
public void Register_UnauthenticatedGET_ReturnsLoginViewWithInitializedViewModel() { Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. Setup(c => c.HttpContext.User.Identity.IsAuthenticated). Returns(false); AccountController controller = new AccountController(null /*userManager*/, null /*signInManager*/, null /*stripeService*/) { ControllerContext = contextStub.Object }; var result = controller.Register(null) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<LoginRegisterViewModel>()); var model = (LoginRegisterViewModel)result.Model; Assert.That(model.LoginViewModel != null); Assert.That(model.RegisterViewModel != null); }
public async void Register_IStripeServiceThrowingNonApiKeyError_ReturnsLoginViewWithInitializedViewModel( [Values(StripeExceptionType.UnknownError, StripeExceptionType.ServiceError)]StripeExceptionType exceptionType) { Mock<VeilUserManager> userManagerStub = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerStub. Setup(um => um.CreateAsync(It.IsAny<User>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Success); stripeServiceStub. Setup(ss => ss.CreateCustomer(It.IsAny<User>())). Throws(new StripeServiceException("message", exceptionType)); RegisterViewModel viewModel = new RegisterViewModel(); AccountController controller = new AccountController(userManagerStub.Object, null /*signInManager*/, stripeServiceStub.Object); var result = await controller.Register(viewModel, null) as ViewResult; Assert.That(result != null); Assert.That(result.Model, Is.InstanceOf<LoginRegisterViewModel>()); var model = (LoginRegisterViewModel)result.Model; Assert.That(model.RegisterViewModel != null); Assert.That(model.RegisterViewModel, Is.EqualTo(viewModel)); Assert.That(model.LoginViewModel, Is.Not.Null); }
public async void Register_InvalidModel_ReturnsInitializedViewModel() { AccountController controller = new AccountController(null /*userManager*/, null /*signInManager*/, null /*stripeService*/); controller.ModelState.AddModelError(nameof(RegisterViewModel.Email), "Error"); RegisterViewModel viewModel = new RegisterViewModel(); var result = await controller.Register(viewModel, null) as ViewResult; Assert.That(result != null); Assert.That(result.ViewData.ModelState.IsValid, Is.False); Assert.That(result.Model, Is.InstanceOf<LoginRegisterViewModel>()); var model = (LoginRegisterViewModel)result.Model; Assert.That(model.RegisterViewModel != null); Assert.That(model.RegisterViewModel, Is.EqualTo(viewModel)); Assert.That(model.LoginViewModel != null); }
public void ForgotPasswordConfirmation_WhenCalled_ReturnsViewResult() { AccountController controller = new AccountController(userManager: null, signInManager: null, stripeService: null); var result = controller.ForgotPasswordConfirmation() as ViewResult; Assert.That(result != null); Assert.That(result.ViewName, Is.Empty.Or.EqualTo("ForgotPasswordConfirmation")); }
public async void Register_InvalidModel_SetsReturnUrlInViewBag() { string returnUrl = "/returnUrl"; AccountController controller = new AccountController(null /*userManager*/, null /*signInManager*/, null /*stripeService*/); controller.ModelState.AddModelError(nameof(RegisterViewModel.Email), "Error"); var result = await controller.Register(null, returnUrl) as ViewResult; Assert.That(result != null); Assert.That(result.ViewData.ModelState.IsValid, Is.False); Assert.That(result.ViewBag.ReturnUrl, Is.EqualTo(returnUrl)); }
public async void Register_InvalidModel_RedisplaysLogin() { RegisterViewModel viewModel = new RegisterViewModel(); AccountController controller = new AccountController(null /*userManager*/, null /*signInManager*/, null /*stripeService*/); controller.ModelState.AddModelError(nameof(viewModel.Email), "Error"); var result = await controller.Register(viewModel, null) as ViewResult; Assert.That(result != null); Assert.That(result.ViewData.ModelState.IsValid, Is.False); Assert.That(result.ViewName, Is.EqualTo("Login")); }
public async void Register_ValidModelAndNoErrors_CallsSendEmailAsync() { Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.CreateAsync(It.IsAny<User>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Success); userManagerMock. Setup(um => um.UpdateAsync(It.IsAny<User>())). ReturnsAsync(IdentityResult.Success); userManagerMock. Setup(um => um.AddToRoleAsync(It.IsAny<Guid>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Success); userManagerMock. Setup(um => um.GenerateEmailConfirmationTokenAsync(It.IsAny<Guid>())). ReturnsAsync("token"); userManagerMock. Setup(um => um.SendEmailAsync(It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>())). Returns(Task.FromResult(0)). Verifiable(); stripeServiceStub. Setup(ss => ss.CreateCustomer(It.IsAny<User>())). Returns("customerIdString"); // Controller setup stubs Mock<UrlHelper> urlHelperStub = new Mock<UrlHelper>(); Uri requestUrl = new Uri("http://localhost/"); Mock<HttpRequestBase> requestStub = new Mock<HttpRequestBase>(); requestStub. SetupGet(r => r.Url). Returns(requestUrl); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. SetupGet(c => c.HttpContext.Request). Returns(requestStub.Object); RegisterViewModel viewModel = new RegisterViewModel(); AccountController controller = new AccountController(userManagerMock.Object, null /*signInManager*/, stripeServiceStub.Object) { Url = urlHelperStub.Object, ControllerContext = contextStub.Object }; await controller.Register(viewModel, null); Assert.That( () => userManagerMock.Verify( um => um.SendEmailAsync(It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(1)), Throws.Nothing); }
public async void Register_ValidModelAndNoErrors_AddsUserToMemberRole() { string memberRole = VeilRoles.MEMBER_ROLE; Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.CreateAsync(It.IsAny<User>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Success); userManagerMock. Setup(um => um.UpdateAsync(It.IsAny<User>())). ReturnsAsync(IdentityResult.Success); userManagerMock. Setup(um => um.AddToRoleAsync(It.IsAny<Guid>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Failed() /* Return a failed result to shorten the code path */). Verifiable(); stripeServiceStub. Setup(ss => ss.CreateCustomer(It.IsAny<User>())). Returns("customerIdString"); RegisterViewModel viewModel = new RegisterViewModel(); AccountController controller = new AccountController(userManagerMock.Object, null /*signInManager*/, stripeServiceStub.Object); await controller.Register(viewModel, null); Assert.That( () => userManagerMock.Verify( um => um.AddToRoleAsync(It.IsAny<Guid>(), It.Is<string>(s => s == memberRole)), Times.Exactly(1)), Throws.Nothing); }
public async void ForgotPassword_EmailNotRegistered_RedirectsToForgotPasswordConfirmation() { ForgotPasswordViewModel viewModel = new ForgotPasswordViewModel { Email = "*****@*****.**" }; Mock<VeilUserManager> userManagerStub = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerStub. Setup(um => um.FindByEmailAsync(It.IsAny<string>())). ReturnsAsync(null); AccountController controller = new AccountController(userManagerStub.Object, signInManager: null, stripeService: null); var result = await controller.ForgotPassword(viewModel) as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(AccountController.ForgotPasswordConfirmation))); Assert.That(result.RouteValues["Controller"], Is.Null.Or.EqualTo("Account")); }
public async void ForgotPassword_EmailConfirmed_CallsUserManageSendEmailAsync() { ForgotPasswordViewModel viewModel = new ForgotPasswordViewModel { Email = "*****@*****.**" }; User user = new User { Id = new Guid("65ED1E57-D246-4A20-9937-E5C129E67064"), Email = viewModel.Email }; string passwordResetToken = "passwordResetToken"; Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.FindByEmailAsync(viewModel.Email)). ReturnsAsync(user); userManagerMock. Setup(um => um.IsEmailConfirmedAsync(user.Id)). ReturnsAsync(true); userManagerMock. Setup(um => um.GeneratePasswordResetTokenAsync(It.IsAny<Guid>())). ReturnsAsync(passwordResetToken); userManagerMock. Setup(um => um.SendEmailAsync(It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>())). Returns(Task.FromResult(0)). Verifiable(); Mock<UrlHelper> urlHelperStub = new Mock<UrlHelper>(); Uri requestUrl = new Uri("http://localhost/"); Mock<HttpRequestBase> requestStub = new Mock<HttpRequestBase>(); requestStub. SetupGet(r => r.Url). Returns(requestUrl); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. SetupGet(c => c.HttpContext.Request). Returns(requestStub.Object); AccountController controller = new AccountController(userManagerMock.Object, signInManager: null, stripeService: null) { Url = urlHelperStub.Object, ControllerContext = contextStub.Object }; await controller.ForgotPassword(viewModel); Assert.That( () => userManagerMock.Verify(um => um.SendEmailAsync(user.Id, It.IsAny<string>(), It.IsAny<string>()), Times.Once), Throws.Nothing); }
public void Register_IStripeServiceThrowing_HandlesApiKeyException() { Mock<VeilUserManager> userManagerStub = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerStub. Setup(um => um.CreateAsync(It.IsAny<User>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Success); stripeServiceStub. Setup(ss => ss.CreateCustomer(It.IsAny<User>())). Throws(new StripeServiceException("message", StripeExceptionType.ApiKeyError)); RegisterViewModel viewModel = new RegisterViewModel(); AccountController controller = new AccountController(userManagerStub.Object, null /*signInManager*/, stripeServiceStub.Object); Assert.That(async () => await controller.Register(viewModel, null), Throws.Nothing); }
public async void Register_ValidModelAndUserCreatedAndStripeCustomerCreated_UpdatesUserWithMemberEntryWithCorrectValues() { string stripeCustomerId = "customerIdString"; WishListVisibility wishListVisibility = WishListVisibility.Private; bool receivePromotionalEmail = true; // Auth Mocks Mock<VeilUserManager> userManagerMock = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerMock. Setup(um => um.CreateAsync(It.IsAny<User>(), It.IsAny<string>())). ReturnsAsync(IdentityResult.Success); userManagerMock. Setup(um => um.UpdateAsync(It.IsAny<User>())). ReturnsAsync(IdentityResult.Failed() /* Return a failed result to minimize the code executed */). Verifiable(); stripeServiceStub. Setup(ss => ss.CreateCustomer(It.IsAny<User>())). Returns(stripeCustomerId); RegisterViewModel viewModel = new RegisterViewModel { ReceivePromotionalEmail = receivePromotionalEmail, WishListVisibility = wishListVisibility }; AccountController controller = new AccountController(userManagerMock.Object, null /*signInManager*/, stripeServiceStub.Object); await controller.Register(viewModel, null); Assert.That( () => userManagerMock.Verify( um => um.UpdateAsync(It.Is<User>(u => u.Member != null)), Times.Exactly(1)), Throws.Nothing); Assert.That( () => userManagerMock.Verify( um => um.UpdateAsync(It.Is<User>(u => u.Member.ReceivePromotionalEmails == receivePromotionalEmail)), Times.Exactly(1)), Throws.Nothing); Assert.That( () => userManagerMock.Verify( um => um.UpdateAsync(It.Is<User>(u => u.Member.WishListVisibility == wishListVisibility)), Times.Exactly(1)), Throws.Nothing); Assert.That( () => userManagerMock.Verify( um => um.UpdateAsync(It.Is<User>(u => u.Member.StripeCustomerId == stripeCustomerId)), Times.Exactly(1)), Throws.Nothing); }
public async void ForgotPassword_EmailConfirmed_RedirectsToForgotPasswordConfirmation() { ForgotPasswordViewModel viewModel = new ForgotPasswordViewModel { Email = "*****@*****.**" }; User user = new User { Id = new Guid("65ED1E57-D246-4A20-9937-E5C129E67064"), Email = viewModel.Email }; string passwordResetToken = "passwordResetToken"; Mock<VeilUserManager> userManagerStub = new Mock<VeilUserManager>(dbStub.Object, null /*messageService*/, null /*dataProtectionProvider*/); userManagerStub. Setup(um => um.FindByEmailAsync(viewModel.Email)). ReturnsAsync(user); userManagerStub. Setup(um => um.IsEmailConfirmedAsync(user.Id)). ReturnsAsync(true); userManagerStub. Setup(um => um.GeneratePasswordResetTokenAsync(It.IsAny<Guid>())). ReturnsAsync(passwordResetToken); userManagerStub. Setup(um => um.SendEmailAsync(It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>())). Returns(Task.FromResult(0)); Mock<UrlHelper> urlHelperStub = new Mock<UrlHelper>(); Uri requestUrl = new Uri("http://localhost/"); Mock<HttpRequestBase> requestStub = new Mock<HttpRequestBase>(); requestStub. SetupGet(r => r.Url). Returns(requestUrl); Mock<ControllerContext> contextStub = new Mock<ControllerContext>(); contextStub. SetupGet(c => c.HttpContext.Request). Returns(requestStub.Object); AccountController controller = new AccountController(userManagerStub.Object, signInManager: null, stripeService: null) { Url = urlHelperStub.Object, ControllerContext = contextStub.Object }; var result = await controller.ForgotPassword(viewModel) as RedirectToRouteResult; Assert.That(result != null); Assert.That(result.RouteValues["Action"], Is.EqualTo(nameof(AccountController.ForgotPasswordConfirmation))); Assert.That(result.RouteValues["Controller"], Is.Null.Or.EqualTo("Account")); }