Пример #1
0
 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)
Пример #2
0
 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
Пример #3
0
 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))))
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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)))
Пример #7
0
 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'))
Пример #8
0
 def testDailyReportOtherHoursDontCount(self):
     ReportNotification(hour=12, minute=0, day=31, interval='daily').save()
     self._check('daily', datetime(2014, 10, 31, 11, 0), 0)
Пример #9
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)
Пример #10
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
Пример #11
0
 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)
Пример #12
0
 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)
Пример #13
0
 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)
Пример #14
0
 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)
Пример #15
0
 def testWeeklyReportOtherDaysDontCount(self):
     ReportNotification(hour=12, minute=0, day=4, interval='weekly').save()
     self._check('weekly', datetime(2014, 10, 30, 12, 0), 0)
Пример #16
0
 def testMonthlyReportOtherDaysDontCount(self):
     ReportNotification(hour=12, minute=None, day=31,
                        interval='monthly').save()
     self._check('monthly', datetime(2014, 10, 30, 12, 0), 0)
Пример #17
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))
Пример #18
0
 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)
Пример #19
0
 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)
Пример #20
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)
Пример #21
0
 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)