public async Task ExternalSignIn_WhenEmailExistsAndUserNotActive_CallsCreateDeleteAndReturnsOkWithToken() { // Arrange var login = new ExternalSignInDto() { Email = "*****@*****.**" }; _mockUserManager.Setup(m => m.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(_userWithNotConfirmedEmail); _mockSignInManager.Setup(m => m.CanSignInAsync(It.IsAny <ApplicationUser>())).ReturnsAsync(false); _mockUserManager.Setup(m => m.CreateAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>())) .Callback <ApplicationUser, string>((u, s) => { u.Id = "AAAAAAAA"; }) .ReturnsAsync(IdentityResult.Success); // Act var result = await _sut.ExternalSignIn(login); // Assert _mockUserManager.Verify(m => m.DeleteAsync(It.IsAny <ApplicationUser>())); _mockUserManager.Verify(m => m.CreateAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>())); var okResult = Assert.IsAssignableFrom <OkObjectResult>(result); var token = Assert.IsAssignableFrom <TokenDto>(okResult.Value); Assert.NotNull(token); Assert.NotNull(token.Value); }
public async Task <IActionResult> ExternalSignIn([FromBody] ExternalSignInDto register) { try { if (!ModelState.IsValid) { return(BadRequest()); } ApplicationUser user; user = await _userManager.FindByEmailAsync(register.Email); if (user == null) { user = ApplicationUser.NewExternalUser(register.Email); var result = await _userManager.CreateAsync(user, GetRandomString()); if (!result.Succeeded) { return(BadRequest()); } } else { if (!await _signInManager.CanSignInAsync(user)) { await _userManager.DeleteAsync(user); var newUser = ApplicationUser.NewExternalUser(register.Email); await _userManager.CreateAsync(newUser, GetRandomString()); return(OkWithToken(newUser)); } } return(OkWithToken(user)); } catch (Exception ex) { _logger.LogError("Threw exception while Signing In External User: {@ex}", ex); return(new StatusCodeResult(500)); } }
public async Task ExternalSignIn_WhenEmailNotExists_CallsCreateAndReturnsOkWithToken() { // Arrange var login = new ExternalSignInDto() { Email = "*****@*****.**" }; _mockUserManager.Setup(m => m.FindByEmailAsync(It.IsAny <string>())).ReturnsAsync(null as ApplicationUser); _mockSignInManager .Setup(m => m.PasswordSignInAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>())) .ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.Success); _mockUserManager.Setup(m => m.CreateAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>())) .Callback <ApplicationUser, string>((u, s) => { u.Id = "AAAAAAAA"; u.Email = "*****@*****.**"; u.UserName = "******"; }) .ReturnsAsync(IdentityResult.Success); // Act var result = await _sut.ExternalSignIn(login); // Assert _mockUserManager.Verify(m => m.CreateAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>())); var okResult = Assert.IsAssignableFrom <OkObjectResult>(result); var token = Assert.IsAssignableFrom <TokenDto>(okResult.Value); Assert.NotNull(token); Assert.NotNull(token.Value); }
public Task <TokenDto> ExternalSignInAsync(ExternalSignInDto loginDto) { return(_httpService.PostForResultAsync <TokenDto>("Auth/ExternalSignIn", loginDto)); }