public static async Task Does_not_send_email_when_reservations_have_been_entered() { var nextWorkingDate = 23.December(2020); var mockDateCalculator = new Mock <IDateCalculator>(MockBehavior.Strict); mockDateCalculator .Setup(c => c.GetNextWorkingDate()) .Returns(nextWorkingDate); var mockEmailRepository = new Mock <IEmailRepository>(); var reservations = new[] { new Reservation("user1", nextWorkingDate) }; var mockReservationRepository = new Mock <IReservationRepository>(MockBehavior.Strict); mockReservationRepository .Setup(r => r.GetReservations(nextWorkingDate, nextWorkingDate)) .ReturnsAsync(reservations); var reservationReminder = new ReservationReminder( mockDateCalculator.Object, mockEmailRepository.Object, mockReservationRepository.Object, Mock.Of <IUserRepository>(MockBehavior.Strict)); await reservationReminder.Run(); mockEmailRepository.VerifyNoOtherCalls(); }
public static void To_returns_email_address_of_corresponding_user(string emailAddress) { var template = new ReservationReminder( CreateUser.With(userId: "user1", emailAddress: emailAddress), 21.December(2020)); Assert.Equal(emailAddress, template.To); }
public static void TestBody() { var email = new ReservationReminder(default(string), 1.January(2019)); const string ExpectedText = "No reservations have yet been entered for 01 Jan"; Assert.True(email.HtmlBody.Contains(ExpectedText, StringComparison.InvariantCulture)); Assert.True(email.PlainTextBody.Contains(ExpectedText, StringComparison.InvariantCulture)); }
public static void ScheduledTaskType_returns_ReservationReminder() { var reservationReminder = new ReservationReminder( Mock.Of <IDateCalculator>(), Mock.Of <IEmailRepository>(), Mock.Of <IReservationRepository>(), Mock.Of <IUserRepository>()); Assert.Equal(ScheduledTaskType.ReservationReminder, reservationReminder.ScheduledTaskType); }
public static void Subject_contains_requests_date( int month, int day, string expectedSubject) { var user = CreateUser.With(userId: "user1", emailAddress: "*****@*****.**"); var template = new ReservationReminder( user, new LocalDate(2020, month, day)); Assert.Equal(expectedSubject, template.Subject); }
public static void GetNextRunTime_uses_London_time_zone() { var dateCalculator = CreateDateCalculator(27.March(2020).At(10, 0, 0).Utc()); var actual = new ReservationReminder( dateCalculator, Mock.Of <IEmailRepository>(), Mock.Of <IReservationRepository>(), Mock.Of <IUserRepository>()).GetNextRunTime(); var expected = 30.March(2020).At(9, 0, 0).Utc(); Assert.Equal(expected, actual); }
public static async Task Sends_emails_to_team_leaders_when_no_reservations_have_been_entered() { var nextWorkingDate = 23.December(2020); var mockDateCalculator = new Mock <IDateCalculator>(MockBehavior.Strict); mockDateCalculator .Setup(c => c.GetNextWorkingDate()) .Returns(nextWorkingDate); var mockEmailRepository = new Mock <IEmailRepository>(); var mockReservationRepository = new Mock <IReservationRepository>(MockBehavior.Strict); mockReservationRepository .Setup(r => r.GetReservations(nextWorkingDate, nextWorkingDate)) .ReturnsAsync(new List <Reservation>()); var teamLeaderUsers = new[] { CreateUser.With(userId: "user1", emailAddress: "*****@*****.**"), CreateUser.With(userId: "user2", emailAddress: "*****@*****.**"), }; var mockUserRepository = new Mock <IUserRepository>(MockBehavior.Strict); mockUserRepository .Setup(r => r.GetTeamLeaderUsers()) .ReturnsAsync(teamLeaderUsers); var reservationReminder = new ReservationReminder( mockDateCalculator.Object, mockEmailRepository.Object, mockReservationRepository.Object, mockUserRepository.Object); await reservationReminder.Run(); mockEmailRepository.Verify( r => r.Send(It.Is <IEmailTemplate>(e => e.To == "*****@*****.**" && e.Subject == "No parking reservations entered for Wed 23 Dec")), Times.Once()); mockEmailRepository.Verify( r => r.Send(It.Is <IEmailTemplate>(e => e.To == "*****@*****.**" && e.Subject == "No parking reservations entered for Wed 23 Dec")), Times.Once()); mockEmailRepository.VerifyNoOtherCalls(); }
public static void GetNextRunTime_returns_10_am_on_next_working_day(int currentDay, int expectedNextDay) { var bankHolidays = new[] { 25.December(2020), 28.December(2020) }; var dateCalculator = CreateDateCalculator(currentDay.December(2020).At(10, 0, 0).Utc(), bankHolidays); var actual = new ReservationReminder( dateCalculator, Mock.Of <IEmailRepository>(), Mock.Of <IReservationRepository>(), Mock.Of <IUserRepository>()).GetNextRunTime(); var expected = expectedNextDay.December(2020).At(10, 0, 0).Utc(); Assert.Equal(expected, actual); }
public static void Body_contains_requests_date() { var template = new ReservationReminder( CreateUser.With(userId: "user1", emailAddress: "*****@*****.**"), 21.December(2020)); const string ExpectedPlainTextBody = "No reservations have yet been entered for Mon 21 Dec.\r\n\r\n" + "If no spaces need reserving for this date then you can ignore this message.\r\n\r\n" + "Otherwise, you should enter reservations by 11am to ensure spaces are allocated accordingly.\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 reservations have yet been entered for Mon 21 Dec.</p>\r\n" + "<p>If no spaces need reserving for this date then you can ignore this message.</p>\r\n" + "<p>Otherwise, you should enter reservations by 11am to ensure spaces are allocated accordingly.</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 async Task Does_not_send_emails_to_users_with_reminder_disabled() { var nextWorkingDate = 23.December(2020); var mockDateCalculator = new Mock <IDateCalculator>(MockBehavior.Strict); mockDateCalculator .Setup(c => c.GetNextWorkingDate()) .Returns(nextWorkingDate); var mockEmailRepository = new Mock <IEmailRepository>(); var mockReservationRepository = new Mock <IReservationRepository>(MockBehavior.Strict); mockReservationRepository .Setup(r => r.GetReservations(nextWorkingDate, nextWorkingDate)) .ReturnsAsync(new List <Reservation>()); var teamLeaderUsers = new[] { CreateUser.With(userId: "user1", emailAddress: "*****@*****.**", reservationReminderEnabled: false), }; var mockUserRepository = new Mock <IUserRepository>(MockBehavior.Strict); mockUserRepository .Setup(r => r.GetTeamLeaderUsers()) .ReturnsAsync(teamLeaderUsers); var reservationReminder = new ReservationReminder( mockDateCalculator.Object, mockEmailRepository.Object, mockReservationRepository.Object, mockUserRepository.Object); await reservationReminder.Run(); mockEmailRepository.VerifyNoOtherCalls(); }
public static void TestSubject() { var email = new ReservationReminder(default(string), 11.December(2018)); Assert.Equal("No reservations entered for 11 Dec", email.Subject); }
public static void TestTo(string to) { var email = new ReservationReminder(to, default(LocalDate)); Assert.Equal(to, email.To); }