public async Task RegisterInvokesCreateAsyncWithCorrectUserAndPassword() { 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 AdminController(userManager.Object, null, null, null, null, generalSettings.Object); 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)); }
public async Task RegisterSendsSendAccountConfirmationEmailWithCorrectDataWhenUserCreationIsSuccessful() { 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>())); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(callbackUrl); var mediator = new Mock<IMediator>(); var sut = new AdminController(userManager.Object, null, mediator.Object, null, generalSettings.Object); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; await sut.Register(model); mediator.Verify(x => x.SendAsync(It.Is<SendAccountConfirmationEmail>(y => y.Email == model.Email && y.CallbackUrl == callbackUrl))); }
public async Task VerifyCodePostRedirectsToHomeControllerIndexWhenTwoFactorSignInAsyncSucceedsAndReturnUrlIsNotLocalUrl() { var signInManager = CreateSignInManagerMock(); signInManager.Setup(x => x.TwoFactorSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>())) .ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.Success); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.IsLocalUrl(It.IsAny<string>())).Returns(false); var sut = new AdminController(null, signInManager.Object, null, null, null) { Url = urlHelper.Object }; var result = await sut.VerifyCode(new VerifyCodeViewModel()) as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(HomeController.Index)); Assert.Equal(result.ControllerName, "Home"); }
public async Task VerifyCodePostReturnsLockoutViewIfTwoFactorSignInAsyncFailsAndIsLockedOut() { var signInManager = CreateSignInManagerMock(); signInManager.Setup(x => x.TwoFactorSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>())).ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.LockedOut); var sut = new AdminController(null, signInManager.Object, null, null, null); var result = await sut.VerifyCode(new VerifyCodeViewModel()) as ViewResult; Assert.Equal(result.ViewName, "Lockout"); }
public async Task VerifyCodePostInvokesTwoFactorSignInAsyncWithCorrectParameters() { var model = new VerifyCodeViewModel { Provider = "provider", Code = "code", RememberBrowser = true, RememberMe = true }; var signInManager = CreateSignInManagerMock(); signInManager.Setup(x => x.TwoFactorSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>())).ReturnsAsync(new Microsoft.AspNetCore.Identity.SignInResult()); var sut = new AdminController(null, signInManager.Object, null, null, null); await sut.VerifyCode(model); signInManager.Verify(x => x.TwoFactorSignInAsync(model.Provider, model.Code, model.RememberMe, model.RememberBrowser)); }
public async Task VerifyCodeGetReturnsErrorViewWhenUserIsNull() { var signInManager = CreateSignInManagerMock(); var sut = new AdminController(null, signInManager.Object, null, null, null); var result = await sut.VerifyCode(It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<string>()) as ViewResult; Assert.Equal(result.ViewName, "Error"); }
public async Task SendCodePostReturnsRedirectToActionResult() { var model = new SendCodeViewModel { SelectedProvider = string.Empty, ReturnUrl = "ReturnUrl", RememberMe = true }; var routeValues = new Dictionary<string, object> { ["Provider"] = model.SelectedProvider, ["ReturnUrl"] = model.ReturnUrl, ["RememberMe"] = model.RememberMe }; var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(x => x.GetTwoFactorAuthenticationUserAsync()).ReturnsAsync(new ApplicationUser()); userManager.Setup(x => x.GenerateTwoFactorTokenAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).ReturnsAsync("token"); var sut = new AdminController(userManager.Object, signInManager.Object, null, null, null); var result = await sut.SendCode(model) as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(AdminController.VerifyCode)); Assert.Equal(result.RouteValues, routeValues); }
public async Task SendCodePostReturnsErrorViewWhenAuthenticationTokenIsNull() { var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(x => x.GetTwoFactorAuthenticationUserAsync()).ReturnsAsync(new ApplicationUser()); var sut = new AdminController(userManager.Object, signInManager.Object, null, null, null); var result = await sut.SendCode(new SendCodeViewModel()) as ViewResult; Assert.Equal(result.ViewName, "Error"); }
public async Task ConfirmEmailInvokesUrlActionWithCorrectParametersWhenUsersEmailIsConfirmedSuccessfully() { const string requestScheme = "requestScheme"; const string userId = "1"; var userManager = CreateUserManagerMock(); userManager.Setup(x => x.FindByIdAsync(It.IsAny<string>())).Returns(() => Task.FromResult(new ApplicationUser { Id = userId })); userManager.Setup(x => x.ConfirmEmailAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); var settings = new Mock<IOptions<SampleDataSettings>>(); settings.Setup(x => x.Value).Returns(new SampleDataSettings()); var urlHelper = new Mock<IUrlHelper>(); var sut = new AdminController(userManager.Object, null, Mock.Of<IMediator>(), settings.Object, null); sut.SetFakeHttpRequestSchemeTo(requestScheme); sut.Url = urlHelper.Object; await sut.ConfirmEmail(It.IsAny<string>(), "code"); urlHelper.Verify(x => x.Action(It.Is<UrlActionContext>(uac => uac.Action == "EditUser" && uac.Controller == "Site" && uac.Protocol == requestScheme && uac.Values.ToString() == $"{{ area = Admin, userId = {userId} }}")), Times.Once); }
public async Task ConfirmEmailInvokesConfirmEmailAsyncWithCorrectUserAndCode() { const string code = "code"; var user = new ApplicationUser(); var userManager = CreateUserManagerMock(); userManager.Setup(x => x.FindByIdAsync(It.IsAny<string>())).Returns(() => Task.FromResult(user)); userManager.Setup(x => x.ConfirmEmailAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Failed())); var sut = new AdminController(userManager.Object, null, null, null, null); await sut.ConfirmEmail(null, code); userManager.Verify(x => x.ConfirmEmailAsync(user, code), Times.Once); }
public async Task ConfirmEmailInvokesFindByIdAsyncWithCorrectUserId() { const string userId = "userId"; var userManager = CreateUserManagerMock(); var sut = new AdminController(userManager.Object, null, null, null, null); await sut.ConfirmEmail(userId, "code"); userManager.Verify(x => x.FindByIdAsync(userId), Times.Once); }
public async Task ConfirmEmailReturnsErrorWhenCannotFindUserByUserId() { var userManager = CreateUserManagerMock(); var sut = new AdminController(userManager.Object, null, null, null, null); var result = await sut.ConfirmEmail(null, "code") as ViewResult; Assert.Equal(result.ViewName, "Error"); }
public async Task RegisterReturnsViewResultAndCorrectModelWhenUserCreationIsNotSuccessful() { 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 AdminController(userManager.Object, null, null, null, generalSettings.Object); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); 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 RegisterAddsIdentityResultErrorsToModelStateErrorsWhenUserCreationIsNotSuccessful() { 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 AdminController(userManager.Object, null, null, null, generalSettings.Object); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); await sut.Register(new RegisterViewModel()); var errorMessages = sut.ModelState.GetErrorMessages(); Assert.Equal(errorMessages.Single(), identityResult.Errors.Select(x => x.Description).Single()); }
public async Task RegisterRedirectsToCorrectActionWhenUserCreationIsSuccessful() { 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>())); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(It.IsAny<string>()); var sut = new AdminController(userManager.Object, null, Mock.Of<IMediator>(), null, generalSettings.Object); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; var result = await sut.Register(new RegisterViewModel()) as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(AdminController.DisplayEmail)); Assert.Equal(result.ControllerName, "Admin"); }
public async Task SendCodePosReturnsErrorViewWhenUserIsNotFound() { var signInManager = CreateSignInManagerMock(); var sut = new AdminController(null, signInManager.Object, null, null, null); var result = await sut.SendCode(It.IsAny<SendCodeViewModel>()) as ViewResult; Assert.Equal(result.ViewName, "Error"); }
public async Task SendCodePostInvokesGenerateTwoFactorTokenAsyncWithCorrectUserAndTokenProvider() { var applicationUser = new ApplicationUser(); var model = new SendCodeViewModel { SelectedProvider = "Email" }; var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(x => x.GetTwoFactorAuthenticationUserAsync()).ReturnsAsync(applicationUser); var sut = new AdminController(userManager.Object, signInManager.Object, null, null, null); await sut.SendCode(model); userManager.Verify(x => x.GenerateTwoFactorTokenAsync(applicationUser, model.SelectedProvider), Times.Once); }
public async Task ConfirmEmailSendsSendApproveOrganizationUserAccountEmailWithCorrectDataWhenUsersEmailIsConfirmedSuccessfully() { const string defaultAdminUserName = "******"; const string callbackUrl = "callbackUrl"; var userManager = CreateUserManagerMock(); userManager.Setup(x => x.FindByIdAsync(It.IsAny<string>())).Returns(() => Task.FromResult(new ApplicationUser())); userManager.Setup(x => x.ConfirmEmailAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); var settings = new Mock<IOptions<SampleDataSettings>>(); settings.Setup(x => x.Value).Returns(new SampleDataSettings { DefaultAdminUsername = defaultAdminUserName }); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(callbackUrl); var mediator = new Mock<IMediator>(); var sut = new AdminController(userManager.Object, null, mediator.Object, settings.Object, null); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; await sut.ConfirmEmail(It.IsAny<string>(), "code"); mediator.Verify(x => x.SendAsync(It.Is<SendApproveOrganizationUserAccountEmail>(y => y.DefaultAdminUsername == defaultAdminUserName && y.CallbackUrl == callbackUrl))); }
public async Task SendCodePostSendsSendSecurityCodeSmsWithCorrectDataWhenSelectedProviderIsPhone() { const string token = "token"; const string usersPhoneNumber = "usersPhoneNumber"; var applicationUser = new ApplicationUser(); var model = new SendCodeViewModel { SelectedProvider = "Phone" }; var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); var mediator = new Mock<IMediator>(); userManager.Setup(x => x.GenerateTwoFactorTokenAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).ReturnsAsync(token); userManager.Setup(x => x.GetPhoneNumberAsync(applicationUser)).ReturnsAsync(usersPhoneNumber); signInManager.Setup(x => x.GetTwoFactorAuthenticationUserAsync()).ReturnsAsync(applicationUser); var sut = new AdminController(userManager.Object, signInManager.Object, mediator.Object, null, null); await sut.SendCode(model); mediator.Verify(x => x.SendAsync(It.Is<SendSecurityCodeSms>(y => y.PhoneNumber == usersPhoneNumber && y.Token == token))); }
public async Task ConfirmEmailReturnsCorrectViewWhenUsersConfirmationIsSuccessful() { var userManager = CreateUserManagerMock(); userManager.Setup(x => x.FindByIdAsync(It.IsAny<string>())).Returns(() => Task.FromResult(new ApplicationUser())); userManager.Setup(x => x.ConfirmEmailAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Success)); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.Action(It.IsAny<UrlActionContext>())).Returns(It.IsAny<string>()); var settings = new Mock<IOptions<SampleDataSettings>>(); settings.Setup(x => x.Value).Returns(new SampleDataSettings { DefaultAdminUsername = It.IsAny<string>() }); var sut = new AdminController(userManager.Object, null, Mock.Of<IMediator>(), settings.Object, null); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; var result = await sut.ConfirmEmail("userId", "code") as ViewResult; Assert.Equal(result.ViewName, "ConfirmEmail"); }
public async Task VerifyCodeGetInvokesGetTwoFactorAuthenticationUserAsync() { var signInManager = CreateSignInManagerMock(); var sut = new AdminController(null, signInManager.Object, null, null, null); await sut.VerifyCode(It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<string>()); signInManager.Verify(x => x.GetTwoFactorAuthenticationUserAsync(), Times.Once); }
public async Task ConfirmEmailReturnsCorrectViewWhenUsersConfirmationIsUnsuccessful() { var userManager = CreateUserManagerMock(); userManager.Setup(x => x.FindByIdAsync(It.IsAny<string>())).Returns(() => Task.FromResult(new ApplicationUser())); userManager.Setup(x => x.ConfirmEmailAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())).Returns(() => Task.FromResult(IdentityResult.Failed())); var sut = new AdminController(userManager.Object, null, null, null, null); var result = await sut.ConfirmEmail("userId", "code") as ViewResult; Assert.Equal(result.ViewName, "Error"); }
public async Task VerifyCodeGetReturnsCorrectViewModel() { const string provider = "provider"; const bool rememberMe = true; const string returnUrl = "returnUrl"; var signInManager = CreateSignInManagerMock(); signInManager.Setup(x => x.GetTwoFactorAuthenticationUserAsync()).ReturnsAsync(new ApplicationUser()); var sut = new AdminController(null, signInManager.Object, null, null, null); var result = await sut.VerifyCode(provider, rememberMe, returnUrl) as ViewResult; var modelResult = result.ViewData.Model as VerifyCodeViewModel; Assert.Equal(modelResult.Provider, provider); Assert.Equal(modelResult.ReturnUrl, returnUrl); Assert.Equal(modelResult.RememberMe, rememberMe); }
public async Task SendCodeGetReturnsErrorViewWhenCannotFindUser() { var signInManager = CreateSignInManagerMock(); var sut = new AdminController(null, signInManager.Object, null, null, null); var result = await sut.SendCode(null, It.IsAny<bool>()) as ViewResult; Assert.Equal(result.ViewName, "Error"); }
public async Task VerifyCodePostAddsErrorMessageToModelStateErrorWhenTwoFactorSignInAsyncIsNotSuccessful() { var signInManager = CreateSignInManagerMock(); signInManager.Setup(x => x.TwoFactorSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>())).ReturnsAsync(new Microsoft.AspNetCore.Identity.SignInResult()); var sut = new AdminController(null, signInManager.Object, null, null, null); await sut.VerifyCode(new VerifyCodeViewModel()); var errorMessage = sut.ModelState.GetErrorMessages().Single(); Assert.Equal(errorMessage, "Invalid code."); }
public async Task SendCodeGetInvokesGetValidTwoFactorProvidersAsyncWithCorrectUser() { var applicationUser = new ApplicationUser(); var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(x => x.GetTwoFactorAuthenticationUserAsync()).Returns(() => Task.FromResult(applicationUser)); userManager.Setup(x => x.GetValidTwoFactorProvidersAsync(It.IsAny<ApplicationUser>())).ReturnsAsync(new List<string>()); var sut = new AdminController(userManager.Object, signInManager.Object, null, null, null); await sut.SendCode(null, It.IsAny<bool>()); userManager.Verify(x => x.GetValidTwoFactorProvidersAsync(applicationUser), Times.Once); }
public async Task VerifyCodePostRedirectsToReturnUrlWhenTwoFactorSignInAsyncSucceedsAndReturnUrlIsLocalUrl() { var model = new VerifyCodeViewModel { ReturnUrl = "returnUrl" }; var signInManager = CreateSignInManagerMock(); signInManager.Setup(x => x.TwoFactorSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>())).ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.Success); var urlHelper = new Mock<IUrlHelper>(); urlHelper.Setup(x => x.IsLocalUrl(model.ReturnUrl)).Returns(true); var sut = new AdminController(null, signInManager.Object, null, null, null) { Url = urlHelper.Object }; var result = await sut.VerifyCode(model) as RedirectResult; Assert.Equal(result.Url, model.ReturnUrl); }
public async Task SendCodeGetReturnsSendCodeViewModelWithCorrectData() { const string returnUrl = "returnUrl"; const bool rememberMe = true; var userFactors = new List<string> { "userFactor1", "userFactor2" }; var expectedProviders = userFactors.Select(factor => new SelectListItem { Text = factor, Value = factor }).ToList(); var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(x => x.GetTwoFactorAuthenticationUserAsync()).Returns(() => Task.FromResult(new ApplicationUser())); userManager.Setup(x => x.GetValidTwoFactorProvidersAsync(It.IsAny<ApplicationUser>())).ReturnsAsync(userFactors); var sut = new AdminController(userManager.Object, signInManager.Object, null, null, null); var result = await sut.SendCode(returnUrl, rememberMe) as ViewResult; var modelResult = result.ViewData.Model as SendCodeViewModel; Assert.Equal(modelResult.ReturnUrl, returnUrl); Assert.Equal(modelResult.RememberMe, rememberMe); Assert.Equal(expectedProviders, modelResult.Providers, new SelectListItemComparer()); }
public async Task RegisterInvokesGenerateEmailConfirmationTokenAsyncWithCorrectUserWhenUserCreationIsSuccessful() { 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.Success)); //var sut = new AdminController(userManager.Object, null, Mock.Of<IEmailSender>(), null, null, generalSettings.Object); var sut = new AdminController(userManager.Object, null, Mock.Of<IMediator>(), null, generalSettings.Object); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = Mock.Of<IUrlHelper>(); await sut.Register(model); userManager.Verify(x => x.GenerateEmailConfirmationTokenAsync(It.Is<ApplicationUser>(au => au.UserName == model.Email && au.Email == model.Email && au.TimeZoneId == defaultTimeZone))); }
public async Task SendCodePostInvokesGetTwoFactorAuthenticationUserAsync() { var signInManager = CreateSignInManagerMock(); var sut = new AdminController(null, signInManager.Object, null, null, null); await sut.SendCode(It.IsAny<SendCodeViewModel>()); signInManager.Verify(x => x.GetTwoFactorAuthenticationUserAsync(), Times.Once); }