def testIntervalReportDontIncludeOtherIntervals(self): ReportNotification(hour=1, minute=0, interval='hourly').save() ReportNotification(hour=1, minute=0, interval='daily').save() ReportNotification(hour=12, minute=0, day=4, interval='weekly').save() ReportNotification(hour=1, minute=0, interval='monthly').save() self._check('hourly', datetime(2014, 10, 1, 1, 0), 1) self._check('daily', datetime(2014, 10, 1, 1, 0), 1) self._check('weekly', datetime(2014, 10, 31, 12, 0), 1) self._check('monthly', datetime(2014, 10, 1, 1, 0), 1)
def _create_report(self, domain=None, owner_id=None): domain = domain or self.domain owner_id = owner_id or self.user._id report = ReportNotification(domain=domain, owner_id=owner_id) report.save() self.addCleanup(report.delete) return report
def testDailyReportLenientWindow(self): ReportNotification(hour=12, minute=0, interval='daily').save() self._check('daily', datetime(2014, 10, 31, 12, 5), 1) # lenient window # but not too lenient self.assertRaises( ValueError, lambda: list( get_scheduled_report_ids( 'daily', end_datetime=datetime(2014, 10, 31, 12, 6))))
def _create_scheduled_report(self, domain=None, owner_id=None, config_ids=[]): report = ReportNotification(domain=domain, owner_id=owner_id, config_ids=config_ids) report.save() self.addCleanup(report.delete) return report
def create_report_notification(self, configs, owner_id): domain = configs[0].domain config_ids = [c._id for c in configs] rn = ReportNotification( domain=domain, config_ids=config_ids, owner_id=owner_id, interval='daily', ) rn.save() self.addCleanup(rn.delete) return rn
def testDefaultValue(self): now = datetime.utcnow() # This line makes sure that the date of the ReportNotification is an increment of 15 minutes ReportNotification(hour=now.hour, minute=(now.minute // 15) * 15, interval='daily').save() if now.minute % 15 <= 5: self._check('daily', None, 1) else: self.assertRaises( ValueError, lambda: list(get_scheduled_report_ids('daily', None)))
def test_get_scheduled_report_response(self): domain = self.domain report_config = ReportConfig.wrap({ "date_range": "last30", "days": 30, "domain": domain, "report_slug": "worker_activity", "report_type": "project_report", "owner_id": self.user._id, }) report_config.save() report = ReportNotification(hour=12, minute=None, day=30, interval='monthly', config_ids=[report_config._id]) report.save() response = get_scheduled_report_response( couch_user=self.user, domain=domain, scheduled_report_id=report._id)[0] self.assertTrue(self.user.username in response.decode('utf-8'))
def testDailyReportOtherHoursDontCount(self): ReportNotification(hour=12, minute=0, day=31, interval='daily').save() self._check('daily', datetime(2014, 10, 31, 11, 0), 0)
def testDailyReportWithMinute(self): ReportNotification(hour=12, minute=0, interval='daily').save() self._check('daily', datetime(2014, 10, 31, 12, 0), 1) self._check('daily', datetime(2014, 10, 31, 12, 30), 0)
def testDailyReportEmptyMinute(self): ReportNotification(hour=12, minute=None, interval='daily').save() self._check('daily', datetime(2014, 10, 31, 12, 0), 1) self._check('daily', datetime(2014, 10, 31, 12, 30), 0) # half hour shouldn't count
def testMonthlyReportBeforeTheEndOfTheMonth(self): ReportNotification(hour=12, minute=None, day=30, interval='monthly').save() ReportNotification(hour=12, minute=None, day=31, interval='monthly').save() self._check('monthly', datetime(2014, 10, 30, 12, 0), 1)
def testMonthlyReportOnTheEndOfTheMonthDaysAfter31DontCount(self): ReportNotification(hour=12, minute=None, day=31, interval='monthly').save() ReportNotification(hour=12, minute=None, day=32, interval='monthly').save() self._check('monthly', datetime(2014, 10, 31, 12, 0), 1)
def testMonthlyReportOnTheEndOfTheMonthEmptyMinute(self): ReportNotification(hour=12, minute=None, day=30, interval='monthly').save() ReportNotification(hour=12, minute=None, day=31, interval='monthly').save() self._check('monthly', datetime(2014, 11, 30, 12, 0), 2)
def testMonthlyReportOnTheEndOfTheMonthWithMinuteHalfHour(self): ReportNotification(hour=12, minute=30, day=30, interval='monthly').save() ReportNotification(hour=12, minute=30, day=31, interval='monthly').save() self._check('monthly', datetime(2014, 11, 30, 12, 30), 2)
def testWeeklyReportOtherDaysDontCount(self): ReportNotification(hour=12, minute=0, day=4, interval='weekly').save() self._check('weekly', datetime(2014, 10, 30, 12, 0), 0)
def testMonthlyReportOtherDaysDontCount(self): ReportNotification(hour=12, minute=None, day=31, interval='monthly').save() self._check('monthly', datetime(2014, 10, 30, 12, 0), 0)
def test_scheduled_reports_identified(self): point_1 = datetime.datetime(2019, 3, 22, 22, 46, 0, 439979) # target point in time: datetime.datetime(2019, 3, 22, 23, 0, 0, 0) point_2 = datetime.datetime(2019, 3, 22, 23, 11, 38, 363898) test_cases = [ ('daily minute None', True, ReportNotification(hour=23, minute=None, interval='daily')), ('daily minute 0', True, ReportNotification(hour=23, minute=0, interval='daily')), ('daily minute off', False, ReportNotification(hour=23, minute=15, interval='daily')), ('daily hour off', False, ReportNotification(hour=22, minute=0, interval='daily')), ('weekly minute None', True, ReportNotification(hour=23, minute=None, day=4, interval='weekly')), ('weekly minute 0', True, ReportNotification(hour=23, minute=0, day=4, interval='weekly')), ('weekly minute off', False, ReportNotification(hour=23, minute=15, day=4, interval='weekly')), ('weekly hour off', False, ReportNotification(hour=22, minute=0, day=4, interval='weekly')), ('weekly day off', False, ReportNotification(hour=22, minute=0, day=3, interval='weekly')), ('monthly minute None', True, ReportNotification(hour=23, minute=None, day=22, interval='monthly')), ('monthly minute 0', True, ReportNotification(hour=23, minute=0, day=22, interval='monthly')), ('monthly minute off', False, ReportNotification(hour=23, minute=15, day=22, interval='monthly')), ('monthly hour off', False, ReportNotification(hour=22, minute=0, day=22, interval='monthly')), ('monthly day off', False, ReportNotification(hour=22, minute=0, day=20, interval='monthly')), ] create_records_for_scheduled_reports(fake_now_for_tests=point_1) for _, _, report in test_cases: report.save() report_ids = create_records_for_scheduled_reports( fake_now_for_tests=point_2) for description, should_fire, report in test_cases: if should_fire: self.assertIn( report._id, report_ids, "{}: should have fired but didn't".format(description)) else: self.assertNotIn( report._id, report_ids, "{}: shouldn't have fired but did".format(description))
def testHourlyReportWithoutMinute(self): # We don't currently cater for minute-specific hourly reporting; # every report with 'hourly' interval will be sent on the zero-minute hour ReportNotification(hour=1, minute=None, interval='hourly').save() self._check('hourly', datetime(2014, 10, 31, 1, 0), 1)
def testHourlyReportWithMinuteZero(self): ReportNotification(hour=1, minute=0, interval='hourly').save() self._check('hourly', datetime(2014, 10, 31, 1, 0), 1) self._check('hourly', datetime(2014, 10, 31, 1, 30), 0)
def testHourlyReportHourDontMatter(self): ReportNotification(hour=1, minute=0, interval='hourly').save() self._check('hourly', datetime(2014, 10, 31, 1, 0), 1) self._check('hourly', datetime(2014, 10, 31, 12, 0), 1) self._check('hourly', datetime(2014, 10, 31, 23, 0), 1)
def testHourlyReportOtherTypesDontCount(self): ReportNotification(hour=1, minute=0, interval='hourly').save() self._check('daily', datetime(2014, 10, 31, 1, 0), 0) self._check('weekly', datetime(2014, 10, 31, 1, 0), 0) self._check('monthly', datetime(2014, 10, 31, 1, 0), 0)