public void Should_send_forgotten_password_email_when_email_address_exists()
        {
            MailMessage forgottenPasswordEmail = new MailMessage();

            MockRepository mocks = new MockRepository();
            ISystemUser    user  = mocks.CreateMock <ISystemUser>();
            IForgottenPasswordMailFactory mailFactory      = mocks.CreateMock <IForgottenPasswordMailFactory>();
            ISystemUserRepository         repository       = mocks.CreateMock <ISystemUserRepository>();
            IEncryptionEngine             encryptionEngine = mocks.CreateMock <IEncryptionEngine>();
            IMailSender sender = mocks.CreateMock <IMailSender>();

            using (mocks.Record())
            {
                Expect.Call(repository.GetByEmailAddress("*****@*****.**")).Return(user);
                Expect.Call(user.Password).Return("encryptedPassword");
                Expect.Call(encryptionEngine.Decrypt("encryptedPassword")).Return("clearTextPassword");

                Expect.Call(mailFactory.CreateEmail("*****@*****.**", "clearTextPassword")).Return(forgottenPasswordEmail);

                sender.SendMail(forgottenPasswordEmail);
            }

            using (mocks.Playback())
            {
                IForgottenPasswordMailer mailer = new ForgottenPasswordMailer(encryptionEngine, mailFactory, sender);
                bool emailWasSent = mailer.SendForgottenPasswordEmail("*****@*****.**", repository);
                Assert.That(emailWasSent);
            }

            mocks.VerifyAll();
        }
        public void Should_not_send_forgotten_password_email_when_email_address_does_not_exist()
        {
            MockRepository        mocks      = new MockRepository();
            ISystemUserRepository repository = mocks.CreateMock <ISystemUserRepository>();

            using (mocks.Record())
            {
                Expect.Call(repository.GetByEmailAddress("*****@*****.**")).Return(null);
            }

            using (mocks.Playback())
            {
                IForgottenPasswordMailer mailer = new ForgottenPasswordMailer(null, null, null);
                bool emailWasSent = mailer.SendForgottenPasswordEmail("*****@*****.**", repository);
                Assert.That(emailWasSent, Is.False);
            }

            mocks.VerifyAll();
        }