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 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"); }
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 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 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))); }
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 ExternalLoginConfirmationInvokesCreateAsyncWithCorrectUser_WhenExternalLoginInfoIsSuccessful_AndModelStateIsValid() { var userManager = CreateUserManagerMock(); userManager.Setup(u => u.CreateAsync(It.IsAny<ApplicationUser>())).Returns(Task.FromResult(new IdentityResult())); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager); var viewModel = CreateExternalLoginConfirmationViewModel(); var sut = new AccountController(userManager.Object, signInManager.Object, CreateGeneralSettingsMockObject().Object, null, null); sut.SetFakeUser("userId"); await sut.ExternalLoginConfirmation(viewModel); userManager.Verify(u => u.CreateAsync(It.Is<ApplicationUser>(au => au.Email == viewModel.Email && au.FirstName == viewModel.FirstName && au.LastName == viewModel.LastName && au.PhoneNumber == viewModel.PhoneNumber))); }
public async Task ExternalLoginConfirmationReturnsExternalLoginFailureView_WhenUserIsNull_AndModelStateIsValid() { var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(s => s.GetExternalLoginInfoAsync(It.Is<string>(xsrf => xsrf == null))).Returns(Task.FromResult(default(ExternalLoginInfo))); var viewmodel = CreateExternalLoginConfirmationViewModel(); var sut = new AccountController(userManager.Object, signInManager.Object, null, null, null); sut.SetFakeUser("userId"); var result = await sut.ExternalLoginConfirmation(viewmodel) as ViewResult; Assert.Equal(result.ViewName, "ExternalLoginFailure"); }
public async Task ExternalLoginConfirmationInvokesGetExternalLoginInfoAsync_WhenModelStateIsValid() { var userManager = CreateUserManagerMock(); var signInManager = CreateSignInManagerMock(userManager); signInManager.Setup(s => s.GetExternalLoginInfoAsync(It.Is<string>(xsrf => xsrf == null))).Returns(Task.FromResult(default(ExternalLoginInfo))); var viewmodel = CreateExternalLoginConfirmationViewModel(); var sut = new AccountController(userManager.Object, signInManager.Object, null, null, null); sut.SetFakeUser("userId"); await sut.ExternalLoginConfirmation(viewmodel); signInManager.Verify(s => s.GetExternalLoginInfoAsync(It.Is<string>(xsrf => xsrf == null)), Times.Once()); }
public async Task ExternalLoginConfirmationRedirectsToCorrectUrlWhenUrlIsLocalUrl() { var userManager = CreateUserManagerMockWithSucessIdentityResult(); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, "test", "testKey", "testDisplayName"); SetupSignInManagerWithDefaultSignInAsync(signInManager); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnResultBaseOnLineBegining(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = CreateGeneralSettingsMockObject(); var sut = new AccountController(userManager.Object, signInManager.Object, null, generalSettings.Object, null); sut.SetFakeUser("test"); sut.Url = urlHelperMock.Object; var result = await sut.ExternalLoginConfirmation(viewModel, "localUrl") as RedirectResult; Assert.Equal(result.Url, "localUrl"); }
public async Task ExternalLoginConfirmationInvokesAddLoginAsyncWithCorrectParametersWhenUserIsCreatedSuccessfully() { var userManager = CreateUserManagerMockWithSucessIdentityResult(); var signInManager = CreateSignInManagerMock(userManager); SetupSignInManagerWithTestExternalLoginValue(signInManager, "test", "testKey", "testDisplayName"); var urlHelperMock = CreateUrlHelperMockObject(); SetupUrlHelperMockToReturnTrueForLocalUrl(urlHelperMock); var viewModel = CreateExternalLoginConfirmationViewModel(); var generalSettings = CreateGeneralSettingsMockObject(); var sut = new AccountController(userManager.Object, signInManager.Object, null, generalSettings.Object, null); sut.SetFakeUser("test"); 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 == "test" && ei.ProviderKey == "testKey" && ei.ProviderDisplayName == "testDisplayName"))); }