public When_EmailService_Is_Called_To_Send_Email_With_Incorrect_Template() { var emailHistoryRepository = Substitute.For <IRepository <EmailHistory> >(); var config = new MapperConfiguration(c => c.AddMaps(typeof(EmailHistoryMapper).Assembly)); var mapper = new Mapper(config); var configuration = new MatchingConfiguration { SendEmailEnabled = true }; _notificationsApi = Substitute.For <IAsyncNotificationClient>(); _logger = Substitute.For <ILogger <EmailService> >(); _emailTemplateRepository = Substitute.For <IRepository <EmailTemplate> >(); _emailTemplateRepository .GetSingleOrDefaultAsync(Arg.Any <Expression <Func <EmailTemplate, bool> > >()) .ReturnsNull(); var functionLogRepository = Substitute.For <IRepository <FunctionLog> >(); var emailService = new EmailService(configuration, _notificationsApi, _emailTemplateRepository, emailHistoryRepository, functionLogRepository, mapper, _logger); const string toAddress = "*****@*****.**"; var tokens = new Dictionary <string, string> { { "contactname", "name" } }; const string templateName = "MissingTestTemplate"; emailService.SendEmailAsync(templateName, toAddress, null, null, tokens, "System").GetAwaiter().GetResult(); }
public override void Given() { SeedTlevelTestData(); SeedNotificationTestData(); CreateMapper(); _verifyTlevelDetailsModel = new VerifyTlevelDetails { TqAwardingOrganisationId = _tqAwardingOrganisation.Id, PathwayStatusId = (int)TlevelReviewStatus.Queried, Query = "test", QueriedUserEmail = "*****@*****.**" }; _resultsAndCertificationConfiguration = new ResultsAndCertificationConfiguration { TlevelQueriedSupportEmailAddress = "*****@*****.**" }; _notificationsClient = Substitute.For <IAsyncNotificationClient>(); _notificationLogger = Substitute.For <ILogger <NotificationService> >(); _notificationTemplateRepository = Substitute.For <ILogger <GenericRepository <NotificationTemplate> > >(); IRepository <NotificationTemplate> notificationTemplateRepository = new GenericRepository <NotificationTemplate>(_notificationTemplateRepository, DbContext); _notificationService = new NotificationService(notificationTemplateRepository, _notificationsClient, _notificationLogger); _logger = Substitute.For <ILogger <IRepository <TqAwardingOrganisation> > >(); _service = new AwardingOrganisationService(_resultsAndCertificationConfiguration, Repository, _notificationService, _mapper, _logger); }
public GovUKNotifyService(IOptions <NotifyOptions> options, ILogger <GovUKNotifyService> logger, IAsyncNotificationClient notificationClientAsync) { _options = options.Value; _logger = logger; _notificationClientAsync = notificationClientAsync; }
public EmailService(ConfigurationOptions configuration, IAsyncNotificationClient notificationClient, ILogger <EmailService> logger) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); _notificationClient = notificationClient ?? throw new ArgumentNullException(nameof(notificationClient)); _logger = logger ?? throw new ArgumentNullException(nameof(notificationClient)); }
public CreateNotificationService(ICommandHandler commandHandler, IAsyncNotificationClient asyncNotificationClient, IQueryHandler queryHandler, IPollyRetryService pollyRetryService, ILogger <CreateNotificationService> logger) { _commandHandler = commandHandler; _asyncNotificationClient = asyncNotificationClient; _queryHandler = queryHandler; _pollyRetryService = pollyRetryService; _logger = logger; }
public async Task Then_Do_Not_Update_Email_History_If_PayLoad_Notification_Id_Is_Null( string status, 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, EmailDeliveryStatusPayLoad payload, MatchingConfiguration configuration, ILogger <OpportunityRepository> opportunityRepoLogger, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <Application.Services.EmailDeliveryStatusService> emailDeliveryServiceStatusLogger, ILogger <EmailService> emailServiceLogger, IAsyncNotificationClient notificationClient ) { //Arrange await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); dbContext.Add(emailHistory); await dbContext.SaveChangesAsync(); payload.Status = status; payload.Id = Guid.Empty; var sut = SutSetUp(dbContext, opportunityRepoLogger, emailTemplateLogger, emailHistoryLogger, functionLogLogger, emailDeliveryServiceStatusLogger, emailServiceLogger, notificationClient, configuration, messageQueueService); var serializedPayLoad = JsonConvert.SerializeObject(payload); //Act await sut.HandleEmailDeliveryStatusAsync(serializedPayLoad); //Assert var data = dbContext.EmailHistory.FirstOrDefault(em => em.NotificationId == payload.Id); data.Should().BeNull(); 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_Send_Email_And_Save_Email_History( 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 ) { //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(emailTemplate.TemplateName, "*****@*****.**", opportunity.Id, opportunityItem.Id, tokens, "System"); //Assert Guid.TryParse(emailNotificationResponse.id, out var notificationId); var data = dbContext.EmailHistory.AsNoTracking().FirstOrDefault(x => x.NotificationId == notificationId); data.Should().NotBeNull(); data?.EmailTemplateId.Should().Be(emailHistory.EmailTemplateId); data?.Status.Should().BeNullOrEmpty(); data?.NotificationId.Should().Be(emailNotificationResponse.id); data?.CreatedBy.Should().Be("System"); data?.SentTo.Should().Be("*****@*****.**"); }
public async Task Then_Update_Email_History_With_Status_And_Push_To_Email_Delivery_Status_Queue( string status, MatchingDbContext dbContext, MatchingConfiguration configuration, [Frozen] Domain.Models.Opportunity opportunity, [Frozen] Domain.Models.Provider provider, [Frozen] Domain.Models.ProviderVenue venue, [Frozen] EmailHistory emailHistory, [Frozen] BackgroundProcessHistory backgroundProcessHistory, ILogger <OpportunityRepository> opportunityRepoLogger, IMessageQueueService messageQueueService, EmailDeliveryStatusPayLoad payload, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <Application.Services.EmailDeliveryStatusService> emailDeliveryServiceStatusLogger, ILogger <EmailService> emailServiceLogger, IAsyncNotificationClient notificationClient ) { //Arrange await DataBuilder.SetTestData(dbContext, provider, venue, opportunity, backgroundProcessHistory); dbContext.Add(emailHistory); await dbContext.SaveChangesAsync(); dbContext.DetachAllEntities(); payload.Status = status; payload.Id = emailHistory.NotificationId.GetValueOrDefault(); var sut = SutSetUp(dbContext, opportunityRepoLogger, emailTemplateLogger, emailHistoryLogger, functionLogLogger, emailDeliveryServiceStatusLogger, emailServiceLogger, notificationClient, configuration, messageQueueService); var serializedPayLoad = JsonConvert.SerializeObject(payload); //Act await sut.HandleEmailDeliveryStatusAsync(serializedPayLoad); //Assert var data = dbContext.EmailHistory.FirstOrDefault(em => em.NotificationId == payload.Id); data.Should().NotBeNull(); data?.NotificationId.Should().Be(payload.Id); data?.Status.Should().Be(payload.Status); data?.ModifiedBy.Should().Be("System"); await messageQueueService.Received(1).PushEmailDeliveryStatusMessageAsync(Arg.Any <SendEmailDeliveryStatus>()); }
public EmailService(MatchingConfiguration configuration, IAsyncNotificationClient notificationClient, IRepository <EmailTemplate> emailTemplateRepository, IRepository <EmailHistory> emailHistoryRepository, IRepository <FunctionLog> functionLogRepository, IMapper mapper, ILogger <EmailService> logger) { _configuration = configuration; _emailTemplateRepository = emailTemplateRepository; _emailHistoryRepository = emailHistoryRepository; _functionLogRepository = functionLogRepository; _mapper = mapper; _notificationClient = notificationClient; _logger = logger; }
private static IEmailService BuildEmailService( string emailTemplateId = null, string supportInbox = null, IAsyncNotificationClient notificationClient = null, ILogger <EmailService> logger = null) { notificationClient ??= Substitute.For <IAsyncNotificationClient>(); logger ??= Substitute.For <ILogger <EmailService> >(); var configuration = new ConfigurationOptions { EmployerContactEmailTemplateId = emailTemplateId ?? EmailTemplateId, SupportEmailInboxAddress = supportInbox ?? MainSupportEmailInboxAddress }; return(new EmailService(configuration, notificationClient, logger)); }
public When_EmailService_Is_Called_To_Send_Email() { var configuration = new MatchingConfiguration { SendEmailEnabled = true, GovNotifyApiKey = "TestApiKey" }; _notificationsApi = Substitute.For <IAsyncNotificationClient>(); var logger = Substitute.For <ILogger <EmailService> >(); var config = new MapperConfiguration(c => c.AddMaps(typeof(EmailHistoryMapper).Assembly)); var mapper = new Mapper(config); var emailTemplate = new EmailTemplate { Id = 1, TemplateId = "1599768C-7D3D-43AB-8548-82A4E5349468", TemplateName = "TemplateName" }; _emailTemplateRepository = Substitute.For <IRepository <EmailTemplate> >(); var emailHistoryRepository = Substitute.For <IRepository <EmailHistory> >(); _emailTemplateRepository.GetSingleOrDefaultAsync(Arg.Any <Expression <Func <EmailTemplate, bool> > >()).Returns(emailTemplate); var functionLogRepository = Substitute.For <IRepository <FunctionLog> >(); var emailService = new EmailService(configuration, _notificationsApi, _emailTemplateRepository, emailHistoryRepository, functionLogRepository, mapper, logger); _toAddress = "*****@*****.**"; var tokens = new Dictionary <string, string> { { "contactname", "name" } }; const string templateName = "TestTemplate"; emailService.SendEmailAsync(templateName, _toAddress, null, null, tokens, "System").GetAwaiter().GetResult(); }
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>()); }
private static Application.Services.EmailDeliveryStatusService SutSetUp( MatchingDbContext dbContext, ILogger <OpportunityRepository> opportunityRepoLogger, ILogger <GenericRepository <EmailTemplate> > emailTemplateLogger, ILogger <GenericRepository <EmailHistory> > emailHistoryLogger, ILogger <GenericRepository <FunctionLog> > functionLogLogger, ILogger <Application.Services.EmailDeliveryStatusService> emailDeliveryServiceStatusLogger, ILogger <EmailService> emailServiceLogger, IAsyncNotificationClient notificationClient, MatchingConfiguration configuration, IMessageQueueService messageQueueService) { var config = new MapperConfiguration(c => c.AddMaps(typeof(EmailService).Assembly)); var mapper = new Mapper(config); var emailTemplateRepository = new GenericRepository <EmailTemplate>(emailTemplateLogger, dbContext); var opportunityRepository = new OpportunityRepository(opportunityRepoLogger, dbContext); var emailHistoryRepository = new GenericRepository <EmailHistory>(emailHistoryLogger, dbContext); var functionLogRepository = new GenericRepository <FunctionLog>(functionLogLogger, dbContext); var emailService = new EmailService(configuration, notificationClient, emailTemplateRepository, emailHistoryRepository, functionLogRepository, mapper, emailServiceLogger); return(new Application.Services.EmailDeliveryStatusService(configuration, emailService, opportunityRepository, messageQueueService, emailDeliveryServiceStatusLogger)); }
public AsyncNotificationClientLoggingDecorator(IAsyncNotificationClient underlyingNotificationClient, ILogger <AsyncNotificationClientLoggingDecorator> logger) { _underlyingNotificationClient = underlyingNotificationClient; _logger = logger; }
public CreateNotificationService(ICommandHandler commandHandler, IAsyncNotificationClient asyncNotificationClient, IQueryHandler queryHandler) { _commandHandler = commandHandler; _asyncNotificationClient = asyncNotificationClient; _queryHandler = queryHandler; }
public NotificationService(IRepository <NotificationTemplate> notificationTemplateRepository, IAsyncNotificationClient notificationClient, ILogger <NotificationService> logger) { _notificationTemplateRepository = notificationTemplateRepository; _notificationClient = notificationClient; _logger = logger; }
public NotificationService(ResultsAndCertificationConfiguration configuration, IAsyncNotificationClient notificationClient) { _configuration = configuration; _notificationClient = notificationClient; }
public NotificationService(IAsyncNotificationClient notificationClient) { _client = notificationClient; }
public NotifyGateway(IAsyncNotificationClient client) { this.Client = client; }
public NotifyTemplatedEmailProvider(IAsyncNotificationClient notifyClient, ILogger <NotifyTemplatedEmailProvider> logger) { _notifyClient = notifyClient; _logger = logger; }