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()); }
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); }
public Task <string> CreateEmail(EmailCommunication emailCommunication) { emailCommunication.Id = emailCommunication.Id ?? Guid.NewGuid().ToString(); _emailCommunications.Add(emailCommunication.Id, emailCommunication); return(Task.FromResult(emailCommunication.Id)); }
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); }
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); }
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); }
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)); }