コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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();
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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();
        }
コード例 #11
0
        public static void TestSubject()
        {
            var email = new ReservationReminder(default(string), 11.December(2018));

            Assert.Equal("No reservations entered for 11 Dec", email.Subject);
        }
コード例 #12
0
        public static void TestTo(string to)
        {
            var email = new ReservationReminder(to, default(LocalDate));

            Assert.Equal(to, email.To);
        }