diff options
| -rwxr-xr-x | signal_event_notifier.py | 13 | ||||
| -rw-r--r-- | test.py | 30 |
2 files changed, 39 insertions, 4 deletions
diff --git a/signal_event_notifier.py b/signal_event_notifier.py index 144298b..d7d1525 100755 --- a/signal_event_notifier.py +++ b/signal_event_notifier.py @@ -40,7 +40,8 @@ def load_events(uri: str, start: datetime.datetime, def load_responsibilities(start: datetime.date, - resp_file_path='') -> list[str]: + resp_file_path='', + offset=0) -> list[str]: """Load resposibility definitions If no file path containing responsibilities is passed se tyhe environment. @@ -62,7 +63,7 @@ def load_responsibilities(start: datetime.date, if len(resps_order) == 52: resp = resps_order[cal_week - 1] else: - resp = resps_order[(cal_week % len(resps_order)) - 1] + resp = resps_order[((cal_week + offset) % len(resps_order)) - 1] return resp.split(',') @@ -117,6 +118,10 @@ def main(): parser.add_argument('--calendar', help='The calendars URI') parser.add_argument('--responsibilities-file', help='A file specifying the responsibilities per line') + parser.add_argument('--responsibilities-offset', + default=0, + type=int, + help='Offset in the responsibilities file') parser.add_argument('--group', help='The group notifications should be send to') parser.add_argument('user', help='The signal user sending messages') @@ -129,7 +134,9 @@ def main(): end = tomorrow + datetime.timedelta(days=1) recipients = load_responsibilities( - tomorrow, resp_file_path=args.responsibilities_file) + tomorrow, + resp_file_path=args.responsibilities_file, + offset=args.responsibilities_offset) # load ICS events evs = load_events(args.calendar, tomorrow, end) @@ -8,6 +8,7 @@ import unittest import signal_event_notifier as sen DUMMY_CYCLIC_RESPONSIBILITIES = "alice:+1234\nbob:+5678,charlie:+5679" +DUMMY_CYCLIC_RESPONSIBILITIES_3 = "alice:+1234\nbob:+5678\ncharlie:+5679" TEST_CAL = "test/cal.ics" @@ -33,11 +34,38 @@ class TestCyclicRespLoading(unittest.TestCase): expected = [['alice:+1234'], ['bob:+5678', 'charlie:+5679']] day = datetime.date(year=2013, month=1, day=1) delta = datetime.timedelta(days=7) - for week in range(52): + for week in range(52 * 2): resp = sen.load_responsibilities(day) self.assertEqual(resp, expected[(week % 2)]) day += delta +# pragma pylint: disable=missing-function-docstring,missing-class-docstring,invalid-name +class TestCyclicUnevenRespLoading(unittest.TestCase): + + def setUp(self): + os.environ[ + sen. + RESPONSIBILITIES_ENV_VAR_NAME] = DUMMY_CYCLIC_RESPONSIBILITIES_3 + + def test_cyclic_resp_all_weeks(self): + expected = [['alice:+1234'], ['bob:+5678'], ['charlie:+5679']] + day = datetime.date(year=2013, month=1, day=1) + delta = datetime.timedelta(days=7) + for week in range(52): + resp = sen.load_responsibilities(day) + self.assertEqual(resp, expected[(week % 3)]) + day += delta + + # Second year + expected = [['bob:+5678'], ['charlie:+5679'], ['alice:+1234']] + offset = 1 + + for week in range(52): + resp = sen.load_responsibilities(day, offset=offset) + self.assertEqual(resp, expected[(week % 3)]) + day += delta + + if __name__ == '__main__': unittest.main() |
