public void Test_AddToQueue() { // Arrange var instant = 18.June(2019).At(23, 0, 0).Utc(); this.SetClock(instant); var email = new RequestReminder("*****@*****.**", 1.July(2019), 5.July(2019)); using (var scope = this.CreateScope()) { // Act scope.ServiceProvider .GetRequiredService <IEmailRepository>() .AddToQueue(email); } using (var scope = this.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); var emails = context.EmailQueueItems.ToArray(); Assert.Single(emails); var actual = emails[0]; Assert.Equal(email.To, actual.To); Assert.Equal(email.Subject, actual.Subject); Assert.Equal(email.PlainTextBody, actual.PlainTextBody); Assert.Equal(email.HtmlBody, actual.HtmlBody); Assert.Equal(instant, actual.AddedTime); } }
public static void To_returns_email_address_of_corresponding_user(string emailAddress) { var template = new RequestReminder( CreateUser.With(userId: "user1", emailAddress: emailAddress), new DateInterval(21.December(2020), 24.December(2020)).ToArray()); Assert.Equal(emailAddress, template.To); }
public static void TestBody() { var email = new RequestReminder(default(string), 17.December(2018), 21.December(2018)); const string ExpectedText = "No requests have yet been entered for 17 Dec - 21 Dec"; Assert.True(email.HtmlBody.Contains(ExpectedText, StringComparison.InvariantCulture)); Assert.True(email.PlainTextBody.Contains(ExpectedText, StringComparison.InvariantCulture)); }
public static void ScheduledTaskType_returns_RequestReminder() { var requestReminder = new RequestReminder( Mock.Of <IDateCalculator>(), Mock.Of <IEmailRepository>(), Mock.Of <IRequestRepository>(), Mock.Of <IUserRepository>()); Assert.Equal(ScheduledTaskType.RequestReminder, requestReminder.ScheduledTaskType); }
public static void GetNextRunTime_uses_London_time_zone() { var dateCalculator = CreateDateCalculator(26.March(2020).AtMidnight().Utc()); var actual = new RequestReminder( dateCalculator, Mock.Of <IEmailRepository>(), Mock.Of <IRequestRepository>(), Mock.Of <IUserRepository>()).GetNextRunTime(); var expected = 31.March(2020).At(23, 0, 0).Utc(); Assert.Equal(expected, actual); }
public static void GetNextRunTime_returns_midnight_on_next_Wednesday(int currentDay, int expectedNextDay) { var dateCalculator = CreateDateCalculator(currentDay.December(2020).AtMidnight().Utc()); var actual = new RequestReminder( dateCalculator, Mock.Of <IEmailRepository>(), Mock.Of <IRequestRepository>(), Mock.Of <IUserRepository>()).GetNextRunTime(); var expected = expectedNextDay.December(2020).AtMidnight().Utc(); Assert.Equal(expected, actual); }
public static async Task Sends_emails_to_users_with_no_upcoming_requests() { var nextWeeklyNotificationDates = new[] { 21.December(2020), 22.December(2020) }; var mockDateCalculator = new Mock <IDateCalculator>(MockBehavior.Strict); mockDateCalculator .Setup(d => d.GetNextWeeklyNotificationDates()) .Returns(nextWeeklyNotificationDates); var mockEmailRepository = new Mock <IEmailRepository>(); var requests = new[] { new Request("user1", 18.December(2020), RequestStatus.Allocated), new Request("user1", 21.December(2020), RequestStatus.Cancelled) }; var mockRequestRepository = new Mock <IRequestRepository>(MockBehavior.Strict); mockRequestRepository .Setup(r => r.GetRequests(22.October(2020), 22.December(2020))) .ReturnsAsync(requests); var user = CreateUser.With(userId: "user1", emailAddress: "*****@*****.**"); var mockUserRepository = new Mock <IUserRepository>(MockBehavior.Strict); mockUserRepository .Setup(r => r.GetUsers()) .ReturnsAsync(new[] { user }); var requestReminder = new RequestReminder( mockDateCalculator.Object, mockEmailRepository.Object, mockRequestRepository.Object, mockUserRepository.Object); await requestReminder.Run(); mockEmailRepository.Verify( r => r.Send(It.Is <IEmailTemplate>(e => e.To == "*****@*****.**" && e.Subject == "No parking requests entered for Mon 21 Dec - Tue 22 Dec")), Times.Once); mockEmailRepository.VerifyNoOtherCalls(); }
public static void Subject_contains_requests_date_range( int firstMonth, int firstDay, int lastMonth, int lastDay, string expectedSubject) { var user = CreateUser.With(userId: "user1", emailAddress: "*****@*****.**"); var template = new RequestReminder( user, new DateInterval( new LocalDate(2020, firstMonth, firstDay), new LocalDate(2020, lastMonth, lastDay)).ToArray()); Assert.Equal(expectedSubject, template.Subject); }
public static async Task Does_not_send_emails_to_users_with_no_recent_requests() { var nextWeeklyNotificationDates = new[] { 21.December(2020), 22.December(2020) }; var mockDateCalculator = new Mock <IDateCalculator>(MockBehavior.Strict); mockDateCalculator .Setup(d => d.GetNextWeeklyNotificationDates()) .Returns(nextWeeklyNotificationDates); var mockEmailRepository = new Mock <IEmailRepository>(); var requests = new[] { new Request("user1", 18.December(2020), RequestStatus.Cancelled), }; var mockRequestRepository = new Mock <IRequestRepository>(MockBehavior.Strict); mockRequestRepository .Setup(r => r.GetRequests(22.October(2020), 22.December(2020))) .ReturnsAsync(requests); var users = new[] { CreateUser.With(userId: "user1", emailAddress: "*****@*****.**"), CreateUser.With(userId: "user2", emailAddress: "*****@*****.**") }; var mockUserRepository = new Mock <IUserRepository>(MockBehavior.Strict); mockUserRepository .Setup(r => r.GetUsers()) .ReturnsAsync(users); var requestReminder = new RequestReminder( mockDateCalculator.Object, mockEmailRepository.Object, mockRequestRepository.Object, mockUserRepository.Object); await requestReminder.Run(); mockEmailRepository.VerifyNoOtherCalls(); }
public static void Body_contains_requests_date_range() { var template = new RequestReminder( CreateUser.With(userId: "user1", emailAddress: "*****@*****.**"), new DateInterval(21.December(2020), 24.December(2020)).ToArray()); const string ExpectedPlainTextBody = "No requests have yet been entered for Mon 21 Dec - Thu 24 Dec.\r\n\r\n" + "If you do not need parking during this period you can ignore this message.\r\n\r\n" + "Otherwise, you should enter requests by the end of today to have them taken into account.\r\n\r\n" + "If you do not want to receive these emails, you can turn them off from your profile page in the app."; const string ExpectedHtmlTextBody = "<p>No requests have yet been entered for Mon 21 Dec - Thu 24 Dec.</p>\r\n" + "<p>If you do not need parking during this period you can ignore this message.</p>\r\n" + "<p>Otherwise, you should enter requests by the end of today to have them taken into account.</p>\r\n" + "<p>If you do not want to receive these emails, you can turn them off from your profile page in the app.</p>"; Assert.Equal(ExpectedPlainTextBody, template.PlainTextBody); Assert.Equal(ExpectedHtmlTextBody, template.HtmlBody); }
public static void TestSubject() { var email = new RequestReminder(default(string), 17.December(2018), 21.December(2018)); Assert.Equal("No requests entered for 17 Dec - 21 Dec", email.Subject); }
public static void TestTo(string to) { var email = new RequestReminder(to, default(LocalDate), default(LocalDate)); Assert.Equal(to, email.To); }