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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
 public Task <TokenDto> ExternalSignInAsync(ExternalSignInDto loginDto)
 {
     return(_httpService.PostForResultAsync <TokenDto>("Auth/ExternalSignIn", loginDto));
 }