public async Task Given_A_Valid_User_If_User_Already_Exists_Should_Return_BadRequest() { // Arrange const string expected = "User already exists."; var registerViewModel = new RegisterViewModel { Email = "*****@*****.**", Password = "******", Username = "******" }; var registerQueryParameters = new RegisterQueryParameters { ReturnUrl = "/" }; _userManager.CreateAsync(Arg.Any <ApplicationUser>(), Arg.Any <string>()).Returns(IdentityResult.Failed(new IdentityError { Description = "User already exists." })); // Act var result = await _sut.Register(registerViewModel, registerQueryParameters) as BadRequestObjectResult; // Assert result.Should().BeOfType <BadRequestObjectResult>(); var errors = result?.Value as IEnumerable <string>; errors.Should().ContainSingle(expected); }
public async Task Given_An_Invalid_ModelState_Should_Return_BadRequestResult() { // Arrange var registerViewModel = new RegisterViewModel(); var registerQueryParameters = new RegisterQueryParameters(); _sut.ModelState.AddModelError("Username", "Username is required"); // Act var result = await _sut.Register(registerViewModel, registerQueryParameters); // Assert result.Should().BeOfType <BadRequestObjectResult>(); }
public async Task Given_An_Invalid_ModelState_Should_Not_Invoke_CreateAsync_Method() { // Arrange var registerViewModel = new RegisterViewModel(); var registerQueryParameters = new RegisterQueryParameters(); _sut.ModelState.AddModelError("Username", "Username is required"); // Act await _sut.Register(registerViewModel, registerQueryParameters); // Assert await _userManager.DidNotReceive().CreateAsync(Arg.Any <ApplicationUser>()); }
public async Task Given_An_Invalid_ModelState_Should_Return_BadRequestResult_With_Errors() { // Arrange const string expected = "Username is required"; var registerViewModel = new RegisterViewModel(); var registerQueryParameters = new RegisterQueryParameters(); _sut.ModelState.AddModelError("Username", "Username is required"); // Act var result = await _sut.Register(registerViewModel, registerQueryParameters) as BadRequestObjectResult; // Assert result.Should().BeOfType <BadRequestObjectResult>(); var errors = result?.Value as IEnumerable <string>; errors.Should().ContainSingle(expected); }
public async Task Given_A_Valid_User_Should_Invoke_SignInAsync_Once() { // Arrange var registerViewModel = new RegisterViewModel { Email = "*****@*****.**", Password = "******", Username = "******" }; var registerQueryParameters = new RegisterQueryParameters { ReturnUrl = "/" }; _userManager.CreateAsync(Arg.Any <ApplicationUser>(), Arg.Any <string>()).Returns(IdentityResult.Success); var request = Substitute.For <HttpRequest>(); request.Scheme.Returns("http"); _sut.ControllerContext = new ControllerContext(); _sut.ControllerContext.HttpContext = new DefaultHttpContext(); var urlHelper = Substitute.For <IUrlHelper>(); urlHelper.Action(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <object>(), Arg.Any <string>()).Returns("callback"); _sut.Url = urlHelper; _jwtSettings.Value.Returns(new JwtSettings { Key = "*@thu}qx)@h0-kI9%$](^l~xuFK>TL,%$EI", Issuer = "issue" }); _userManager.GetClaimsAsync(Arg.Any <ApplicationUser>()).Returns(new List <Claim>()); _userManager.GetRolesAsync(Arg.Any <ApplicationUser>()).Returns(new List <string>()); _userManager.GenerateEmailConfirmationTokenAsync(Arg.Any <ApplicationUser>()).Returns(@"H!Y7/Q}9I%J61aIn|Z.ouTvY.*@thu}qx)@h0-kI9%$](^l~xuFK>TL,%$EI_|7?"); // Act await _sut.Register(registerViewModel, registerQueryParameters); // Assert await _signInManager.Received(1).SignInAsync(Arg.Any <ApplicationUser>(), Arg.Any <bool>()); }
public async Task <IActionResult> Register([FromBody] RegisterViewModel model, [FromQuery] RegisterQueryParameters queryParameters) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Username, Email = model.Email, FullName = model.Username }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme, queryParameters.ReturnUrl); await _mediator.Send(new SendRegistrationEmailCommand { Email = model.Email, CallBackUrl = callbackUrl, Username = user.FullName }); await _userManager.AddToRoleAsync(user, ApplicationRoles.RoleUser); await _signInManager.SignInAsync(user, false); return(Ok(new { token = await BuildToken(user), user = new { user.Id, Name = user.FullName, user.ProfileImageUrl } })); } return(BadRequest(result.Errors.Descriptions())); } return(BadRequest(ModelState.Errors())); }