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 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 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, 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 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 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 RegisterInvokesUrlActionWithCorrectParametersWhenUserCreationIsSuccessful() { 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>())); var sut = new AdminController(userManager.Object, null, Mock.Of<IMediator>(), null, generalSettings.Object); sut.SetFakeHttpRequestSchemeTo(requestScheme); var urlHelper = new Mock<IUrlHelper>(); sut.Url = urlHelper.Object; await sut.Register(new RegisterViewModel()); //note: I can't test the Values part here b/c I do not have control over the Id generation (which is a guid represented as as string) on ApplicationUser b/c it's new'ed up in the controller urlHelper.Verify(mock => mock.Action(It.Is<UrlActionContext>(uac => uac.Action == "ConfirmEmail" && uac.Controller == "Admin" && uac.Protocol == requestScheme)), Times.Once); }
public async Task RegisterInvokesSendEmailAsyncWithCorrectParametersWhenUserCreationIsSuccessful() { 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 emailSender = new Mock<IEmailSender>(); var sut = new AdminController(userManager.Object, null, emailSender.Object, null, null, generalSettings.Object); sut.SetFakeHttpRequestSchemeTo(It.IsAny<string>()); sut.Url = urlHelper.Object; await sut.Register(model); emailSender.Verify(x => x.SendEmailAsync(model.Email, "Confirm your account", $"Please confirm your account by clicking this <a href=\"{callbackUrl}\">link</a>")); }