public void ReturnBadRequest_WhenTokenInvalid_OnCallToUpdatePasswordUsingToken()
        {
            var model = new ResetTokenUpdateDto
            {
                UserId   = 1,
                Token    = Guid.NewGuid(),
                Password = "******"
            };

            var user = new UserDto
            {
                Id = 1
            };

            var userRepository = A.Fake <IUserRepository>();

            A.CallTo(() => userRepository.UserExists(model.UserId)).Returns(true);
            A.CallTo(() => userRepository.GetUser(model.UserId)).Returns(user);

            var userHelper = A.Fake <IUserHelper>();

            A.CallTo(() => userHelper.ValidResetToken(user, model.Token)).Returns(false);

            var controller = new AuthController(userRepository, userHelper, null);

            var response = controller.UpdatePasswordUsingToken(model);

            Assert.AreEqual((int)HttpStatusCode.BadRequest, ((BadRequestObjectResult)response.Result).StatusCode);
            Assert.AreEqual("Password reset token is not valid.", ((BadRequestObjectResult)response.Result).Value);
        }
        public void ReturnUserDto_WhenResetTokenValid_OnCallToUpdatePasswordUsingToken()
        {
            var model = new ResetTokenUpdateDto
            {
                UserId   = 1,
                Token    = Guid.NewGuid(),
                Password = "******"
            };

            var user = new UserDto
            {
                Id = 1
            };

            var userRepository = A.Fake <IUserRepository>();

            A.CallTo(() => userRepository.UserExists(model.UserId)).Returns(true);
            A.CallTo(() => userRepository.GetUser(model.UserId)).Returns(user);

            var userHelper = A.Fake <IUserHelper>();

            A.CallTo(() => userHelper.ValidResetToken(user, model.Token)).Returns(true);

            var controller = new AuthController(userRepository, userHelper, null);

            var response = controller.UpdatePasswordUsingToken(model);

            A.CallTo(() => userRepository.UpdatePasswordHash(model.UserId, A <string> .Ignored)).MustHaveHappened();
            A.CallTo(() => userRepository.SetPasswordResetFields(model.UserId, null, null)).MustHaveHappened();
            Assert.AreEqual(model.UserId, response.Value.Id);
        }
        public void ReturnBadRequest_WhenUserNotPresent_OnCallToUpdatePasswordUsingToken()
        {
            var model = new ResetTokenUpdateDto
            {
                UserId   = 1,
                Token    = Guid.NewGuid(),
                Password = "******"
            };

            var userRepository = A.Fake <IUserRepository>();

            A.CallTo(() => userRepository.UserExists(model.UserId)).Returns(false);

            var controller = new AuthController(userRepository, null, null);

            var response = controller.UpdatePasswordUsingToken(model);

            Assert.AreEqual((int)HttpStatusCode.BadRequest, ((BadRequestObjectResult)response.Result).StatusCode);
            Assert.AreEqual($"User with Id {model.UserId} does not exist.", ((BadRequestObjectResult)response.Result).Value);
        }