コード例 #1
0
        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);
        }
コード例 #3
0
 public GovUKNotifyService(IOptions <NotifyOptions> options,
                           ILogger <GovUKNotifyService> logger,
                           IAsyncNotificationClient notificationClientAsync)
 {
     _options = options.Value;
     _logger  = logger;
     _notificationClientAsync = notificationClientAsync;
 }
コード例 #4
0
 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));
 }
コード例 #5
0
 public CreateNotificationService(ICommandHandler commandHandler, IAsyncNotificationClient asyncNotificationClient, IQueryHandler queryHandler, IPollyRetryService pollyRetryService, ILogger <CreateNotificationService> logger)
 {
     _commandHandler          = commandHandler;
     _asyncNotificationClient = asyncNotificationClient;
     _queryHandler            = queryHandler;
     _pollyRetryService       = pollyRetryService;
     _logger = logger;
 }
コード例 #6
0
        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("*****@*****.**");
        }
コード例 #8
0
        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>());
        }
コード例 #9
0
 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));
        }
コード例 #11
0
        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");
        }
コード例 #13
0
        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>());
        }
コード例 #14
0
        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;
 }
コード例 #19
0
 public NotificationService(IAsyncNotificationClient notificationClient)
 {
     _client = notificationClient;
 }
 public NotifyGateway(IAsyncNotificationClient client)
 {
     this.Client = client;
 }
コード例 #21
0
 public NotifyTemplatedEmailProvider(IAsyncNotificationClient notifyClient, ILogger <NotifyTemplatedEmailProvider> logger)
 {
     _notifyClient = notifyClient;
     _logger       = logger;
 }