def test_save_alert_schedule_instance(self):
        self.assertEqual(AlertScheduleInstance.objects.using(self.db).count(), 0)

        instance = self.make_alert_schedule_instance()
        save_alert_schedule_instance(instance)

        self.assertEqual(AlertScheduleInstance.objects.using(self.db).count(), 1)
Exemplo n.º 2
0
def refresh_alert_schedule_instances(schedule, recipients):
    """
    :param schedule: the AlertSchedule
    :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_alert_schedule_instances_for_schedule(schedule)
    }

    if existing_instances:
        # Don't refresh AlertSchedules that have already been sent
        # to avoid sending old alerts to new recipients
        return

    recipients = set(convert_to_tuple_of_tuples(recipients))
    for recipient_type, recipient_id in recipients:
        instance = AlertScheduleInstance.create_for_recipient(
            schedule,
            recipient_type,
            recipient_id,
            move_to_next_event_not_in_the_past=False,
        )
        save_alert_schedule_instance(instance)
Exemplo n.º 3
0
    def test_alert(self, utcnow_patch, send_patch):
        self.assertNumInstancesForSchedule(0)

        # Schedule the alert
        utcnow_patch.return_value = datetime(2017, 3, 16, 6, 42, 21)
        refresh_alert_schedule_instances(
            self.schedule, (('CommCareUser', self.user1.get_id), ))
        self.assertNumInstancesForSchedule(1)
        [instance] = get_alert_schedule_instances_for_schedule(self.schedule)
        self.assertAlertScheduleInstance(instance, 0, 1,
                                         datetime(2017, 3, 16, 6, 42, 21),
                                         True, self.user1)
        self.assertEqual(send_patch.call_count, 0)

        # Send first event
        instance.handle_current_event()
        save_alert_schedule_instance(instance)
        self.assertNumInstancesForSchedule(1)
        self.assertAlertScheduleInstance(instance, 0, 2,
                                         datetime(2017, 3, 16, 6, 42, 21),
                                         False, self.user1)
        self.assertEqual(send_patch.call_count, 1)

        # Once an alert has been sent, we don't allow scheduling new instances of old alerts
        refresh_alert_schedule_instances(
            self.schedule, (('CommCareUser', self.user2.get_id), ))
        self.assertNumInstancesForSchedule(1)
        [instance] = get_alert_schedule_instances_for_schedule(self.schedule)
        self.assertAlertScheduleInstance(instance, 0, 2,
                                         datetime(2017, 3, 16, 6, 42, 21),
                                         False, self.user1)
        self.assertEqual(send_patch.call_count, 1)
    def test_save_alert_schedule_instance(self):
        self.assertEqual(AlertScheduleInstance.objects.using(self.db).count(), 0)

        instance = self.make_alert_schedule_instance()
        save_alert_schedule_instance(instance)

        self.assertEqual(AlertScheduleInstance.objects.using(self.db).count(), 1)
Exemplo n.º 5
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_alert_schedule_instance(self):
        instance1 = self.make_alert_schedule_instance()
        save_alert_schedule_instance(instance1)

        instance2 = get_alert_schedule_instance(instance1.schedule_instance_id)
        self.assertTrue(isinstance(instance2, AlertScheduleInstance))
        self.assertEqual(instance1.schedule_instance_id, instance2.schedule_instance_id)

        with self.assertRaises(AlertScheduleInstance.DoesNotExist):
            get_alert_schedule_instance(uuid.uuid4())
    def test_get_alert_schedule_instance(self):
        instance1 = self.make_alert_schedule_instance()
        save_alert_schedule_instance(instance1)

        instance2 = get_alert_schedule_instance(instance1.schedule_instance_id)
        self.assertTrue(isinstance(instance2, AlertScheduleInstance))
        self.assertEqual(instance1.schedule_instance_id, instance2.schedule_instance_id)

        with self.assertRaises(AlertScheduleInstance.DoesNotExist):
            get_alert_schedule_instance(uuid.uuid4())
Exemplo n.º 8
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_alert_schedule_instance(self):
        self.assertEqual(AlertScheduleInstance.objects.using(partition_config.get_proxy_db()).count(), 0)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db1).count(), 0)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db2).count(), 0)

        instance = self.make_alert_schedule_instance(self.p1_uuid)
        save_alert_schedule_instance(instance)

        self.assertEqual(AlertScheduleInstance.objects.using(partition_config.get_proxy_db()).count(), 0)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db1).count(), 1)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db2).count(), 0)
Exemplo n.º 10
0
    def test_save_alert_schedule_instance(self):
        self.assertEqual(AlertScheduleInstance.objects.using(partition_config.proxy_db).count(), 0)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db1).count(), 0)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db2).count(), 0)

        instance = self.make_alert_schedule_instance(self.p1_uuid)
        save_alert_schedule_instance(instance)

        self.assertEqual(AlertScheduleInstance.objects.using(partition_config.proxy_db).count(), 0)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db1).count(), 1)
        self.assertEqual(AlertScheduleInstance.objects.using(self.db2).count(), 0)
Exemplo n.º 11
0
 def test_uuid_partitioning_correct(self):
     from corehq.sql_db.shard_data_management import get_count_of_models_by_shard_for_testing
     instance = BaseSchedulingPartitionedDBAccessorsTest.make_alert_schedule_instance(
         self.p1_uuid, domain=self.domain
     )
     save_alert_schedule_instance(instance)
     self.assertEqual(AlertScheduleInstance.objects.using(self.db1).count(), 1)
     matches = get_count_of_unmatched_models_by_shard(self.db1, AlertScheduleInstance)
     self.assertEqual(0, len(matches))
     all_data = get_count_of_models_by_shard_for_testing(self.db1, AlertScheduleInstance)
     self.assertEqual(1, len(all_data))
     self.assertEqual((0, 1), all_data[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)
Exemplo n.º 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)