Esempio n. 1
0
    def test_child_case_recipient(self):
        with create_case(self.domain, 'person') as child_1, \
                create_case(self.domain, 'person') as child_2, \
                create_case(self.domain, 'person') as parent:

            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=parent.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_ALL_CHILD_CASES)
            self.assertIsInstance(instance.recipient, list)
            self.assertEqual(len(instance.recipient), 0)

            set_parent_case(self.domain,
                            child_1,
                            parent,
                            relationship='child',
                            identifier='parent')
            set_parent_case(self.domain,
                            child_2,
                            parent,
                            relationship='child',
                            identifier='parent')

            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=parent.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_ALL_CHILD_CASES)

            self.assertIsInstance(instance.recipient, list)
            self.assertEqual(len(instance.recipient), 2)
            self.assertItemsEqual([c.case_id for c in instance.recipient],
                                  [child_1.case_id, child_2.case_id])
Esempio n. 2
0
    def test_email_case_property_recipient(self):
        with create_case(self.domain,
                         'person',
                         owner_id=self.city_location.location_id,
                         update={
                             'recipient': '*****@*****.**',
                             'language_code': 'en',
                             'time_zone': 'sast'
                         }) as case:
            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=case.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_CASE_PROPERTY_EMAIL,
                recipient_id='recipient')
            self.assertEqual(instance.recipient.get_email(), '*****@*****.**')
            self.assertEqual(instance.recipient.get_language_code(), 'en')
            self.assertEqual(instance.recipient.get_time_zone(), 'sast')

        # test that cases without the properties don't fail
        with create_case(self.domain,
                         'person',
                         owner_id=self.city_location.location_id) as case:
            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=case.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_CASE_PROPERTY_EMAIL,
                recipient_id='recipient')
            self.assertIsNone(instance.recipient.get_email())
            self.assertIsNone(instance.recipient.get_language_code())
            self.assertIsNone(instance.recipient.get_time_zone())
Esempio n. 3
0
 def run(self, result=None):
     mother_kwargs = {
         'external_id': '12345',
         'update': {
             'given_names': 'Alica Amelia',
             'family_name': 'Apple',
             'phone_number': '555-1234',
         },
     }
     with create_case(DOMAIN, 'referral') as referral, \
             create_case(DOMAIN, 'mother', **mother_kwargs) as mother:
         self.referral_case = referral
         self.mother_case = mother
         super().run(result)
Esempio n. 4
0
    def test_case_group_recipient_with_user_data_filter(self):
        # The user data filter should have no effect here because all
        # the recipients are cases.

        schedule = TimedSchedule.create_simple_daily_schedule(
            self.domain, TimedEvent(time=time(9, 0)),
            SMSContent(message={'en': 'Hello'}))
        schedule.user_data_filter = {'role': ['nurse']}
        schedule.save()

        with create_case(self.domain, 'person') as case:
            case_group = CommCareCaseGroup(domain=self.domain,
                                           cases=[case.case_id])
            case_group.save()
            self.addCleanup(case_group.delete)

            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                timed_schedule_id=schedule.schedule_id,
                recipient_type=ScheduleInstance.RECIPIENT_TYPE_CASE_GROUP,
                recipient_id=case_group.get_id,
            )
            recipients = list(instance.expand_recipients())
            self.assertEqual(len(recipients), 1)
            self.assertEqual(recipients[0].case_id, case.case_id)
Esempio n. 5
0
 def test_case_recipient(self):
     with create_case(self.domain, 'person') as case:
         instance = CaseTimedScheduleInstance(domain=self.domain,
                                              case_id=case.case_id,
                                              recipient_type='Self')
         self.assertTrue(is_commcarecase(instance.recipient))
         self.assertEqual(instance.recipient.case_id, case.case_id)
Esempio n. 6
0
 def create_usercase(self, user):
     create_case_kwargs = {
         'external_id': user.get_id,
         'update': {
             'hq_user_id': user.get_id
         },
     }
     return create_case(self.domain, 'commcare-user', **create_case_kwargs)
Esempio n. 7
0
    def test_owner_recipient(self):
        with create_case(self.domain,
                         'person',
                         owner_id=self.city_location.location_id) as case:
            instance = CaseTimedScheduleInstance(domain=self.domain,
                                                 case_id=case.case_id,
                                                 recipient_type='Owner')
            self.assertTrue(isinstance(instance.recipient, SQLLocation))
            self.assertEqual(instance.recipient.location_id,
                             self.city_location.location_id)

        with create_case(self.domain, 'person',
                         owner_id=self.group.get_id) as case:
            instance = CaseTimedScheduleInstance(domain=self.domain,
                                                 case_id=case.case_id,
                                                 recipient_type='Owner')
            self.assertTrue(isinstance(instance.recipient, Group))
            self.assertEqual(instance.recipient.get_id, self.group.get_id)

        with create_case(self.domain,
                         'person',
                         owner_id=self.mobile_user.get_id) as case:
            instance = CaseTimedScheduleInstance(domain=self.domain,
                                                 case_id=case.case_id,
                                                 recipient_type='Owner')
            self.assertTrue(isinstance(instance.recipient, CommCareUser))
            self.assertEqual(instance.recipient.get_id,
                             self.mobile_user.get_id)

        with create_case(self.domain, 'person',
                         owner_id=self.web_user.get_id) as case:
            instance = CaseTimedScheduleInstance(domain=self.domain,
                                                 case_id=case.case_id,
                                                 recipient_type='Owner')
            self.assertTrue(isinstance(instance.recipient, WebUser))
            self.assertEqual(instance.recipient.get_id, self.web_user.get_id)

        with create_case(self.domain, 'person') as case:
            instance = CaseTimedScheduleInstance(domain=self.domain,
                                                 case_id=case.case_id,
                                                 recipient_type='Owner')
            self.assertIsNone(instance.recipient)
Esempio n. 8
0
def create_usercase(user):
    """
    Returns a context manager that yields the user case and
    deletes it on exit.
    """
    return create_case(
        user.domain,
        USERCASE_TYPE,
        owner_id=user.get_id,
        external_id=user.get_id,
        update={'hq_user_id': user.get_id},
    )
Esempio n. 9
0
    def test_parent_case_recipient(self):
        with create_case(self.domain, 'person') as child, create_case(
                self.domain, 'person') as parent:
            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=child.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_PARENT_CASE)
            self.assertIsNone(instance.recipient)

            set_parent_case(self.domain,
                            child,
                            parent,
                            relationship='child',
                            identifier='parent')
            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=child.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_PARENT_CASE)
            self.assertEqual(instance.recipient.case_id, parent.case_id)
Esempio n. 10
0
    def test_username_case_property_recipient(self):
        # test valid username
        with create_case(self.domain,
                         'person',
                         owner_id=self.city_location.location_id,
                         update={'recipient': 'mobile'}) as case:
            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=case.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_CASE_PROPERTY_USER,
                recipient_id='recipient')
            self.assertEqual(instance.recipient.get_id,
                             self.full_mobile_user.get_id)

        # test invalid username
        with create_case(self.domain,
                         'person',
                         owner_id=self.city_location.location_id,
                         update={'recipient': 'mobile10'}) as case:
            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=case.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_CASE_PROPERTY_USER,
                recipient_id='recipient')
            self.assertIsNone(instance.recipient)

        # test no username
        with create_case(self.domain,
                         'person',
                         owner_id=self.city_location.location_id) as case:
            instance = CaseTimedScheduleInstance(
                domain=self.domain,
                case_id=case.case_id,
                recipient_type=CaseScheduleInstanceMixin.
                RECIPIENT_TYPE_CASE_PROPERTY_USER,
                recipient_id='recipient')
            self.assertIsNone(instance.recipient)
Esempio n. 11
0
    def test_specific_case_recipient(self):
        with create_case(self.domain, 'person') as case:
            instance = ScheduleInstance(
                domain=self.domain,
                recipient_type=ScheduleInstance.RECIPIENT_TYPE_CASE,
                recipient_id=case.case_id,
            )
            self.assertEqual(instance.recipient.case_id, case.case_id)

        instance = ScheduleInstance(
            domain=self.domain,
            recipient_type=ScheduleInstance.RECIPIENT_TYPE_CASE,
            recipient_id='id-does-not-exist',
        )
        self.assertIsNone(instance.recipient)
Esempio n. 12
0
    def test_ignoring_entries(self):
        with create_case(self.domain, 'person') as case:
            update_case(self.domain,
                        case.case_id,
                        case_properties={
                            'contact_phone_number': '12345',
                            'contact_phone_number_is_verified': '1'
                        })

            self.assertPhoneEntryCount(1)
            self.assertPhoneEntryCount(1, only_count_two_way=True)

            with override_settings(USE_PHONE_ENTRIES=False):
                update_case(self.domain,
                            case.case_id,
                            case_properties={'contact_phone_number': '23456'})
                case = CommCareCase.objects.get_case(case.case_id, self.domain)

                self.assertPhoneEntryCount(1)
                self.assertPhoneEntryCount(1, only_count_two_way=True)
                self.assertTwoWayEntry(
                    PhoneNumber.objects.get(owner_id=case.case_id), '12345')
                self.assertEqual(
                    Content.get_two_way_entry_or_phone_number(case), '23456')