public void ForgotUserPasswordCommandHandler_Does_Nothing_For_Nonexistent_User()
        {
            var handler = new ForgotUserPasswordCommandHandler(_repository, _mailClient, new PasswordResetMailTemplate(_appSettings));
            var command = new ForgotUserPasswordCommand("*****@*****.**");

            var result = handler.Execute(command);

            result.Success.Should().BeTrue();
            _mailClient.SentMessages.Should().BeEmpty();
        }
        public void ForgotUserPasswordCommandHandler_Succeeds()
        {
            var handler = new ForgotUserPasswordCommandHandler(_repository, _mailClient, new PasswordResetMailTemplate(_appSettings));
            var command = new ForgotUserPasswordCommand("*****@*****.**");
            var user    = Substitute.For <User>();

            user.Email.Returns("*****@*****.**");
            user.Password.Returns(new Password("test"));
            user.Status.Returns(UserStatus.Active);

            _context.Users.Add(user);

            var result = handler.Execute(command);

            result.Success.Should().BeTrue();
            user.Received().GeneratePasswordResetToken();
            user.DidNotReceive().PasswordResetRequestFailed();
        }
        public void ForgotUserPasswordCommandHandler_Sends_Email()
        {
            var handler = new ForgotUserPasswordCommandHandler(_repository, _mailClient, new PasswordResetMailTemplate(_appSettings));
            var command = new ForgotUserPasswordCommand("*****@*****.**");
            var user    = Substitute.For <User>();

            user.Email.Returns("*****@*****.**");
            user.Password.Returns(new Password("test"));
            user.Status.Returns(UserStatus.Active);

            _context.Users.Add(user);

            handler.Execute(command);

            _mailClient.SentMessages.Should().HaveCount(1);
            _mailClient.SentMessages[0].Subject.Should().Be("Your password reset request");
            _mailClient.SentMessages[0].To.Should().Be("*****@*****.**");
        }