def test_mwf_perf_tuesday(self): """With a MWF test performed on a Tuesday with a due date of Wed, the due date should be set to Wed""" seven_am_tues = self.make_dt(timezone.datetime(2018, 11, 20, 7, 0)) seven_am_wed = self.make_dt(timezone.datetime(2018, 11, 21, 7, 0)) expected_due_date = seven_am_wed assert scheduling.calc_due_date(seven_am_tues, seven_am_wed, self.mwf) == expected_due_date
def test_mwf_perf_monday_after_due_time(self): """With a MWF test performed at 8am on a Monday, if the due date is 7 am, the due date should be set to Wed""" seven_am_monday = self.make_dt(timezone.datetime(2018, 11, 19, 7, 0)) eight_am_monday = self.make_dt(timezone.datetime(2018, 11, 19, 8, 0)) expected_due_date = self.make_dt(timezone.datetime(2018, 11, 21, 7, 0)) assert scheduling.calc_due_date(eight_am_monday, seven_am_monday, self.mwf) == expected_due_date
def test_mwf_due_friday_perf_sat(self): """With a MWF test due Friday performed on a Sat, the due date should be set to Mon""" seven_am_fri = self.make_dt(timezone.datetime(2018, 11, 23, 7, 0)) seven_am_sat = self.make_dt(timezone.datetime(2018, 11, 24, 7, 0)) expected_due_date = self.make_dt(timezone.datetime(2018, 11, 26, 7, 0)) assert scheduling.calc_due_date(seven_am_sat, seven_am_fri, self.mwf) == expected_due_date
def test_mwf_due_monday_perf_sat_after(self): """With a MWF test due Mon, performed on a Sat after, the due date should be set to Mon next""" seven_am_sat_next = self.make_dt(timezone.datetime(2020, 5, 16, 7, 0)) seven_am_mon = self.make_dt(timezone.datetime(2020, 5, 11, 7, 0)) seven_am_mon_next = self.make_dt(timezone.datetime(2020, 5, 18, 7, 0)) expected_due_date = seven_am_mon_next assert scheduling.calc_due_date(seven_am_sat_next, seven_am_mon, self.mwf) == expected_due_date
def test_first_of_month_before_window(self): """With a first of month test performed in the middle of the month, the due date should unchanged""" today = self.make_dt(timezone.datetime(2018, 11, 20, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 12, 1, 7, 0)) expected_due_date = due_date assert scheduling.calc_due_date( today, due_date, self.day_of_month(1)) == expected_due_date
def test_wed_of_week_performed_mon(self): """If a Test List is due every Wed and performed on a Mon, the due date should be advanced 2 days forward, not the next day (obviously depends on config or frequency!) """ mon = self.make_dt(timezone.datetime(2018, 11, 26, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 11, 28, 7, 0)) assert scheduling.calc_due_date(mon, due_date, self.wed).date() == due_date.date()
def test_first_of_month_performed_first_of_month(self): """With a first of month test performed on the first of the month, the due date should be set to first of next month""" today = self.make_dt(timezone.datetime(2018, 11, 1, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 11, 1, 7, 0)) next_month = self.make_dt(timezone.datetime(2018, 12, 1, 7, 0)) assert scheduling.calc_due_date( today, due_date, self.day_of_month(1)).date() == next_month.date()
def test_first_of_month_in_window_before(self): """With a first of month test performed in the middle of the month, the due date should unchanged""" today = self.make_dt(timezone.datetime(2018, 11, 29, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 12, 1, 7, 0)) next_month = self.make_dt(timezone.datetime(2019, 1, 1, 7, 0)) assert scheduling.calc_due_date(today, due_date, self.day_of_month(1)) == next_month
def test_wed_of_week_performed_thurs(self): """If a Test List is due every Wed and performed on a Wed, the due date should be advanced 7 days forward """ thu = self.make_dt(timezone.datetime(2018, 11, 29, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 11, 28, 7, 0)) expected_due_date = self.make_dt(timezone.datetime(2018, 12, 5, 7, 0)) assert scheduling.calc_due_date( thu, due_date, self.wed).date() == expected_due_date.date()
def test_wed_of_week_performed_tues(self): """If a Test List is due every Wed and performed on a Tues, the due date should be advanced 8 days forward, not the next day """ tue = self.make_dt(timezone.datetime(2018, 11, 27, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 11, 28, 7, 0)) expected_due_date = self.make_dt(timezone.datetime(2018, 12, 5, 7, 0)) assert scheduling.calc_due_date( tue, due_date, self.wed).date() == expected_due_date.date()
def test_first_of_month_performed_day_before(self): """If a Test List is performed on e.g. the 31st, the due date should be advanced to the next month, not the next day""" today = self.make_dt(timezone.datetime(2018, 11, 30, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 12, 1, 7, 0)) expected_due_date = self.make_dt(timezone.datetime(2019, 1, 1, 7, 0)) assert scheduling.calc_due_date( today, due_date, self.day_of_month(1)).date() == expected_due_date.date()
def test_daily_offset_due_tomorrow(self): daily = qautils.create_frequency(name="d", slug="d", interval=1, save=False) seven_am_today = self.make_dt(timezone.datetime(2018, 11, 20, 7, 0)) seven_am_tmrw = self.make_dt(timezone.datetime(2018, 11, 21, 7, 0)) assert scheduling.calc_due_date(seven_am_today, seven_am_tmrw, daily).date() == seven_am_tmrw.date()
def test_first_of_month_performed_long_after_past_next_window(self): """If a test list is due on say Apr 1st and is not performed until Dec 2 the due date should be updated to Jan 1st""" today = self.make_dt(timezone.datetime(2018, 12, 2, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 4, 1, 7, 0)) expected_due_date = self.make_dt(timezone.datetime(2019, 1, 1, 7, 0)) assert scheduling.calc_due_date( today, due_date, self.day_of_month(1)).date() == expected_due_date.date()
def test_daily_offset_due_today_after_due_time(self): """Daily frequency when performed today should result in due date one day in future""" daily = qautils.create_frequency(name="d", slug="d", interval=1, save=False) eight_am_today = self.make_dt(timezone.datetime(2018, 11, 20, 8, 0)) due = eight_am_today - timezone.timedelta(hours=1) eight_am_tmrw = self.make_dt(timezone.datetime(2018, 11, 21, 8, 0)) assert scheduling.calc_due_date(eight_am_today, due, daily).date() == eight_am_tmrw.date()
def test_daily_offset_due_yesterday(self): """Daily frequency when performed today should result in due date one day in future""" daily = qautils.create_frequency(name="d", slug="d", interval=1, save=False) seven_am_today = self.make_dt(timezone.datetime(2018, 11, 20, 7, 0)) due = self.make_dt(timezone.datetime(2018, 11, 19, 7, 0)) seven_am_tmrw = self.make_dt(timezone.datetime(2018, 11, 21, 7, 0)) assert scheduling.calc_due_date(seven_am_today, due, daily).date() == seven_am_tmrw.date()
def test_monthly_offset(self): """Monthly frequency when performed today should result in due date 28 days in future""" monthly = qautils.create_frequency(name="d", slug="d", interval=28, save=False) seven_am_today = self.make_dt(timezone.datetime(2018, 11, 20, 7, 0)) due_date = timezone.now() # arbitrary seven_am_4wks = self.make_dt(timezone.datetime(2018, 12, 18, 7, 0)) assert scheduling.calc_due_date( seven_am_today, due_date, monthly).date() == seven_am_4wks.date()
def test_4_weekly_performed_long_after_outside_next_window(self): """If a test list is due on say Apr 1st and is not performed until Nov 20 the due date should be updated to Dec 1st""" today = self.make_dt(timezone.datetime(2018, 11, 1, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 4, 15, 7, 0)) # due date in Nov is 8 4 week periods after April 15 which is Nov 25 expected_due_date = self.make_dt(timezone.datetime(2018, 11, 25, 7, 0)) assert scheduling.calc_due_date( today, due_date, self.n_weekly(4)).date() == expected_due_date.date()
def test_first_of_month_performed_long_after_past_next_window_2(self): """If a test list is due on say Apr 15th and is not performed until Nov 26 the due date should be updated to Dec 23""" today = self.make_dt(timezone.datetime(2018, 11, 26, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 4, 15, 7, 0)) # due date in Nov is 8 4 week periods after April 15 which is Nov 25 # due date in Dec is 9 4 week periods after April 15 which is Dec 23 expected_due_date = self.make_dt(timezone.datetime(2018, 12, 23, 7, 0)) assert scheduling.calc_due_date( today, due_date, self.n_weekly(4)).date() == expected_due_date.date()
def test_annual_offset(self): """Annual frequency when performed today should result in due date 300 days in future""" annual = qautils.create_frequency(name="d", slug="d", interval=300, save=False) seven_am_today = self.make_dt(timezone.datetime(2018, 11, 20, 7, 0)) due_date = self.make_dt(timezone.datetime(2018, 12, 20, 7, 0)) # arbitrary seven_am_300_days = self.make_dt(timezone.datetime(2019, 9, 16, 7, 0)) assert scheduling.calc_due_date( seven_am_today, due_date, annual).date() == seven_am_300_days.date()
def test_adhoc(self): """Null frequency should result in a null due date""" assert scheduling.calc_due_date(timezone.now(), timezone.now(), None) is None