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(); }
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; } }