Browse Source

ref(crons): Improve schedule tests (#57103)

Follow up to
https://github.com/getsentry/sentry/pull/57091#discussion_r1339317536
Evan Purkhiser 1 year ago
parent
commit
8f35b236ac
2 changed files with 25 additions and 25 deletions
  1. 7 4
      src/sentry/monitors/schedule.py
  2. 18 21
      tests/sentry/monitors/test_schedule.py

+ 7 - 4
src/sentry/monitors/schedule.py

@@ -65,14 +65,17 @@ def get_prev_schedule(
 
     Examples:
 
-    >>> get_prev_schedule('05:30', CrontabSchedule('0 * * * *'))
+    >>> get_prev_schedule('01:30', '05:35', CrontabSchedule('0 * * * *'))
     >>> 05:00
 
-    >>> get_prev_schedule('05:30', CrontabSchedule('30 * * * *'))
+    >>> get_prev_schedule('01:30', '05:30', CrontabSchedule('30 * * * *'))
     >>> 04:30
 
-    >>> get_prev_schedule('05:35', IntervalSchedule(interval=2, unit='hour'))
-    >>> 03:35
+    >>> get_prev_schedule('01:30', '05:30', IntervalSchedule(interval=2, unit='hour'))
+    >>> 03:30
+
+    >>> get_prev_schedule('01:30', '05:35', IntervalSchedule(interval=2, unit='hour'))
+    >>> 05:30
     """
     if schedule.type == "crontab":
         return (

+ 18 - 21
tests/sentry/monitors/test_schedule.py

@@ -6,39 +6,36 @@ from sentry.monitors.schedule import get_next_schedule, get_prev_schedule
 from sentry.monitors.types import CrontabSchedule, IntervalSchedule
 
 
+def t(hour: int, minute: int):
+    return datetime(2019, 1, 1, hour, minute, 0, tzinfo=timezone.utc)
+
+
 def test_get_next_schedule():
-    ts = datetime(2019, 1, 1, 5, 30, 0, tzinfo=timezone.utc)
 
     # 00 * * * *: 5:30 -> 6:00
-    expect = ts.replace(hour=6, minute=0)
-    assert get_next_schedule(ts, CrontabSchedule("0 * * * *")) == expect
+    assert get_next_schedule(t(5, 30), CrontabSchedule("0 * * * *")) == t(6, 00)
 
-    # 30 * * * *: 5:30 -> 6:30
-    expect = ts.replace(hour=6, minute=30)
-    assert get_next_schedule(ts, CrontabSchedule("30 * * * *")) == expect
+    # 30 * * * *: 5:29 -> 5:30
+    assert get_next_schedule(t(5, 29), CrontabSchedule("30 * * * *")) == t(5, 30)
 
     # 2 hour interval: 5:30 -> 7:30
-    expect = ts.replace(hour=7, minute=30)
-    assert get_next_schedule(ts, IntervalSchedule(interval=2, unit="hour")) == expect
+    assert get_next_schedule(t(5, 30), IntervalSchedule(interval=2, unit="hour")) == t(7, 30)
 
     # 2 hour interval: 5:42 -> 7:42
-    interval_ts = ts.replace(hour=5, minute=42)
-    expect = ts.replace(hour=7, minute=42)
-    assert get_next_schedule(interval_ts, IntervalSchedule(interval=2, unit="hour")) == expect
+    assert get_next_schedule(t(5, 42), IntervalSchedule(interval=2, unit="hour")) == t(7, 42)
 
 
 def test_get_prev_schedule():
-    start_ts = datetime(2019, 1, 1, 3, 30, 0, tzinfo=timezone.utc)
-    ts = datetime(2019, 1, 1, 5, 35, 0, tzinfo=timezone.utc)
+    start_ts = datetime(2019, 1, 1, 1, 30, 0, tzinfo=timezone.utc)
 
     # 00 * * * *: 5:35 -> 5:00
-    expect = ts.replace(hour=5, minute=0)
-    assert get_prev_schedule(start_ts, ts, CrontabSchedule("0 * * * *")) == expect
+    assert get_prev_schedule(start_ts, t(5, 35), CrontabSchedule("0 * * * *")) == t(5, 00)
+
+    # 30 * * * *: 5:30 -> 4:30
+    assert get_prev_schedule(start_ts, t(5, 30), CrontabSchedule("30 * * * *")) == t(4, 30)
 
-    # 30 * * * *: 5:35 -> 5:30
-    expect = ts.replace(hour=5, minute=30)
-    assert get_prev_schedule(start_ts, ts, CrontabSchedule("30 * * * *")) == expect
+    # 2 hour interval: (start = 1:30) 5:30 -> 3:30
+    assert get_prev_schedule(start_ts, t(5, 30), IntervalSchedule(2, "hour")) == t(3, 30)
 
-    # 2 hour interval: (start = 3:30) 5:35 -> 5:30
-    expect = ts.replace(hour=5, minute=30)
-    assert get_prev_schedule(start_ts, ts, IntervalSchedule(interval=2, unit="hour")) == expect
+    # 2 hour interval: (start = 1:30) 5:35 -> 5:30
+    assert get_prev_schedule(start_ts, t(5, 35), IntervalSchedule(2, "hour")) == t(5, 30)