Пример #1
0
    def test_schedule_start_to_finish(self, utcnow_patch, send_patch):
        self.assertNumInstancesForSchedule(0)

        # Schedule the instance using an explicit start date (a Sunday)
        # Based on the schedule (with start offset 3) we should start sending on the next Monday
        utcnow_patch.return_value = datetime(2017, 8, 2, 7, 0)
        refresh_timed_schedule_instances(
            self.schedule, (('CommCareUser', self.user1.get_id), ),
            date(2017, 8, 6))
        self.assertNumInstancesForSchedule(1)
        [instance] = get_timed_schedule_instances_for_schedule(self.schedule)
        self.assertTimedScheduleInstance(instance, 0, 1,
                                         datetime(2017, 8, 14, 16, 0), True,
                                         date(2017, 8, 6), self.user1)
        self.assertEqual(send_patch.call_count, 0)

        # Send first event
        utcnow_patch.return_value = datetime(2017, 8, 14, 16, 1)
        instance.handle_current_event()
        save_timed_schedule_instance(instance)
        self.assertNumInstancesForSchedule(1)
        self.assertTimedScheduleInstance(instance, 0, 2,
                                         datetime(2017, 8, 15, 16, 0), True,
                                         date(2017, 8, 6), self.user1)
        self.assertEqual(send_patch.call_count, 1)

        # Send second (and final) event
        utcnow_patch.return_value = datetime(2017, 8, 15, 16, 1)
        instance.handle_current_event()
        save_timed_schedule_instance(instance)
        self.assertNumInstancesForSchedule(1)
        self.assertTimedScheduleInstance(instance, 0, 3,
                                         datetime(2017, 8, 16, 16, 0), False,
                                         date(2017, 8, 6), self.user1)
        self.assertEqual(send_patch.call_count, 2)
Пример #2
0
def refresh_timed_schedule_instances(schedule, recipients, start_date=None):
    """
    :param schedule: the TimedSchedule
    :param start_date: the date to start the TimedSchedule
    :param recipients: a list of (recipient_type, recipient_id) tuples; the
    recipient type should be one of the values checked in ScheduleInstance.recipient
    """

    existing_instances = {
        (instance.recipient_type, instance.recipient_id): instance
        for instance in get_timed_schedule_instances_for_schedule(schedule)
    }

    recipients = convert_to_tuple_of_tuples(recipients)
    new_recipients = set(recipients)

    for recipient_type, recipient_id in new_recipients:
        if (recipient_type, recipient_id) not in existing_instances:
            instance = TimedScheduleInstance.create_for_recipient(
                schedule,
                recipient_type,
                recipient_id,
                start_date=start_date,
                move_to_next_event_not_in_the_past=True,
            )
            save_timed_schedule_instance(instance)

    for key, schedule_instance in existing_instances.iteritems():
        if key not in new_recipients:
            delete_timed_schedule_instance(schedule_instance)
        elif start_date and start_date != schedule_instance.start_date:
            schedule_instance.recalculate_schedule(schedule, new_start_date=start_date)
            save_timed_schedule_instance(schedule_instance)
Пример #3
0
    def test_schedule_start_to_finish(self, utcnow_patch, send_patch):
        self.assertNumInstancesForSchedule(0)

        # Schedule the instance
        utcnow_patch.return_value = datetime(2017, 3, 16, 6, 0)
        refresh_timed_schedule_instances(self.schedule, (('CommCareUser', self.user1.get_id),), date(2017, 3, 16))
        self.assertNumInstancesForSchedule(1)
        [instance] = get_timed_schedule_instances_for_schedule(self.schedule)
        self.assertTimedScheduleInstance(instance, 0, 1, datetime(2017, 3, 16, 16, 0), True, date(2017, 3, 16),
            self.user1)
        self.assertEqual(send_patch.call_count, 0)

        # Send first event
        utcnow_patch.return_value = datetime(2017, 3, 16, 16, 1)
        instance.handle_current_event()
        save_timed_schedule_instance(instance)
        self.assertNumInstancesForSchedule(1)
        self.assertTimedScheduleInstance(instance, 0, 2, datetime(2017, 3, 17, 16, 0), True, date(2017, 3, 16),
            self.user1)
        self.assertEqual(send_patch.call_count, 1)

        # Send second (and final) event
        utcnow_patch.return_value = datetime(2017, 3, 17, 16, 1)
        instance.handle_current_event()
        save_timed_schedule_instance(instance)
        self.assertNumInstancesForSchedule(1)
        self.assertTimedScheduleInstance(instance, 0, 3, datetime(2017, 3, 18, 16, 0), False, date(2017, 3, 16),
            self.user1)
        self.assertEqual(send_patch.call_count, 2)
    def test_save_timed_schedule_instance(self):
        self.assertEqual(TimedScheduleInstance.objects.using(self.db).count(), 0)

        instance = self.make_timed_schedule_instance()
        save_timed_schedule_instance(instance)

        self.assertEqual(TimedScheduleInstance.objects.using(self.db).count(), 1)
    def test_save_timed_schedule_instance(self):
        self.assertEqual(TimedScheduleInstance.objects.using(self.db).count(), 0)

        instance = self.make_timed_schedule_instance()
        save_timed_schedule_instance(instance)

        self.assertEqual(TimedScheduleInstance.objects.using(self.db).count(), 1)
Пример #6
0
 def save_instance(instance):
     if isinstance(instance, AlertScheduleInstance):
         save_alert_schedule_instance(instance)
     elif isinstance(instance, TimedScheduleInstance):
         save_timed_schedule_instance(instance)
     elif isinstance(instance, (CaseAlertScheduleInstance, CaseTimedScheduleInstance)):
         save_case_schedule_instance(instance)
     else:
         raise TypeError("Unexpected type: %s" % type(instance))
    def test_get_timed_schedule_instance(self):
        instance1 = self.make_timed_schedule_instance()
        save_timed_schedule_instance(instance1)

        instance2 = get_timed_schedule_instance(instance1.schedule_instance_id)
        self.assertTrue(isinstance(instance2, TimedScheduleInstance))
        self.assertEqual(instance1.schedule_instance_id, instance2.schedule_instance_id)

        with self.assertRaises(TimedScheduleInstance.DoesNotExist):
            get_timed_schedule_instance(uuid.uuid4())
    def test_get_timed_schedule_instance(self):
        instance1 = self.make_timed_schedule_instance()
        save_timed_schedule_instance(instance1)

        instance2 = get_timed_schedule_instance(instance1.schedule_instance_id)
        self.assertTrue(isinstance(instance2, TimedScheduleInstance))
        self.assertEqual(instance1.schedule_instance_id, instance2.schedule_instance_id)

        with self.assertRaises(TimedScheduleInstance.DoesNotExist):
            get_timed_schedule_instance(uuid.uuid4())
Пример #9
0
 def save_instance(instance):
     if isinstance(instance, AlertScheduleInstance):
         save_alert_schedule_instance(instance)
     elif isinstance(instance, TimedScheduleInstance):
         save_timed_schedule_instance(instance)
     elif isinstance(
             instance,
         (CaseAlertScheduleInstance, CaseTimedScheduleInstance)):
         save_case_schedule_instance(instance)
     else:
         raise TypeError("Unexpected type: %s" % type(instance))
    def test_save_timed_schedule_instance(self):
        self.assertEqual(TimedScheduleInstance.objects.using(partition_config.get_proxy_db()).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db1).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db2).count(), 0)

        instance = self.make_timed_schedule_instance(self.p2_uuid)
        save_timed_schedule_instance(instance)

        self.assertEqual(TimedScheduleInstance.objects.using(partition_config.get_proxy_db()).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db1).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db2).count(), 1)
Пример #11
0
    def test_save_timed_schedule_instance(self):
        self.assertEqual(TimedScheduleInstance.objects.using(partition_config.proxy_db).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db1).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db2).count(), 0)

        instance = self.make_timed_schedule_instance(self.p2_uuid)
        save_timed_schedule_instance(instance)

        self.assertEqual(TimedScheduleInstance.objects.using(partition_config.proxy_db).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db1).count(), 0)
        self.assertEqual(TimedScheduleInstance.objects.using(self.db2).count(), 1)
    def setUp(self):
        self.alert_instance1_p1 = self.make_alert_schedule_instance(self.p1_uuid1)
        save_alert_schedule_instance(self.alert_instance1_p1)

        self.alert_instance2_p2 = self.make_alert_schedule_instance(self.p2_uuid1, schedule_id=self.schedule_id1)
        save_alert_schedule_instance(self.alert_instance2_p2)

        self.alert_instance3_p1 = self.make_alert_schedule_instance(self.p1_uuid2, schedule_id=self.schedule_id1,
            active=False)
        save_alert_schedule_instance(self.alert_instance3_p1)

        self.timed_instance1_p2 = self.make_timed_schedule_instance(self.p2_uuid2)
        save_timed_schedule_instance(self.timed_instance1_p2)

        self.timed_instance2_p1 = self.make_timed_schedule_instance(self.p1_uuid3, schedule_id=self.schedule_id2)
        save_timed_schedule_instance(self.timed_instance2_p1)

        self.timed_instance3_p2 = self.make_timed_schedule_instance(self.p2_uuid3, schedule_id=self.schedule_id2,
            active=False)
        save_timed_schedule_instance(self.timed_instance3_p2)
    def setUp(self):
        self.alert_instance1 = self.make_alert_schedule_instance(self.uuid1)
        save_alert_schedule_instance(self.alert_instance1)

        self.alert_instance2 = self.make_alert_schedule_instance(self.uuid2, schedule_id=self.schedule_id1)
        save_alert_schedule_instance(self.alert_instance2)

        self.alert_instance3 = self.make_alert_schedule_instance(self.uuid3, schedule_id=self.schedule_id1,
            active=False)
        save_alert_schedule_instance(self.alert_instance3)

        self.timed_instance1 = self.make_timed_schedule_instance(self.uuid4)
        save_timed_schedule_instance(self.timed_instance1)

        self.timed_instance2 = self.make_timed_schedule_instance(self.uuid5, schedule_id=self.schedule_id2)
        save_timed_schedule_instance(self.timed_instance2)

        self.timed_instance3 = self.make_timed_schedule_instance(self.uuid6, schedule_id=self.schedule_id2,
            active=False)
        save_timed_schedule_instance(self.timed_instance3)
Пример #14
0
    def setUp(self):
        self.alert_instance1_p1 = self.make_alert_schedule_instance(self.p1_uuid1)
        save_alert_schedule_instance(self.alert_instance1_p1)

        self.alert_instance2_p2 = self.make_alert_schedule_instance(self.p2_uuid1, schedule_id=self.schedule_id1)
        save_alert_schedule_instance(self.alert_instance2_p2)

        self.alert_instance3_p1 = self.make_alert_schedule_instance(self.p1_uuid2, schedule_id=self.schedule_id1,
            active=False)
        save_alert_schedule_instance(self.alert_instance3_p1)

        self.timed_instance1_p2 = self.make_timed_schedule_instance(self.p2_uuid2)
        save_timed_schedule_instance(self.timed_instance1_p2)

        self.timed_instance2_p1 = self.make_timed_schedule_instance(self.p1_uuid3, schedule_id=self.schedule_id2)
        save_timed_schedule_instance(self.timed_instance2_p1)

        self.timed_instance3_p2 = self.make_timed_schedule_instance(self.p2_uuid3, schedule_id=self.schedule_id2,
            active=False)
        save_timed_schedule_instance(self.timed_instance3_p2)
    def setUp(self):
        self.alert_instance1 = self.make_alert_schedule_instance(self.uuid1)
        save_alert_schedule_instance(self.alert_instance1)

        self.alert_instance2 = self.make_alert_schedule_instance(self.uuid2, schedule_id=self.schedule_id1)
        save_alert_schedule_instance(self.alert_instance2)

        self.alert_instance3 = self.make_alert_schedule_instance(self.uuid3, schedule_id=self.schedule_id1,
            active=False)
        save_alert_schedule_instance(self.alert_instance3)

        self.timed_instance1 = self.make_timed_schedule_instance(self.uuid4)
        save_timed_schedule_instance(self.timed_instance1)

        self.timed_instance2 = self.make_timed_schedule_instance(self.uuid5, schedule_id=self.schedule_id2)
        save_timed_schedule_instance(self.timed_instance2)

        self.timed_instance3 = self.make_timed_schedule_instance(self.uuid6, schedule_id=self.schedule_id2,
            active=False)
        save_timed_schedule_instance(self.timed_instance3)