public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email, TimeZoneId = _generalSettings.Value.DefaultTimeZone }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); //note: had to change Url.Action to take a UrlActionContext b/c "Url.Action" is really an extension method that eventually uses UrlActionContext, and extension methods are not mockable var callbackUrl = Url.Action(new UrlActionContext { Action = nameof(ConfirmEmail), Controller = "Admin", Values = new { userId = user.Id, token = token }, Protocol = Request.Scheme }); await _emailSender.SendEmailAsync(model.Email, "Confirm your account", $"Please confirm your account by clicking this <a href=\"{callbackUrl}\">link</a>"); return RedirectToAction(nameof(DisplayEmail), "Admin"); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email, TimeZoneId = _generalSettings.Value.DefaultTimeZone }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action(new UrlActionContext { Action = nameof(ConfirmEmail), Controller = "Admin", Values = new { userId = user.Id, token = token }, Protocol = Request.Scheme }); await _mediator.SendAsync(new SendAccountConfirmationEmail { Email = model.Email, CallbackUrl = callbackUrl }); return RedirectToAction(nameof(DisplayEmail), "Admin"); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
public async Task RegisterReturnsCorrectModelWhenModelStateIsNotValid() { var model = new RegisterViewModel(); var sut = CreateAdminControllerWithNoInjectedDependencies(); sut.AddModelStateError(); var result = await sut.Register(model) as ViewResult; var modelResult = result.ViewData.Model as RegisterViewModel; 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<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713 // Send an email with this link var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); await _emailSender.SendEmailAsync(model.Email, "Confirm your allReady account", "Please confirm your allReady account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>"); await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction(nameof(HomeController.Index), "Home"); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email, TimeZoneId = _generalSettings.DefaultTimeZone }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action("ConfirmEmail", "Admin", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme); await _emailSender.SendEmailAsync(model.Email, "Confirm your account", "Please confirm your account by clicking this <a href=\"" + callbackUrl + "\">link</a>"); return RedirectToAction(nameof(AdminController.DisplayEmail), "Admin"); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
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 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<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email, TimeZoneId = _generalSettings.Value.DefaultTimeZone }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { // Send an email with this link var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Action(new UrlActionContext { Action = nameof(ConfirmEmail), Controller = "Account", Values = new { userId = user.Id, token = token }, Protocol = HttpContext.Request.Scheme }); await _emailSender.SendEmailAsync(model.Email, "Confirm your allReady account", $"Please confirm your allReady account by clicking this link: <a href=\"{callbackUrl}\">link</a>"); await _userManager.AddClaimAsync(user, new Claim(Security.ClaimTypes.ProfileIncomplete, "NewUser")); await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction(nameof(HomeController.Index), "Home"); } AddErrorsToModelState(result); } // If we got this far, something failed, redisplay form return View(model); }
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>")); }