public async Task Then_Add_To_Failed_Queue_If_Status_Is_Not_Delivered( string status, MatchingConfiguration configuration, IEmailService emailService, IOpportunityRepository opportunityRepository, IMessageQueueService messageQueueService, ILogger <Application.Services.EmailDeliveryStatusService> logger, EmailDeliveryStatusPayLoad payload ) { //Arrange payload.Status = status; var sut = new Application.Services.EmailDeliveryStatusService(configuration, emailService, opportunityRepository, messageQueueService, logger); var serializedPayLoad = JsonConvert.SerializeObject(payload); //Act await sut.HandleEmailDeliveryStatusAsync(serializedPayLoad); //Assert await emailService.Received(1).UpdateEmailStatus(Arg.Is <EmailDeliveryStatusPayLoad>(data => data.Status == status)); await messageQueueService.Received(1).PushEmailDeliveryStatusMessageAsync(Arg.Any <SendEmailDeliveryStatus>()); }
public async Task Then_Update_Email_History_With_Status( string status, MatchingConfiguration configuration, IEmailService emailService, IOpportunityRepository opportunityRepository, IMessageQueueService messageQueueService, ILogger <Application.Services.EmailDeliveryStatusService> logger, EmailDeliveryStatusPayLoad payload ) { //Arrange var sut = new Application.Services.EmailDeliveryStatusService(configuration, emailService, opportunityRepository, messageQueueService, logger); payload.Status = status; var serializedPayLoad = JsonConvert.SerializeObject(payload); emailService.UpdateEmailStatus(Arg.Any <EmailDeliveryStatusPayLoad>()).Returns(1); //Act var emailCount = await sut.HandleEmailDeliveryStatusAsync(serializedPayLoad); //Assert emailCount.Should().Be(1); await emailService.Received(1).UpdateEmailStatus(Arg.Any <EmailDeliveryStatusPayLoad>()); await emailService.Received(1).UpdateEmailStatus(Arg.Is <EmailDeliveryStatusPayLoad>(data => data.Status == status)); }
public async Task Then_Do_Not_Update_Email_History_If_PayLoad_Is_Null_Or_Empty( string payload, MatchingConfiguration configuration, IRepository <Domain.Models.EmailHistory> emailHistoryRepository, IEmailService emailService, IOpportunityRepository opportunityRepository, IMessageQueueService messageQueueService, ILogger <Application.Services.EmailDeliveryStatusService> logger, Domain.Models.EmailHistory emailHistory ) { //Arrange emailHistoryRepository .GetFirstOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.EmailHistory, bool> > >()) .Returns(emailHistory); var sut = new Application.Services.EmailDeliveryStatusService(configuration, emailService, opportunityRepository, messageQueueService, logger); //Act var result = await sut.HandleEmailDeliveryStatusAsync(payload); //Assert result.Should().Be(-1); await emailHistoryRepository.DidNotReceive().GetFirstOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.EmailHistory, bool> > >()); await emailHistoryRepository.DidNotReceive().UpdateWithSpecifiedColumnsOnlyAsync( Arg.Any <Domain.Models.EmailHistory>(), Arg.Any <Expression <Func <Domain.Models.EmailHistory, object> >[]>()); await messageQueueService.DidNotReceive().PushEmailDeliveryStatusMessageAsync(Arg.Any <SendEmailDeliveryStatus>()); }
public async Task Then_Do_Not_Update_Email_History_If_Notification_Id_Does_Not_Exists_In_Callback_PayLoad( string status, MatchingConfiguration configuration, IEmailService emailService, IOpportunityRepository opportunityRepository, IMessageQueueService messageQueueService, ILogger <Application.Services.EmailDeliveryStatusService> logger, EmailDeliveryStatusPayLoad payload ) { //Arrange payload.Id = Guid.Empty; payload.Status = status; var sut = new Application.Services.EmailDeliveryStatusService(configuration, emailService, opportunityRepository, messageQueueService, logger); var serializedPayLoad = JsonConvert.SerializeObject(payload); emailService.UpdateEmailStatus(Arg.Any <EmailDeliveryStatusPayLoad>()).Returns(-1); //Act var result = await sut.HandleEmailDeliveryStatusAsync(serializedPayLoad); //Assert result.Should().Be(-1); await emailService.Received(1).UpdateEmailStatus(Arg.Is <EmailDeliveryStatusPayLoad>(data => data.Status == status)); await messageQueueService.DidNotReceive().PushEmailDeliveryStatusMessageAsync(Arg.Any <SendEmailDeliveryStatus>()); }
public When_EmailDeliveryStatusService_Is_Called_To_Send_Email_With_Invalid_Email_And_No_Opportunity() { var configuration = new MatchingConfiguration { MatchingServiceSupportEmailAddress = SupportEmailAddress }; var logger = Substitute.For <ILogger <Application.Services.EmailDeliveryStatusService> >(); _emailService = Substitute.For <IEmailService>(); _emailService.GetEmailBodyFromNotifyClientAsync(_notificationId).Returns( new EmailDeliveryStatusDto { Body = "Body", Subject = "Subject", EmailDeliveryStatusType = EmailDeliveryStatusType.PermanentFailure }); _emailService.GetEmailHistoryAsync(_notificationId).Returns( new EmailHistoryDto { NotificationId = _notificationId, OpportunityId = null, OpportunityItemId = null, SentTo = "*****@*****.**", Status = "permanent-failure", EmailTemplateId = 11, EmailTemplateName = "EmployerAupaBlank", CreatedBy = "CreatedBy" }); var messageQueueService = Substitute.For <IMessageQueueService>(); _opportunityRepository = Substitute.For <IOpportunityRepository>(); _opportunityRepository.GetEmailDeliveryStatusForEmployerAsync(1, "*****@*****.**").Returns( new EmailBodyDtoBuilder() .AddEmployerEmail().Build()); var emailDeliveryStatusService = new Application.Services.EmailDeliveryStatusService(configuration, _emailService, _opportunityRepository, messageQueueService, logger); emailDeliveryStatusService.SendEmailDeliveryStatusAsync(_notificationId).GetAwaiter().GetResult(); }
public When_EmailDeliveryStatusService_Is_Called_To_Send_Email_With_Inbox_Full() { var configuration = new MatchingConfiguration { MatchingServiceSupportEmailAddress = "*****@*****.**" }; var logger = Substitute.For <ILogger <Application.Services.EmailDeliveryStatusService> >(); _emailService = Substitute.For <IEmailService>(); _emailService.GetEmailBodyFromNotifyClientAsync(_notificationId).Returns( new EmailDeliveryStatusDto { Body = "Body", Subject = "Subject", EmailDeliveryStatusType = EmailDeliveryStatusType.TemporaryFailure }); _emailService.GetEmailHistoryAsync(_notificationId).Returns( new EmailHistoryDto { NotificationId = _notificationId, OpportunityId = OpportunityId, OpportunityItemId = OpportunityItemId, SentTo = "*****@*****.**", Status = "unknown-failure", EmailTemplateId = 7, EmailTemplateName = "ProviderReferralV5", CreatedBy = "CreatedBy" }); var messageQueueService = Substitute.For <IMessageQueueService>(); _opportunityRepository = Substitute.For <IOpportunityRepository>(); _opportunityRepository.GetEmailDeliveryStatusForProviderAsync(OpportunityId, "*****@*****.**").Returns( new EmailBodyDtoBuilder().AddProviderEmail().Build()); var emailDeliveryStatusService = new Application.Services.EmailDeliveryStatusService(configuration, _emailService, _opportunityRepository, messageQueueService, logger); emailDeliveryStatusService.SendEmailDeliveryStatusAsync(_notificationId).GetAwaiter().GetResult(); }