示例#1
0
        public When_EmployerFeedbackService_Is_Called_To_Send_Employer_Feedback_Emails_When_EmployerFeedbackEmailsEnabled_Is_False(
            EmployerFeedbackFixture testFixture)
        {
            _dateTimeProvider = Substitute.For <IDateTimeProvider>();

            _emailService = Substitute.For <IEmailService>();

            _bankHolidayRepository = Substitute.For <IRepository <BankHoliday> >();
            _opportunityRepository = Substitute.For <IOpportunityRepository>();
            _opportunityRepository.GetReferralsForEmployerFeedbackAsync(Arg.Any <DateTime>())
            .Returns(new EmployerFeedbackDtoListBuilder().Build());

            testFixture.Configuration.EmployerFeedbackEmailsEnabled = false;

            var employerFeedbackService = new EmployerFeedbackService(
                testFixture.Configuration,
                testFixture.Logger,
                _emailService,
                _bankHolidayRepository,
                _opportunityRepository,
                _dateTimeProvider);

            _result = employerFeedbackService
                      .SendEmployerFeedbackEmailsAsync("TestUser")
                      .GetAwaiter().GetResult();
        }
示例#2
0
        public When_EmployerFeedbackService_Is_Called_To_Send_Employer_Feedback_Emails_With_Multiple_Employers(
            EmployerFeedbackFixture testFixture)
        {
            _testFixture = testFixture;

            var dateTimeProvider = Substitute.For <IDateTimeProvider>();

            dateTimeProvider
            .UtcNow()
            .Returns(new DateTime(2019, 12, 13));
            dateTimeProvider
            .GetNthWorkingDayDate(Arg.Any <DateTime>(), Arg.Any <int>(), Arg.Any <IList <DateTime> >())
            .Returns(new DateTime(2019, 12, 13));

            _emailService = Substitute.For <IEmailService>();

            _opportunityRepository = Substitute.For <IOpportunityRepository>();
            _opportunityRepository.GetReferralsForEmployerFeedbackAsync(Arg.Any <DateTime>())
            .Returns(new EmployerFeedbackDtoListBuilder().AddAnotherEmployer()
                     .Build());

            var mockDbSet = new BankHolidayListBuilder()
                            .Build()
                            .AsQueryable()
                            .BuildMockDbSet();

            var contextOptions = new DbContextOptions <MatchingDbContext>();
            var mockContext    = Substitute.For <MatchingDbContext>(contextOptions);

            mockContext.Set <BankHoliday>().Returns(mockDbSet);

            IRepository <BankHoliday> bankHolidayRepository =
                new GenericRepository <BankHoliday>(NullLogger <GenericRepository <BankHoliday> > .Instance, mockContext);

            var employerFeedbackService = new EmployerFeedbackService(
                _testFixture.Configuration,
                _testFixture.Logger,
                _emailService,
                bankHolidayRepository,
                _opportunityRepository,
                dateTimeProvider);

            _result = employerFeedbackService
                      .SendEmployerFeedbackEmailsAsync("TestUser")
                      .GetAwaiter().GetResult();
        }
        public async Task <int> SendEmployerFeedbackEmailsAsync(string userName)
        {
            try
            {
                if (!_configuration.EmployerFeedbackEmailsEnabled ||
                    !IsNthWorkingDay(_configuration.EmployerFeedbackWorkingDayInMonth))
                {
                    _logger.LogInformation("Employer feedback service exited because today is not a valid day for processing.");
                    return(0);
                }

                var previousMonthDate = _dateTimeProvider.UtcNow().AddMonths(-1);
                var previousMonth     = previousMonthDate.ToString("MMMM");

                var referrals = await _opportunityRepository.GetReferralsForEmployerFeedbackAsync(previousMonthDate);

                var referralsGroupedByEmployer = referrals.GroupBy(r => r.EmployerCrmId)
                                                 .ToDictionary(r => r.Key, r => r.OrderByDescending(e => e.ModifiedOn).ToList());

                foreach (var(_, value) in referralsGroupedByEmployer)
                {
                    var tokens = CreateTokens(value, previousMonth);

                    await _emailService.SendEmailAsync(EmailTemplateName.EmployerFeedbackV2.ToString(), value.First().EmployerContactEmail, null, null, tokens, userName);
                }

                return(referralsGroupedByEmployer.Count);
            }
            catch (Exception ex)
            {
                var errorMessage = $"Error sending employer feedback emails. {ex.Message} ";

                _logger.LogError(ex, errorMessage);
                throw;
            }
        }