public async Task ExternalLoginConfirmationInvokesSignInAsyncWithCorrectParameters_WhenExternalLoginIsAddedSuccessfully() { var userManager = CreateUserManagerMockWithSucessIdentityResult(); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, "test", "testKey", "testDisplayName"); SetupSignInManagerWithDefaultSignInAsync(signInManager); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnTrueForLocalUrl(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = "DefaultTimeZone" }); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeUser("userId"); sut.Url = urlHelperMock.Object; await sut.ExternalLoginConfirmation(viewModel, "testUrl"); signInManager.Verify(s => s.SignInAsync(It.Is<ApplicationUser>(au => au.Email == viewModel.Email && au.FirstName == viewModel.FirstName && au.LastName == viewModel.LastName && au.PhoneNumber == viewModel.PhoneNumber), It.Is<bool>(p => p == false), It.Is<string>(auth => auth == null))); }
public async Task ForgotPasswordPostReturnsForgotPasswordConfirmationView_WhenModelStateIsValid_AndUserIsNotNull_AndUsersEmailHasBeenVerified() { const string email = "*****@*****.**"; var vm = new ForgotPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.IsEmailConfirmedAsync(user)).Returns(() => Task.FromResult(true)); userManager.Setup(x => x.GeneratePasswordResetTokenAsync(user)).Returns(() => Task.FromResult(It.IsAny<string>())); var sut = new AccountController(userManager.Object, null, null, Mock.Of<IMediator>(), null); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = Mock.Of<IUrlHelper>(); var result = await sut.ForgotPassword(vm) as ViewResult; Assert.Equal(result.ViewName, "ForgotPasswordConfirmation"); }
public async Task ResetPasswordPostInvokesResetPasswordAsyncWithCorrectParameters_WhenUserIsNotNull_AndModelStateIsValid() { const string email = "*****@*****.**"; var vm = new ResetPasswordViewModel { Email = email, Password = "******", Code = "code" }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.ResetPasswordAsync(user, It.IsAny<string>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); var sut = new AccountController(userManager.Object, null, null, null, null); await sut.ResetPassword(vm); userManager.Verify(m => m.ResetPasswordAsync(user, It.Is<string>(y => y == vm.Code), It.Is<string>(y => y == vm.Password)), Times.Once); }
public async Task ForgotPasswordPostReturnsForgotPasswordConfirmationView_WhenModelStateIsValid_AndUsersEmailIsUnverified() { const string email = "*****@*****.**"; var vm = new ForgotPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.IsEmailConfirmedAsync(user)).Returns(() => Task.FromResult(false)); var sut = new AccountController(userManager.Object, null, null, null, null); var result = await sut.ForgotPassword(vm) as ViewResult; Assert.Equal(result.ViewName, "ForgotPasswordConfirmation"); }
public async Task ForgotPasswordPostInvokesUrlActionWithCorrectParameters_WhenModelStateIsValid_AndUserIsNotNull_AndUsersEmailHasBeenVerified() { const string requestScheme = "requestScheme"; const string email = "*****@*****.**"; var vm = new ForgotPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.IsEmailConfirmedAsync(user)).Returns(() => Task.FromResult(true)); userManager.Setup(x => x.GeneratePasswordResetTokenAsync(user)).Returns(() => Task.FromResult(It.IsAny<string>())); var sut = new AccountController(userManager.Object, null, null, Mock.Of<IMediator>(), null); var urlHelper = new Mock<IUrlHelper>(); sut.SetFakeHttpRequestSchemeTo(requestScheme); sut.Url = urlHelper.Object; await sut.ForgotPassword(vm); urlHelper.Verify(mock => mock.Action(It.Is<UrlActionContext>(uac => uac.Action == "ResetPassword" && uac.Controller == "Account" && uac.Protocol == requestScheme)), Times.Once); }
public async Task ConfirmEmailInvokesConfirmEmailAsyncWithTheCorrectParameters_WhenUserAndUserIdAndTokenAreNotNull() { const string userId = "userId"; const string token = "someToken"; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByIdAsync(userId)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.ConfirmEmailAsync(user, token)).Returns(() => Task.FromResult(IdentityResult.Success)); var sut = new AccountController(userManager.Object, null, null, null, null); await sut.ConfirmEmail(userId, token); userManager.Verify(x => x.ConfirmEmailAsync(It.Is<ApplicationUser>(y => y == user), It.Is<string>(y => y == token)), Times.Once); }
public async Task ConfirmEmailReturnsConfirmEmailView_WhenUsersEmailCanBeConfirmed() { const string userId = "userId"; const string token = "someToken"; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByIdAsync(userId)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.ConfirmEmailAsync(user, token)).Returns(() => Task.FromResult(IdentityResult.Success)); var sut = new AccountController(userManager.Object, null, null, null, null); var result = await sut.ConfirmEmail(userId, token) as ViewResult; Assert.Equal(result.ViewName, "ConfirmEmail"); }
public async Task RegisterPostInvokesCreateAsyncWithTheCorrectParameters_WhenModelStateIsValid() { const string defaultTimeZone = "DefaultTimeZone"; var model = new RegisterViewModel { Email = "email", Password = "******" }; var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = defaultTimeZone }); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Failed())); var sut = new AccountController(userManager.Object, null, generalSettings.Object, null, null); await sut.Register(model); userManager.Verify(x => x.CreateAsync(It.Is<ApplicationUser>(au => au.UserName == model.Email && au.Email == model.Email && au.TimeZoneId == defaultTimeZone), model.Password), Times.Once); }
public async Task RegisterPostInvokesUrlActionWithTheCorrectParameters_WhenModelStateIsValid_AndUserCreationIsSuccessful() { const string requestScheme = "requestScheme"; var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings()); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); userManager.Setup(x => x.GenerateEmailConfirmationTokenAsync(It.IsAny<ApplicationUser>())).Returns(() => Task.FromResult(It.IsAny<string>())); userManager.Setup(x => x.GenerateChangePhoneNumberTokenAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(It.IsAny<string>())); var signInManager = CreateSignInManagerMock(userManager); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeHttpRequestSchemeTo(requestScheme); var urlHelper = new Mock<IUrlHelper>(); sut.Url = urlHelper.Object; await sut.Register(new RegisterViewModel()); urlHelper.Verify(mock => mock.Action(It.Is<UrlActionContext>(uac => uac.Action == "ConfirmEmail" && uac.Controller == "Account" && uac.Protocol == requestScheme)), Times.Once); }
public async Task ExternalLoginConfirmationAddsIdentityResultErrorsToModelStateError_WhenUserIsCreatedSuccessfully() { var userManager = CreateUserManagerMock(); userManager.Setup(u => u.CreateAsync(It.IsAny<ApplicationUser>())).Returns(Task.FromResult(IdentityResult.Success)); userManager.Setup(u => u.AddLoginAsync(It.IsAny<ApplicationUser>(), It.IsAny<ExternalLoginInfo>())) .Returns(Task.FromResult(IdentityResult.Failed( new IdentityError { Code = "TestCode1", Description = "TestDescription1" }, new IdentityError { Code = "TestCode2", Description = "TestDescription2" } ))); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, "test", "testKey", "testDisplayName"); SetupSignInManagerWithDefaultSignInAsync(signInManager); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnResultBaseOnLineBegining(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = "DefaultTimeZone" }); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeUser("userId"); sut.Url = urlHelperMock.Object; var result = await sut.ExternalLoginConfirmation(viewModel, "http://localUrl") as ViewResult; Assert.Equal(result.ViewData.ModelState.ErrorCount, 2); var firstModelStateError = result.ViewData.ModelState.Values.FirstOrDefault().Errors.FirstOrDefault(); var secondModelStateError = result.ViewData.ModelState.Values.FirstOrDefault().Errors.Skip(1).FirstOrDefault(); Assert.Equal(firstModelStateError.ErrorMessage, "TestDescription1"); Assert.Equal(secondModelStateError.ErrorMessage, "TestDescription2"); }
private static AccountController AccountController(Microsoft.AspNetCore.Identity.SignInResult signInResult = default(Microsoft.AspNetCore.Identity.SignInResult)) { var userManagerMock = CreateUserManagerMock(); var signInManagerMock = CreateSignInManagerMock(userManagerMock); signInManagerMock.Setup(mock => mock.PasswordSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>())) .ReturnsAsync(signInResult == default(Microsoft.AspNetCore.Identity.SignInResult) ? Microsoft.AspNetCore.Identity.SignInResult.Success : signInResult); var urlHelperMock = new Mock<IUrlHelper>(); urlHelperMock.Setup(mock => mock.IsLocalUrl(It.Is<string>(x => x.StartsWith("http")))).Returns(false); urlHelperMock.Setup(mock => mock.IsLocalUrl(It.Is<string>(x => !x.StartsWith("http")))).Returns(true); var controller = new AccountController(userManagerMock.Object, signInManagerMock.Object, Mock.Of<IOptions<GeneralSettings>>(), Mock.Of<IMediator>(), null) { Url = urlHelperMock.Object }; return controller; }
public async Task ExternalLoginConfirmationRedirectsToCorrectActionAndContrller_WhenUrlIsNotLocalUrl_AndUserIsNeitherSiteAdminOrOrgAdmin() { var userManager = CreateUserManagerMockWithSucessIdentityResult(); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, "test", "testKey", "testDisplayName"); SetupSignInManagerWithDefaultSignInAsync(signInManager); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnResultBaseOnLineBegining(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = "DefaultTimeZone" }); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeUser("userId"); sut.Url = urlHelperMock.Object; var result = await sut.ExternalLoginConfirmation(viewModel, "http://localUrl") as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(HomeController.Index)); Assert.Equal(result.ControllerName, "Home"); }
public async Task ExternalLoginConfirmationRedirectsToCorrectActionAndContrllerWithCorrectRouteValues_WhenUserIsOrgAdmin() { var userManager = CreateUserManagerMockWithSucessIdentityResult(); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, "test", "testKey", "testDisplayName"); signInManager .Setup(s => s.SignInAsync(It.IsAny<ApplicationUser>(), It.IsAny<bool>(), It.IsAny<string>())) .Callback<ApplicationUser, bool, string>((appUser, persist, auth) => { appUser.Claims.Add(new IdentityUserClaim<string> { ClaimType = AllReady.Security.ClaimTypes.UserType, ClaimValue = Enum.GetName(typeof(UserType), UserType.OrgAdmin) }); }) .Returns(Task.FromResult(default(object))); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnResultBaseOnLineBegining(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = "DefaultTimeZone" }); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeUser("userId"); sut.Url = urlHelperMock.Object; var result = await sut.ExternalLoginConfirmation(viewModel, "http://localUrl") as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(AllReady.Areas.Admin.Controllers.CampaignController.Index)); Assert.Equal(result.ControllerName, "Campaign"); Assert.Equal(result.RouteValues["area"], "Admin"); }
public async Task ExternalLoginConfirmationRedirectsToCorrectUrl_WhenUrlIsLocalUrl() { const string returnUrl = "localUrl"; var userManager = CreateUserManagerMockWithSucessIdentityResult(); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, "test", "testKey", "testDisplayName"); SetupSignInManagerWithDefaultSignInAsync(signInManager); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnResultBaseOnLineBegining(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = "DefaultTimeZone" }); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeUser("userId"); sut.Url = urlHelperMock.Object; var result = await sut.ExternalLoginConfirmation(viewModel, returnUrl) as RedirectResult; Assert.Equal(result.Url, returnUrl); }
public async Task ConfirmEmailInvokesFindByIdAsyncWithCorrectUserId_WhenUserIdAndTokenAreNotNull() { const string userId = "userId"; const string token = "someToken"; var userManager = CreateUserManagerMock(); var sut = new AccountController(userManager.Object, null, null, null, null); await sut.ConfirmEmail(userId, token); userManager.Verify(x => x.FindByIdAsync(It.Is<string>(y => y == userId)), Times.Once); }
public async Task RegisterPostSendsSendConfirmAccountEmailWithTheCorrectParameters_WhenModelStateIsValid_AndUserCreationIsSuccessful() { const string callbackUrl = "callbackUrl"; var model = new RegisterViewModel { Email = "email" }; var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings()); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); userManager.Setup(x => x.GenerateEmailConfirmationTokenAsync(It.IsAny<ApplicationUser>())).Returns(() => Task.FromResult(It.IsAny<string>())); userManager.Setup(x => x.GenerateChangePhoneNumberTokenAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(It.IsAny<string>())); var signInManager = CreateSignInManagerMock(userManager); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(callbackUrl); var mediator = new Mock<IMediator>(); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, mediator.Object, null); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; await sut.Register(model); mediator.Verify(x => x.SendAsync(It.Is<SendConfirmAccountEmail>(y => y.Email == model.Email && y.CallbackUrl == callbackUrl)), Times.Once); }
public async Task ConfirmEmailReturnsErrorView_WhenUserIsNull_AndUserIdAndTokenAreNotNull() { const string userId = "userId"; const string token = "someToken"; var userManager = CreateUserManagerMock(); userManager.Setup(x => x.FindByIdAsync(userId)).Returns(() => Task.FromResult((ApplicationUser)null)); var sut = new AccountController(userManager.Object, null, null, null, null); var result = await sut.ConfirmEmail(userId, token) as ViewResult; Assert.Equal("Error", result.ViewName); }
public async Task RegisterPostInvokesSignInAsyncWithTheCorrectParameters_WhenModelStateIsValid_AndUserCreationIsSuccessful() { const string defaultTimeZone = "DefaultTimeZone"; var model = new RegisterViewModel { Email = "email" }; var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = defaultTimeZone }); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); userManager.Setup(x => x.GenerateEmailConfirmationTokenAsync(It.IsAny<ApplicationUser>())).Returns(() => Task.FromResult(It.IsAny<string>())); userManager.Setup(x => x.GenerateChangePhoneNumberTokenAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(It.IsAny<string>())); var signInManager = CreateSignInManagerMock(userManager); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(It.IsAny<string>()); userManager.Setup(x => x.AddClaimAsync(It.IsAny<ApplicationUser>(), It.IsAny<Claim>())).Returns(() => Task.FromResult(IdentityResult.Success)); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; await sut.Register(model); signInManager.Verify(x => x.SignInAsync(It.Is<ApplicationUser>(au => au.UserName == model.Email && au.Email == model.Email && au.TimeZoneId == defaultTimeZone), It.IsAny<bool>(), null), Times.Once); }
public async Task ConfirmEmailInvokesRefreshSignInAsyncWithTheCorrectParameters_WhenUserIsSignedIn_AndUsersProfileIsComplete_AndUsersEmailIsConfirmed_AndUserAndUserIdAndTokenAreNotNull() { const string userId = "userId"; const string token = "someToken"; var userManager = CreateUserManagerMock(); var user = new ApplicationUser { Id = userId, FirstName = "first name", LastName = "last name", PhoneNumber = "111-111-1111", PhoneNumberConfirmed = true, Email = "*****@*****.**", EmailConfirmed = true }; userManager.Setup(x => x.FindByIdAsync(userId)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.ConfirmEmailAsync(user, token)).Returns(() => Task.FromResult(IdentityResult.Success)); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(x => x.RefreshSignInAsync(user)).Returns(() => Task.FromResult(It.IsAny<Task>())); var mediator = new Mock<IMediator>(); mediator.Setup(x => x.SendAsync(new RemoveUserProfileIncompleteClaimCommand { UserId = user.Id })).Returns(() => Task.FromResult(It.IsAny<Unit>())); var sut = new AccountController(userManager.Object, signInManager.Object, null, mediator.Object, null); sut.SetFakeUserWithCookieAuthenticationType(userId); await sut.ConfirmEmail(userId, token); signInManager.Verify(x => x.RefreshSignInAsync(It.Is<ApplicationUser>(y => y.Id == user.Id))); }
public async Task RegisterPostRedirectsToCorrectActionAndController_WhenModelStateIsValid_AndUserCreationIsSuccessful() { var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings()); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); userManager.Setup(x => x.GenerateEmailConfirmationTokenAsync(It.IsAny<ApplicationUser>())).Returns(() => Task.FromResult(It.IsAny<string>())); userManager.Setup(x => x.GenerateChangePhoneNumberTokenAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(It.IsAny<string>())); var signInManager = CreateSignInManagerMock(userManager); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(It.IsAny<string>()); userManager.Setup(x => x.AddClaimAsync(It.IsAny<ApplicationUser>(), It.IsAny<Claim>())).Returns(() => Task.FromResult(IdentityResult.Success)); signInManager.Setup(x => x.SignInAsync(It.IsAny<ApplicationUser>(), It.IsAny<bool>(), null)).Returns(() => Task.FromResult(It.IsAny<Task>())); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; var result = await sut.Register(new RegisterViewModel()) as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(HomeController.Index)); Assert.Equal(result.ControllerName, "Home"); }
public async Task ForgotPasswordPostInvokesIsEmailConfirmedAsyncWithThecorrectUser_WhenModelStateIsValid() { const string email = "*****@*****.**"; var vm = new ForgotPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)).Verifiable(); var sut = new AccountController(userManager.Object, null, null, null, null); await sut.ForgotPassword(vm); userManager.Verify(m => m.IsEmailConfirmedAsync(user), Times.Once); }
public async Task RegisterPostAddsIdentityResultErrorsToModelStateError_WhenUserCreationFails() { var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings()); var identityResult = IdentityResult.Failed(new IdentityError { Description = "IdentityErrorDescription" }); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(identityResult)); var sut = new AccountController(userManager.Object, null, generalSettings.Object, null, null); await sut.Register(new RegisterViewModel()); var errorMessages = sut.ModelState.GetErrorMessages(); Assert.Equal(errorMessages.Single(), identityResult.Errors.Select(x => x.Description).Single()); }
public async Task ForgotPasswordPostInvokesGeneratePasswordResetTokenAsyncWithCorrectUser_WhenModelStateIsValid_AndUserIsNotNull_AndUsersEmailHasBeenVerified() { const string email = "*****@*****.**"; var vm = new ForgotPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.IsEmailConfirmedAsync(user)).Returns(() => Task.FromResult(true)); userManager.Setup(x => x.GeneratePasswordResetTokenAsync(user)).Returns(() => Task.FromResult(It.IsAny<string>())); var emailSender = new Mock<IEmailSender>(); emailSender.Setup(x => x.SendEmailAsync(email, It.IsAny<string>(), It.IsAny<string>())).Returns(() => Task.FromResult(It.IsAny<Task>())); var sut = new AccountController(userManager.Object, null, null, Mock.Of<IMediator>(), null); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = Mock.Of<IUrlHelper>(); await sut.ForgotPassword(vm); userManager.Verify(x => x.GeneratePasswordResetTokenAsync(user), Times.Once); }
public async Task RegisterPostReturnsTheSameViewAndViewModel_WhenUserCreationFails() { var model = new RegisterViewModel(); var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings()); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Failed())); var sut = new AccountController(userManager.Object, null, generalSettings.Object, null, null); var result = await sut.Register(model) as ViewResult; var modelResult = result.ViewData.Model as RegisterViewModel; Assert.IsType<ViewResult>(result); Assert.IsType<RegisterViewModel>(modelResult); Assert.Same(model, modelResult); }
public async Task ForgotPasswordPostSendsSendResetPasswordEmailWithCorrectParameters_WhenModelStateIsValid_AndUserIsNotNull_AndUsersEmailHasBeenVerified() { const string email = "*****@*****.**"; const string callbackUrl = "callbackUrl"; var vm = new ForgotPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.IsEmailConfirmedAsync(user)).Returns(() => Task.FromResult(true)); userManager.Setup(x => x.GeneratePasswordResetTokenAsync(user)).Returns(() => Task.FromResult(It.IsAny<string>())); var mediator = new Mock<IMediator>(); var sut = new AccountController(userManager.Object, null, null, mediator.Object, null); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(callbackUrl); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; await sut.ForgotPassword(vm); mediator.Verify(x => x.SendAsync(It.Is<SendResetPasswordEmail>(y => y.Email == vm.Email && y.CallbackUrl == callbackUrl)), Times.Once); }
public async Task LogOffInvokesSignOutAsync() { var signInManager = CreateSignInManagerMock(CreateUserManagerMock()); var sut = new AccountController(null, signInManager.Object, null, null, null); await sut.LogOff(); signInManager.Verify(x => x.SignOutAsync(), Times.Once); }
public async Task ResetPasswordPostInvokesFindByNameAsyncWithTheCorrecEmail_WhenModelStateIsValid() { const string email = "*****@*****.**"; var vm = new ResetPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.ResetPasswordAsync(user, It.IsAny<string>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); var sut = new AccountController(userManager.Object, null, null, null, null); await sut.ResetPassword(vm); userManager.Verify(m => m.FindByNameAsync(email), Times.Once); }
public async Task LogOffRedirectsToCorrectActionAndController() { var signInManager = CreateSignInManagerMock(CreateUserManagerMock()); signInManager.Setup(x => x.SignOutAsync()).Returns(() => Task.FromResult(It.IsAny<Task>())); var sut = new AccountController(null, signInManager.Object, null, null, null); var result = await sut.LogOff() as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(HomeController.Index)); Assert.Equal(result.ControllerName, "Home"); }
public async Task ResetPasswordPostRedirectsToCorrectAction_WhenUsersPasswordResetSucceeded_AndUserIsNotNull_AndModelStateIsValid() { const string email = "*****@*****.**"; var vm = new ResetPasswordViewModel { Email = email }; var userManager = CreateUserManagerMock(); var user = new ApplicationUser(); userManager.Setup(x => x.FindByNameAsync(email)).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.ResetPasswordAsync(user, It.IsAny<string>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); var sut = new AccountController(userManager.Object, null, null, null, null); var result = await sut.ResetPassword(vm) as RedirectToActionResult; Assert.Equal("ResetPasswordConfirmation", result.ActionName); }
public async Task ExternalLoginConfirmationInvokesAddLoginAsyncWithCorrectParameters_WhenUserIsCreatedSuccessfully_AndExternalLoginInfoIsSuccessful_AndModelStateIsValid() { const string loginProvider = "test"; const string providerKey = "test"; const string displayName = "testDisplayName"; var userManager = CreateUserManagerMockWithSucessIdentityResult(); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, loginProvider, providerKey, displayName); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnTrueForLocalUrl(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = new Mock<IOptions<GeneralSettings>>(); generalSettings.Setup(x => x.Value).Returns(new GeneralSettings { DefaultTimeZone = "DefaultTimeZone" }); var sut = new AccountController(userManager.Object, signInManager.Object, generalSettings.Object, Mock.Of<IMediator>(), null); sut.SetFakeUser("userId"); sut.Url = urlHelperMock.Object; await sut.ExternalLoginConfirmation(viewModel, "testUrl"); userManager.Verify(u => u.AddLoginAsync(It.Is<ApplicationUser>(au => au.Email == viewModel.Email && au.FirstName == viewModel.FirstName && au.LastName == viewModel.LastName && au.PhoneNumber == viewModel.PhoneNumber), It.Is<ExternalLoginInfo>(ei => ei.LoginProvider == loginProvider && ei.ProviderKey == providerKey && ei.ProviderDisplayName == displayName))); }