Example #1
0
        public async Task Given_A_Valid_ResetPassword_Credentials_If_ResetPassword_Fails_Should_Return_BadRequestResult()
        {
            // Arrange
            const string expected = "Reset password code expired.";

            var resetPasswordViewModel = new ResetPasswordViewModel
            {
                Email    = "*****@*****.**",
                Password = "******"
            };

            var resetPasswordQueryParameters = new ResetPasswordQueryParameters();

            _userManager.FindByEmailAsync(Arg.Any <string>()).Returns(new ApplicationUser());
            _userManager.ResetPasswordAsync(Arg.Any <ApplicationUser>(), Arg.Any <string>(), Arg.Any <string>()).Returns(IdentityResult.Failed(new IdentityError
            {
                Description = "Reset password code expired."
            }));

            // Act
            var result = await _sut.ResetPassword(resetPasswordViewModel, resetPasswordQueryParameters) as BadRequestObjectResult;

            // Assert
            result.Should().BeOfType <BadRequestObjectResult>();
            var errors = result?.Value as IEnumerable <string>;

            errors.Should().ContainSingle(expected);
        }
Example #2
0
        public async Task Given_An_Invalid_ModelState_Should_Return_BadRequestResult()
        {
            // Arrange
            var resetPasswordViewModel       = new ResetPasswordViewModel();
            var resetPasswordQueryParameters = new ResetPasswordQueryParameters();

            _sut.ModelState.AddModelError("Email", "Email is required");

            // Act
            var result = await _sut.ResetPassword(resetPasswordViewModel, resetPasswordQueryParameters);

            // Assert
            result.Should().BeOfType <BadRequestObjectResult>();
        }
Example #3
0
        public async Task Given_A_Valid_Email_If_User_Does_Not_Exist_Should_Return_OkResult()
        {
            // Arrange
            var resetPasswordViewModel = new ResetPasswordViewModel
            {
                Email = "*****@*****.**",
            };

            var resetPasswordQueryParameters = new ResetPasswordQueryParameters();

            _userManager.FindByEmailAsync(Arg.Any <string>()).Returns((ApplicationUser)null);

            // Act
            var result = await _sut.ResetPassword(resetPasswordViewModel, resetPasswordQueryParameters) as OkResult;

            // Assert
            result.Should().BeOfType <OkResult>();
        }
Example #4
0
        public async Task Given_An_Invalid_ModelState_Should_Return_BadRequestResult_With_Errors()
        {
            // Arrange
            const string expected = "Email is required";

            var resetPasswordViewModel       = new ResetPasswordViewModel();
            var resetPasswordQueryParameters = new ResetPasswordQueryParameters();

            _sut.ModelState.AddModelError("Email", "Email is required");

            // Act
            var result = await _sut.ResetPassword(resetPasswordViewModel, resetPasswordQueryParameters) as BadRequestObjectResult;

            // Assert
            result.Should().BeOfType <BadRequestObjectResult>();
            var errors = result?.Value as IEnumerable <string>;

            errors.Should().ContainSingle(expected);
        }
Example #5
0
        public async Task Given_A_Valid_ResetPassword_Credentials_If_ResetPassword_Succeeds_Should_Invoke_ResetPasswordAsync_Once()
        {
            // Arrange
            var resetPasswordViewModel = new ResetPasswordViewModel
            {
                Email    = "*****@*****.**",
                Password = "******"
            };

            var resetPasswordQueryParameters = new ResetPasswordQueryParameters();

            _userManager.FindByEmailAsync(Arg.Any <string>()).Returns(new ApplicationUser());
            _userManager.ResetPasswordAsync(Arg.Any <ApplicationUser>(), Arg.Any <string>(), Arg.Any <string>()).Returns(IdentityResult.Success);

            // Act
            await _sut.ResetPassword(resetPasswordViewModel, resetPasswordQueryParameters);

            // Assert
            await _userManager.Received(1).ResetPasswordAsync(Arg.Any <ApplicationUser>(), Arg.Any <string>(), Arg.Any <string>());
        }
Example #6
0
        public async Task <IActionResult> ResetPassword([FromBody] ResetPasswordViewModel model, [FromQuery] ResetPasswordQueryParameters queryParameters)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByEmailAsync(model.Email);

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

                var result = await _userManager.ResetPasswordAsync(user, WebUtility.UrlDecode(queryParameters.Code), model.Password);

                if (result.Succeeded)
                {
                    return(Ok());
                }

                return(BadRequest(result.Errors.Descriptions()));
            }

            return(BadRequest(ModelState.Errors()));
        }