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])
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())
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)
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)
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)
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)
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)
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}, )
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)
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)
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)
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')