Beispiel #1
0
        public async Task <SendEmail.Response> Handle(SendEmail request, CancellationToken cancellationToken)
        {
            var content = await _communicationContentGenerator.GenerateContent(request.TemplateName, request.DataObjects);

            var emailCommunication = new EmailCommunication
            {
                Name         = request.TemplateName,
                EmailAddress = request.EmailAddress,
                Content      = content,
                ParentId     = request.ParentId,
                Status       = EmailCommunicationStatus.Pending,
            };

            var emailCommunicationId = await _communicationRepository.CreateEmail(emailCommunication);

            EmailCommunicationStatus postSendStatus;

            try
            {
                await _emailService.Send(emailCommunication);

                postSendStatus = EmailCommunicationStatus.Sent;
            }
            catch (Exception)
            {
                // TODO: Log the exception

                postSendStatus = EmailCommunicationStatus.Failed;
            }

            await _communicationRepository.UpdateEmailStatus(emailCommunicationId, postSendStatus);

            // TODO: Return the postSendStatus with the response
            return(new SendEmail.Response());
        }
Beispiel #2
0
        public async void Can_update_email_status()
        {
            // Arrange

            var emailCommunication = new EmailCommunication
            {
                Status = EmailCommunicationStatus.Pending
            };

            var sut = new CommunicationRepository();

            // Act

            var emailCommunicationId = await sut.CreateEmail(emailCommunication);

            var retrievedEmailCommunication = await sut.RetrieveEmail(emailCommunicationId);

            Assert.Equal(EmailCommunicationStatus.Pending, retrievedEmailCommunication.Status);

            await sut.UpdateEmailStatus(retrievedEmailCommunication.Id, EmailCommunicationStatus.Sent);

            var updatedEmailCommunication = await sut.RetrieveEmail(emailCommunicationId);

            // Assert

            Assert.Equal(EmailCommunicationStatus.Sent, updatedEmailCommunication.Status);
        }
Beispiel #3
0
        public Task <string> CreateEmail(EmailCommunication emailCommunication)
        {
            emailCommunication.Id = emailCommunication.Id ?? Guid.NewGuid().ToString();

            _emailCommunications.Add(emailCommunication.Id, emailCommunication);

            return(Task.FromResult(emailCommunication.Id));
        }
Beispiel #4
0
 public void Setup()
 {
     _communicationService = new Mock <ICommunicationRepository>();
     _personService        = new Mock <IPersonService>();
     _contactService       = new Mock <IContactRepository>();
     _configurationWrapper = new Mock <IConfigurationWrapper>();
     _configurationWrapper.Setup(mock => mock.GetConfigIntValue("DefaultContactEmailId")).Returns(5);
     fixture = new EmailCommunication(_communicationService.Object, _personService.Object, _contactService.Object, _configurationWrapper.Object);
 }
Beispiel #5
0
        public Task Send(EmailCommunication emailCommunication)
        {
            var fileName = $"{emailCommunication.Id}-{emailCommunication.Name}-{emailCommunication.EmailAddress}.txt";

            var filePath = Path.Combine(_outputDirectory, fileName);

            File.WriteAllText(filePath, emailCommunication.Content);

            return(Task.CompletedTask);
        }
Beispiel #6
0
        public async void Can_create_and_retrieve_email_communication()
        {
            // Arrange

            var emailCommunication = new EmailCommunication
            {
                EmailAddress = "*****@*****.**"
            };

            var sut = new CommunicationRepository();

            // Act

            var emailCommunicationId = await sut.CreateEmail(emailCommunication);

            var retrievedEmailCommunication = await sut.RetrieveEmail(emailCommunicationId);

            // Assert

            Assert.Equal(emailCommunication.EmailAddress, retrievedEmailCommunication.EmailAddress);
        }
Beispiel #7
0
        public async void Can_send_email()
        {
            // Arrange

            var outputDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "EmailServiceTests", "Can_send_email");

            var emailCommunication = new EmailCommunication
            {
                Id           = Guid.NewGuid().ToString(),
                Name         = "TestEmail",
                EmailAddress = "*****@*****.**",
                Content      = "Hello!"
            };

            var sut = new EmailService(outputDirectory);

            // Act

            await sut.Send(emailCommunication);

            // Assert

            Assert.Single(Directory.GetFiles(outputDirectory));
        }