|
| 1 | +from datetime import time, datetime |
| 2 | + |
| 3 | +from django.test import TestCase |
| 4 | +from freezegun import freeze_time |
| 5 | + |
| 6 | +from django_datajsonar.frequency import get_next_run_date |
| 7 | +from django_datajsonar import strings |
| 8 | + |
| 9 | + |
| 10 | +@freeze_time("2019-01-01 06:00:00") # Tuesday |
| 11 | +class NextRunDateTests(TestCase): |
| 12 | + |
| 13 | + def setUp(self): |
| 14 | + self.now = datetime.now() # Localtime |
| 15 | + |
| 16 | + def test_get_daily_next_run_date(self): |
| 17 | + |
| 18 | + nine_am = time(9, 0) |
| 19 | + next_run_date = get_next_run_date(start_time=self.now, scheduled_time=nine_am) |
| 20 | + |
| 21 | + self.assertEqual(next_run_date, datetime(2019, 1, 1, 9, 0, 0)) |
| 22 | + |
| 23 | + def test_get_daily_next_run_date_for_tomorrow(self): |
| 24 | + |
| 25 | + before_now = time(5, 0) |
| 26 | + next_run_date = get_next_run_date(start_time=self.now, scheduled_time=before_now) |
| 27 | + |
| 28 | + self.assertEqual(next_run_date, datetime(2019, 1, 2, 5, 0, 0)) |
| 29 | + |
| 30 | + def test_get_next_run_date_weekdays(self): |
| 31 | + |
| 32 | + nine_am = time(9, 0) |
| 33 | + week_days = [strings.MON, strings.TUE] |
| 34 | + next_run_date = get_next_run_date(start_time=self.now, scheduled_time=nine_am, week_days=week_days) |
| 35 | + |
| 36 | + self.assertEqual(next_run_date, datetime(2019, 1, 1, 9, 0, 0)) # Today is tuesday! |
| 37 | + |
| 38 | + def test_get_next_run_date_weekdays_not_today(self): |
| 39 | + nine_am = time(9, 0) |
| 40 | + week_days = ['MON'] |
| 41 | + next_run_date = get_next_run_date(start_time=self.now, scheduled_time=nine_am, week_days=week_days) |
| 42 | + |
| 43 | + self.assertEqual(next_run_date, datetime(2019, 1, 7, 9, 0, 0)) # Next monday |
| 44 | + |
| 45 | + def test_iterate_next_run_dates(self): |
| 46 | + nine_am = time(9, 0) |
| 47 | + week_days = [strings.MON, strings.TUE, strings.WED, strings.THU] |
| 48 | + |
| 49 | + expected_dates = [ # Tuesday, Wednesday, Thursday, then next week's Monday |
| 50 | + datetime(2019, 1, 1, 9, 0, 0), |
| 51 | + datetime(2019, 1, 2, 9, 0, 0), |
| 52 | + datetime(2019, 1, 3, 9, 0, 0), |
| 53 | + datetime(2019, 1, 7, 9, 0, 0), |
| 54 | + ] |
| 55 | + |
| 56 | + start_time = self.now |
| 57 | + for expected_date in expected_dates: |
| 58 | + next_run_date = get_next_run_date(start_time=start_time, scheduled_time=nine_am, week_days=week_days) |
| 59 | + |
| 60 | + self.assertEqual(next_run_date, expected_date) |
| 61 | + start_time = next_run_date |
0 commit comments