public static async Task Does_not_send_emails_to_users_with_cancelled_requests() { var weeklyNotificationDates = new[] { 21.December(2020), 24.December(2020) }; var mockDateCalculator = new Mock <IDateCalculator>(MockBehavior.Strict); mockDateCalculator.Setup(c => c.GetWeeklyNotificationDates()).Returns(weeklyNotificationDates); var mockEmailRepository = new Mock <IEmailRepository>(); var requests = new[] { new Request("user1", weeklyNotificationDates.First(), RequestStatus.Cancelled) }; var mockRequestRepository = new Mock <IRequestRepository>(MockBehavior.Strict); mockRequestRepository .Setup(r => r.GetRequests(weeklyNotificationDates.First(), weeklyNotificationDates.Last())) .ReturnsAsync(requests); var mockUserRepository = new Mock <IUserRepository>(MockBehavior.Strict); mockUserRepository.Setup(r => r.GetUsers()).ReturnsAsync(new List <User>()); var weeklyNotification = new WeeklyNotification( mockDateCalculator.Object, mockEmailRepository.Object, mockRequestRepository.Object, mockUserRepository.Object); await weeklyNotification.Run(); mockEmailRepository.VerifyNoOtherCalls(); }
public static async Task Sends_emails_to_users_with_requests() { var weeklyNotificationDates = new[] { 21.December(2020), 24.December(2020) }; var mockDateCalculator = new Mock <IDateCalculator>(MockBehavior.Strict); mockDateCalculator.Setup(c => c.GetWeeklyNotificationDates()).Returns(weeklyNotificationDates); var mockEmailRepository = new Mock <IEmailRepository>(); var requests = new[] { new Request("user1", weeklyNotificationDates.First(), RequestStatus.Allocated), new Request("user2", weeklyNotificationDates.Last(), RequestStatus.Interrupted) }; var mockRequestRepository = new Mock <IRequestRepository>(MockBehavior.Strict); mockRequestRepository .Setup(r => r.GetRequests(weeklyNotificationDates.First(), weeklyNotificationDates.Last())) .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 weeklyNotification = new WeeklyNotification( mockDateCalculator.Object, mockEmailRepository.Object, mockRequestRepository.Object, mockUserRepository.Object); await weeklyNotification.Run(); mockEmailRepository.Verify( r => r.Send(It.Is <IEmailTemplate>(e => e.To == "*****@*****.**" && e.Subject == "Provisional parking status for Mon 21 Dec - Thu 24 Dec")), Times.Once); mockEmailRepository.Verify( r => r.Send(It.Is <IEmailTemplate>(e => e.To == "*****@*****.**" && e.Subject == "Provisional parking status for Mon 21 Dec - Thu 24 Dec")), Times.Once); mockEmailRepository.VerifyNoOtherCalls(); }