Beispiel #1
0
        public void RetryWorksAsExpected()
        {
            // --- Arrange
            var service    = ServiceManager.GetService <IEmailComposerService>();
            var sendertask = new EmailSenderTask();

            ServiceManager.RemoveService(typeof(IEmailSender));
            ServiceManager.Register <IEmailSender, EmailSenderWithRetry>();
            for (var i = 0; i < 5; i++)
            {
                var request = new EmailDefinitionDto
                {
                    FromAddr     = "*****@*****.**",
                    FromName     = "You",
                    ToAddr       = "*****@*****.**",
                    TemplateType = "MeetingProposed",
                    Parameters   = new Dictionary <string, string> {
                        { "FullName", "MyName" }
                    },
                    SendAfterUtc = null
                };
                service.SendEmail(request);
            }

            // --- Act
            FakeConfigurationReader.SetConfigurationValue("SmtpConfig", "EmailCount", "4");
            FakeConfigurationReader.SetConfigurationValue("SmtpConfig", "MaxRetry", "3");
            EmailSenderWithRetry.ForceFailure = true;

            sendertask.Setup(new EmailTaskExecutionContext());
            sendertask.Run();
            sendertask.Run();
            EmailSenderWithRetry.ForceFailure = false;
            sendertask.Run();

            // --- Assert
            var db           = new SqlDatabase(DB_CONN);
            var emailsToSend = db.Fetch <EmailToSendRecord>();

            emailsToSend.ShouldHaveCountOf(1);
            var emailsSent = db.Fetch <EmailSentRecord>();

            emailsSent.ShouldHaveCountOf(4);
            var emailsFailed = db.Fetch <EmailFailedRecord>();

            emailsFailed.ShouldHaveCountOf(0);

            foreach (var email in emailsSent)
            {
                email.Subject.ShouldEqual("Evaluation meeting proposed");
                email.Message.ShouldContain("MyName");
                email.Message.ShouldNotContain("FullName");
            }
        }
Beispiel #2
0
        public void EmailsFailWithUnknownTemplate()
        {
            // --- Arrange
            var service    = ServiceManager.GetService <IEmailComposerService>();
            var sendertask = new EmailSenderTask();

            ServiceManager.RemoveService(typeof(IEmailSender));
            ServiceManager.Register <IEmailSender, AlwaysWorkingEmailSender>();
            for (var i = 0; i < 5; i++)
            {
                var request = new EmailDefinitionDto
                {
                    FromAddr     = "*****@*****.**",
                    FromName     = "You",
                    ToAddr       = "*****@*****.**",
                    TemplateType = "Unknown",
                    Parameters   = new Dictionary <string, string> {
                        { "FullName", "MyName" }
                    },
                    SendAfterUtc = null
                };
                service.SendEmail(request);
            }

            // --- Act
            FakeConfigurationReader.SetConfigurationValue("SmtpConfig", "EmailCount", "4");
            FakeConfigurationReader.SetConfigurationValue("SmtpConfig", "MaxRetry", "0");
            sendertask.Setup(new EmailTaskExecutionContext());
            sendertask.Run();

            // --- Assert
            var db           = new SqlDatabase(DB_CONN);
            var emailsToSend = db.Fetch <EmailToSendRecord>();

            emailsToSend.ShouldHaveCountOf(1);
            var emailsSent = db.Fetch <EmailSentRecord>();

            emailsSent.ShouldHaveCountOf(0);
            var emailsFailed = db.Fetch <EmailFailedRecord>();

            emailsFailed.ShouldHaveCountOf(4);

            foreach (var email in emailsFailed)
            {
                email.Subject.ShouldBeNull();
                email.Message.ShouldBeNull();
                email.LastError.ShouldContain("not found");
            }
        }
        /// <summary>
        /// Sends the email in the definition
        /// </summary>
        /// <param name="email">email definition</param>
        public void SendEmail(EmailDefinitionDto email)
        {
            Verify.NotNull(email, "email");
            Verify.RaiseWhenFailed();
            Verify.NotNullOrEmpty(email.FromAddr, "FromAddr");
            Verify.NotNullOrEmpty(email.ToAddr, "ToAddr");
            Verify.NotNullOrEmpty(email.TemplateType, "TemplateType");
            Verify.RaiseWhenFailed();

            using (var ctx = DataAccessFactory.CreateContext <IEmailDataOperations>())
            {
                string parameters = null;
                if (email.Parameters != null)
                {
                    parameters = JsonConvert.SerializeObject(email.Parameters);
                }
                string appointment = null;
                if (email.Appointment != null)
                {
                    appointment = JsonConvert.SerializeObject(email.Appointment);
                }

                ctx.InsertEmailToSendAsync(new EmailToSendRecord
                {
                    FromAddr     = email.FromAddr,
                    FromName     = email.FromName,
                    ToAddr       = email.ToAddr,
                    TemplateType = email.TemplateType,
                    Parameters   = parameters,
                    Appointment  = appointment,
                    SendAfterUtc = email.SendAfterUtc,
                    RetryCount   = 0,
                    LastError    = null
                }).Wait();
            }
        }