예제 #1
0
        public async Task <IActionResult> SendPasswordResetEmail([FromBody] SendPasswordResetEmailDto dto)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                var user = await _userManager.FindByEmailAsync(dto.Email);

                if (user == null)
                {
                    return(BadRequest());
                }

                await SendPasswordResetEmaiAsync(user);

                return(Ok());
            }
            catch (Exception ex)
            {
                _logger.LogError("Threw exception while sending password reset code for user: {@ex}", ex);
                return(new StatusCodeResult(500));
            }
        }
        public async Task SendPasswordResetEmail_WhenInvalidEmail_ReturnsBadRequest()
        {
            // Arrange
            string email = "*****@*****.**";
            string code  = "0";

            var dto = new SendPasswordResetEmailDto()
            {
                Email = email
            };

            _mockUserManager
            .Setup(m => m.FindByEmailAsync(It.IsAny <string>()))
            .ReturnsAsync(null as ApplicationUser);

            // Act
            var result = await _sut.SendPasswordResetEmail(dto);

            // Assert
            _mockUserManager.Verify(m => m.GeneratePasswordResetTokenAsync(_user), Times.Never);
            _mockEmailSender.Verify(s => s.SendEmailAsync(It.IsAny <string>()
                                                          , It.IsAny <string>()
                                                          , It.Is <string>(m => m.Contains(code))), Times.Never);

            Assert.IsAssignableFrom <BadRequestResult>(result);
        }
        public async Task SendPasswordResetEmail_WhenCalledWithValidArgs_GeneratesTokenAndCallsEmailSenderWithToken()
        {
            // Arrange
            string email = "*****@*****.**";
            string code  = "0";

            var dto = new SendPasswordResetEmailDto()
            {
                Email = email
            };

            _mockUserManager
            .Setup(m => m.FindByEmailAsync(It.IsAny <string>()))
            .ReturnsAsync(_user);

            _mockUserManager
            .Setup(m => m.GeneratePasswordResetTokenAsync(It.IsAny <ApplicationUser>()))
            .ReturnsAsync(code);

            // Act
            var result = await _sut.SendPasswordResetEmail(dto);

            // Assert
            _mockUserManager.Verify(m => m.GeneratePasswordResetTokenAsync(_user));
            _mockEmailSender.Verify(s => s.SendEmailAsync(It.IsAny <string>()
                                                          , It.IsAny <string>()
                                                          , It.Is <string>(m => m.Contains(code))));

            Assert.IsAssignableFrom <OkResult>(result);
        }
예제 #4
0
 public Task <HttpResponseMessage> SendPasswordResetEmailAsync(SendPasswordResetEmailDto dto)
 {
     return(_httpService.PostAsync($"Auth/SendPasswordResetEmail", dto));
 }