public async Task Then_Placements_List_Should_Be_Empty_If_Opp_Items_Not_Saved( MatchingDbContext dbContext, IDateTimeProvider dateTimeProvider, MapperConfiguration mapperConfiguration, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, [Frozen] IEmailService emailService, ILogger <OpportunityRepository> logger, ILogger <GenericRepository <BackgroundProcessHistory> > historyLogger, ILogger <GenericRepository <OpportunityItem> > itemLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger ) { //Arrange backgroundProcessHistory.Status = BackgroundProcessHistoryStatus.Pending.ToString(); await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory, false, false); var mapper = new Mapper(mapperConfiguration); var repo = new OpportunityRepository(logger, dbContext); var backgroundRepo = new GenericRepository <BackgroundProcessHistory>(historyLogger, dbContext); var itemRepo = new GenericRepository <OpportunityItem>(itemLogger, dbContext); var functionLogRepository = new GenericRepository <FunctionLog>(functionLogLogger, dbContext); var sut = new ReferralEmailService(mapper, dateTimeProvider, emailService, repo, itemRepo, backgroundRepo, functionLogRepository); var itemIds = itemRepo.GetManyAsync(oi => oi.Opportunity.Id == opportunity.Id && oi.IsSaved && oi.IsSelectedForReferral && !oi.IsCompleted).Select(oi => oi.Id); var expectedResult = await GetExpectedResult(repo, opportunity.Id, itemIds); //Act await sut.SendEmployerReferralEmailAsync(opportunity.Id, opportunity.OpportunityItem.Select(oi => oi.Id), backgroundProcessHistory.Id, "System"); //Assert await emailService.Received(1).SendEmailAsync(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <int?>(), Arg.Any <int?>(), Arg.Is <IDictionary <string, string> >(tokens => tokens.ContainsKey("placements_list") && tokens["placements_list"] == string.Empty), Arg.Any <string>()); await emailService.Received(1).SendEmailAsync(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <int?>(), Arg.Any <int?>(), Arg.Is <IDictionary <string, string> >(tokens => tokens.ContainsKey("placements_list") && tokens["placements_list"] == expectedResult), Arg.Any <string>()); }
public async Task Then_Do_Not_Update_Email_History_If_PayLoad_Is_Null_Or_Empty( string payload, MatchingDbContext dbContext, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] EmailHistory emailHistory, [Frozen] BackgroundProcessHistory backgroundProcessHistory, IMessageQueueService messageQueueService, MatchingConfiguration configuration, ILogger <OpportunityRepository> opportunityRepoLogger, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <EmailService> emailServiceLogger, ILogger <Application.Services.EmailDeliveryStatusService> emailDeliveryServiceStatusLogger, IAsyncNotificationClient notificationClient ) { //Arrange await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); dbContext.Add(emailHistory); await dbContext.SaveChangesAsync(); var sut = SutSetUp(dbContext, opportunityRepoLogger, emailTemplateLogger, emailHistoryLogger, functionLogLogger, emailDeliveryServiceStatusLogger, emailServiceLogger, notificationClient, configuration, messageQueueService); //Act var result = await sut.HandleEmailDeliveryStatusAsync(payload); //Assert result.Should().Be(-1); var existingData = dbContext.EmailHistory.Where(history => history.OpportunityId == opportunity.Id).ToList(); existingData.Select(history => history.ModifiedBy).Should().Equal(new List <string> { null, null }); existingData.Select(history => history.ModifiedOn).Should().Equal(new List <string> { null, null }); await messageQueueService.DidNotReceive().PushEmailDeliveryStatusMessageAsync(Arg.Any <SendEmailDeliveryStatus>()); }
public async Task Then_Do_Not_Send_Email_If_Template_Name_Is_Null( MatchingConfiguration configuration, [Frozen] MatchingDbContext dbContext, IAsyncNotificationClient notificationClient, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <EmailService> emailServiceLogger, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] OpportunityItem opportunityItem, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, EmailTemplate emailTemplate, EmailNotificationResponse emailNotificationResponse ) { //Arrange var(templateRepository, emailHistoryRepository, functionLogRepository, mapper) = SetUp(dbContext, emailTemplateLogger, emailHistoryLogger, functionLogLogger); var sut = new EmailService(configuration, notificationClient, templateRepository, emailHistoryRepository, functionLogRepository, mapper, emailServiceLogger); var tokens = new Dictionary <string, string> { { "contactname", "name" } }; notificationClient.SendEmailAsync(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <Dictionary <string, dynamic> >()).Returns(Task.FromResult(emailNotificationResponse)); await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); await DataBuilder.SetEmailTemplate(dbContext, emailTemplate); //Act await sut.SendEmailAsync("", "*****@*****.**", opportunity.Id, opportunityItem.Id, tokens, "System"); //Assert Guid.TryParse(emailNotificationResponse.id, out var notificationId); var emailHistory = dbContext.EmailHistory.AsNoTracking().FirstOrDefault(x => x.NotificationId == notificationId); emailHistory.Should().BeNull(); }
public async Task Then_Background_Process_History_Status_Is_Completed( MatchingDbContext dbContext, IDateTimeProvider dateTimeProvider, MapperConfiguration mapperConfiguration, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, [Frozen] IEmailService emailService, ILogger <OpportunityRepository> logger, ILogger <GenericRepository <BackgroundProcessHistory> > historyLogger, ILogger <GenericRepository <OpportunityItem> > itemLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger ) { //Arrange backgroundProcessHistory.Status = BackgroundProcessHistoryStatus.Pending.ToString(); await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); var mapper = new Mapper(mapperConfiguration); var repo = new OpportunityRepository(logger, dbContext); var backgroundRepo = new GenericRepository <BackgroundProcessHistory>(historyLogger, dbContext); var itemRepo = new GenericRepository <OpportunityItem>(itemLogger, dbContext); var functionLogRepository = new GenericRepository <FunctionLog>(functionLogLogger, dbContext); var sut = new ReferralEmailService(mapper, dateTimeProvider, emailService, repo, itemRepo, backgroundRepo, functionLogRepository); //Act await sut.SendEmployerReferralEmailAsync(opportunity.Id, opportunity.OpportunityItem.Select(oi => oi.Id), backgroundProcessHistory.Id, "System"); //Assert await emailService.Received(1).SendEmailAsync(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <int?>(), Arg.Any <int?>(), Arg.Any <IDictionary <string, string> >(), Arg.Any <string>()); var processStatus = dbContext.BackgroundProcessHistory .FirstOrDefault(history => history.Id == backgroundProcessHistory.Id) ?.Status; processStatus.Should().NotBe(BackgroundProcessHistoryStatus.Pending.ToString()); processStatus.Should().NotBe(BackgroundProcessHistoryStatus.Processing.ToString()); processStatus.Should().Be(BackgroundProcessHistoryStatus.Complete.ToString()); }
//[InlineData("Test", "Test")] public async Task AND_Secondary_Contact_Name_or_Email_Is_Invalid_Then_Send_Email_Is_NOT_Called( string secondaryContactName, string secondaryContactEmail, [Frozen] MatchingDbContext dbContext, IDateTimeProvider dateTimeProvider, [Frozen] Mapper mapper, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, [Frozen] IEmailService emailService, ILogger <OpportunityRepository> logger, ILogger <GenericRepository <BackgroundProcessHistory> > historyLogger, ILogger <GenericRepository <OpportunityItem> > itemLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger ) { //Arrange backgroundProcessHistory.Status = BackgroundProcessHistoryStatus.Pending.ToString(); provider.SecondaryContact = secondaryContactName; provider.SecondaryContactEmail = secondaryContactEmail; await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); var repo = new OpportunityRepository(logger, dbContext); var backgroundRepo = new GenericRepository <BackgroundProcessHistory>(historyLogger, dbContext); var itemRepo = new GenericRepository <OpportunityItem>(itemLogger, dbContext); var functionLogRepository = new GenericRepository <FunctionLog>(functionLogLogger, dbContext); var sut = new ReferralEmailService(mapper, dateTimeProvider, emailService, repo, itemRepo, backgroundRepo, functionLogRepository); //Act await sut.SendProviderReferralEmailAsync(opportunity.Id, opportunity.OpportunityItem.Select(oi => oi.Id), backgroundProcessHistory.Id, "System"); //Assert await emailService.Received(2).SendEmailAsync(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <int?>(), Arg.Any <int?>(), Arg.Is <IDictionary <string, string> >(tokens => tokens.ContainsKey("employer_business_name")), Arg.Any <string>()); }
public async Task Then_Update_Email_History_With_Delivery_Status( MatchingConfiguration configuration, [Frozen] MatchingDbContext dbContext, IAsyncNotificationClient notificationClient, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <EmailService> emailServiceLogger, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, EmailDeliveryStatusPayLoad payLoad, EmailHistory emailHistory ) { //Arrange var(templateRepositoryLogger, emailHistoryRepository, functionLogRepository, mapper) = SetUp(dbContext, emailTemplateLogger, emailHistoryLogger, functionLogLogger); var sut = new EmailService(configuration, notificationClient, templateRepositoryLogger, emailHistoryRepository, functionLogRepository, mapper, emailServiceLogger); emailHistory.NotificationId = payLoad.Id; await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); await DataBuilder.SetEmailHistory(dbContext, emailHistory); //Act await sut.UpdateEmailStatus(payLoad); //Assert var data = dbContext.EmailHistory.AsNoTracking().FirstOrDefault(x => x.NotificationId == payLoad.Id); data.Should().NotBeNull(); data?.Status.Should().Be(payLoad.Status); data?.NotificationId.Should().Be(payLoad.Id); data?.ModifiedBy.Should().Be("System"); }
public async Task Then_Do_Not_Update_Email_History_If_Does_Not_Exsits( MatchingDbContext dbContext, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, IMessageQueueService messageQueueService, EmailDeliveryStatusPayLoad payload, MatchingConfiguration configuration, ILogger <OpportunityRepository> opportunityRepoLogger, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <EmailService> emailServiceLogger, ILogger <Application.Services.EmailDeliveryStatusService> emailDeliveryServiceStatusLogger, IAsyncNotificationClient notificationClient ) { //Arrange await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); var sut = SutSetUp(dbContext, opportunityRepoLogger, emailTemplateLogger, emailHistoryLogger, functionLogLogger, emailDeliveryServiceStatusLogger, emailServiceLogger, notificationClient, configuration, messageQueueService); var serializedPayLoad = JsonConvert.SerializeObject(payload); //Act var result = await sut.HandleEmailDeliveryStatusAsync(serializedPayLoad); //Assert var data = dbContext.EmailHistory.FirstOrDefault(em => em.NotificationId == payload.Id); data.Should().BeNull(); result.Should().Be(-1); await messageQueueService.DidNotReceive().PushEmailDeliveryStatusMessageAsync(Arg.Any <SendEmailDeliveryStatus>()); }
public async Task Then_Send_Referral_Email_To_Employers_Queue( MatchingDbContext dbContext, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, IMessageQueueService messageQueueService, IRepository <OpportunityItem> repo, IRepository <BackgroundProcessHistory> backgroundProcessHistoryRepository ) { //Arrange backgroundProcessHistory.Status = BackgroundProcessHistoryStatus.Pending.ToString(); await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); var sut = new ReferralService(messageQueueService, repo, backgroundProcessHistoryRepository); repo.GetManyAsync(Arg.Any <Expression <Func <OpportunityItem, bool> > >()).Returns(opportunity.OpportunityItem.AsQueryable()); //Act await sut.ConfirmOpportunitiesAsync(opportunity.Id, "username"); //Assert var backgroundProcessData = dbContext.BackgroundProcessHistory.FirstOrDefault(x => x.Id == backgroundProcessHistory.Id); await messageQueueService.Received(1) .PushEmployerReferralEmailMessageAsync(Arg.Any <SendEmployerReferralEmail>()); await messageQueueService.Received(1) .PushProviderReferralEmailMessageAsync(Arg.Any <SendProviderReferralEmail>()); backgroundProcessData?.Status.Should().Be(BackgroundProcessHistoryStatus.Pending.ToString()); }
public async Task Then_Send_Email_And_Save_Email_History_And_Update_Email_History_If_Status_Is_Null( string status, MatchingConfiguration configuration, [Frozen] MatchingDbContext dbContext, IAsyncNotificationClient notificationClient, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <EmailService> emailServiceLogger, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] OpportunityItem opportunityItem, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] BackgroundProcessHistory backgroundProcessHistory, [Frozen] EmailHistory emailHistory, [Frozen] EmailTemplate emailTemplate, [Frozen] EmailNotificationResponse emailNotificationResponse, EmailDeliveryStatusPayLoad payLoad ) { //Arrange Guid.TryParse(emailNotificationResponse.id, out var notificationId); payLoad.Status = status; payLoad.Id = notificationId; var(templateRepository, emailHistoryRepository, functionLogRepository, mapper) = SetUp(dbContext, emailTemplateLogger, emailHistoryLogger, functionLogLogger); var sut = new EmailService(configuration, notificationClient, templateRepository, emailHistoryRepository, functionLogRepository, mapper, emailServiceLogger); var tokens = new Dictionary <string, string> { { "contactname", "name" } }; notificationClient.SendEmailAsync(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <Dictionary <string, dynamic> >()).Returns(Task.FromResult(emailNotificationResponse)); await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); await DataBuilder.SetEmailTemplate(dbContext, emailTemplate); //Act await sut.SendEmailAsync(emailTemplate.TemplateName, "*****@*****.**", opportunity.Id, opportunityItem.Id, tokens, "System"); //Assert var data = dbContext.EmailHistory.AsNoTracking().FirstOrDefault(x => x.NotificationId == notificationId); data.Should().NotBeNull(); data?.EmailTemplateId.Should().Be(emailHistory.EmailTemplateId); data?.NotificationId.Should().Be(emailNotificationResponse.id); data?.CreatedBy.Should().Be("System"); data?.Status.Should().BeNullOrEmpty(); data?.ModifiedBy.Should().BeNullOrEmpty(); data?.ModifiedOn.Should().BeNull(); dbContext.DetachAllEntities(); //Act - Update Email With Status await sut.UpdateEmailStatus(payLoad); data = dbContext.EmailHistory.AsNoTracking().FirstOrDefault(x => x.NotificationId == notificationId); data.Should().NotBeNull(); data?.EmailTemplateId.Should().Be(emailHistory.EmailTemplateId); data?.Status.Should().NotBeNullOrEmpty(); data?.Status.Should().Be(payLoad.Status); data?.NotificationId.Should().Be(emailNotificationResponse.id); data?.CreatedBy.Should().Be("System"); data?.ModifiedBy.Should().Be("System"); }