public async void EnvieEmailAsyncTest_deve_chamar_DisconnectAsync()
        {
            ConfigureSmtpMock();
            var email                 = GetEmail();
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            await servicoDeEnvioDeEmail.EnvieEmailAsync(configuracaoSmtp, email, _smtpMock.Object);

            _smtpMock.Verify(s => s.DisconnectAsync(It.IsAny <bool>()), Times.Once);
        }
        public void EnvieEmailAsyncTest_deve_retornar_excecao_quando_ocorrer_algum_erro_no_envio_do_email()
        {
            ConfigureSmtpMockComErro();
            var email                 = GetEmail();
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            var ex = Assert.ThrowsAsync <EnvioDeEmailException>(() => servicoDeEnvioDeEmail.EnvieEmailAsync(configuracaoSmtp, email, _smtpMock.Object));

            Assert.Equal("Erro ao enviar o e-mail.", ex.Result.Message);
        }
        public async void EnvieEmailAsyncTest_nao_deve_chamar_AuthenticateAsync_quando_nao_requer_autenticacao()
        {
            ConfigureSmtpMock();
            var email                 = GetEmail();
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            await servicoDeEnvioDeEmail.EnvieEmailAsync(configuracaoSmtp, email, _smtpMock.Object);

            _smtpMock.Verify(s => s.AuthenticateAsync(It.IsAny <string>(), It.IsAny <string>()), Times.Never);
        }
        public void EnvieEmailAsyncTest_deve_retornar_excecao_quando_email_de_destino_nao_informado()
        {
            ConfigureSmtpMock();
            var email = GetEmail();

            email.Destino = string.Empty;
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            var ex = Assert.ThrowsAsync <ArgumentException>(() => servicoDeEnvioDeEmail.EnvieEmailAsync(configuracaoSmtp, email, _smtpMock.Object));

            Assert.Equal("E-mail de destino não informado.", ex.Result.Message);
        }
        public void EnvieEmailAsyncTest_deve_retornar_excecao_quando_nenhum_conteudo_for_informado()
        {
            ConfigureSmtpMock();
            var email = GetEmail();

            email.MensagemDeTexto = string.Empty;
            email.MensagemHtml    = string.Empty;
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            var ex = Assert.ThrowsAsync <ArgumentException>(() => servicoDeEnvioDeEmail.EnvieEmailAsync(configuracaoSmtp, email, _smtpMock.Object));

            Assert.Equal("Nenhuma mensagem foi informada.", ex.Result.Message);
        }
        public async void EnvieEmailsAsyncTest_deve_chamar_SendAsync()
        {
            ConfigureSmtpMock();
            var emails = new List <IEmail> {
                GetEmail(),
                GetEmail(),
                GetEmail()
            };
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            await servicoDeEnvioDeEmail.EnvieEmailsAsync(configuracaoSmtp, emails, _smtpMock.Object);

            _smtpMock.Verify(s => s.SendAsync(It.IsAny <MimeMessage>()), Times.Exactly(3));
        }
        public async void EnvieEmailsAsyncTest_deve_chamar_ConnectAsync()
        {
            ConfigureSmtpMock();
            var emails = new List <IEmail> {
                GetEmail(),
                GetEmail(),
                GetEmail()
            };
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            await servicoDeEnvioDeEmail.EnvieEmailsAsync(configuracaoSmtp, emails, _smtpMock.Object);

            _smtpMock.Verify(s => s.ConnectAsync(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <bool>()), Times.Once);
        }
        public void EnvieEmailsAsyncTest_deve_retornar_excecao_quando_assunto_nao_informado()
        {
            ConfigureSmtpMock();
            var emails = new List <IEmail> {
                GetEmail(),
                GetEmail(),
                GetEmail()
            };

            emails[0].Assunto = string.Empty;
            var configuracaoSmtp      = GetConfiguracaoSmtp();
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            var ex = Assert.ThrowsAsync <ArgumentException>(() => servicoDeEnvioDeEmail.EnvieEmailsAsync(configuracaoSmtp, emails, _smtpMock.Object));

            Assert.Equal("Assunto não informado.", ex.Result.Message);
        }
        public async void EnvieEmailsAsyncTest_deve_chamar_AuthenticateAsync_quando_requer_autenticacao()
        {
            ConfigureSmtpMock();
            var emails = new List <IEmail> {
                GetEmail(),
                GetEmail(),
                GetEmail()
            };
            var configuracaoSmtp = GetConfiguracaoSmtp();

            configuracaoSmtp.RequerAutenticacao = true;
            var servicoDeEnvioDeEmail = new ServicoDeEnvioDeEmail();

            await servicoDeEnvioDeEmail.EnvieEmailsAsync(configuracaoSmtp, emails, _smtpMock.Object);

            _smtpMock.Verify(s => s.AuthenticateAsync(It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }