def test_reminder_delete(self): reminder = (CaseReminderHandler .create(self.domain, 'test') .set_case_criteria_start_condition('participant', 'status', MATCH_EXACT, 'green') .set_case_criteria_start_date() .set_case_recipient() .set_sms_content_type('en') .set_daily_schedule(fire_time=time(12, 0), message={'en': 'Hello {case.name}, your test result was normal.'}) .set_stop_condition(max_iteration_count=REPEAT_SCHEDULE_INDEFINITELY) .set_advanced_options()) reminder.save() r1 = CaseReminder(domain=self.domain, handler_id=reminder.get_id) r2 = CaseReminder(domain=self.domain, handler_id='abc') r3 = CaseReminder(domain='def', handler_id='ghi') r1.save() r2.save() r3.save() self.assertEqual(len(self.get_all_reminders()), 3) reminder.retire() self.assertEqual(len(self.get_all_reminders()), 2) r1 = CaseReminder.get(r1.get_id) r2 = CaseReminder.get(r2.get_id) r3 = CaseReminder.get(r3.get_id) self.assertEqual(r1.doc_type, 'CaseReminder-Deleted') self.assertEqual(r2.doc_type, 'CaseReminder') self.assertEqual(r3.doc_type, 'CaseReminder')
def test_agency_user_case_from_voucher_fulfilled_by_id(self): prescription = self.create_prescription_case() voucher = self.create_voucher_case(prescription.case_id) self.assertIsNone( agency_user_case_from_voucher_fulfilled_by_id( None, CaseReminder(domain=self.domain) ) ) self.assertIsNone( agency_user_case_from_voucher_fulfilled_by_id( None, CaseReminder(domain=self.domain, case_id=voucher.case_id) ) ) user = CommCareUser.create(self.domain, 'mobile', 'password') update_case(self.domain, voucher.case_id, case_properties={'voucher_fulfilled_by_id': user.get_id}) with create_user_case(user) as user_case: self.assertEqual( agency_user_case_from_voucher_fulfilled_by_id( None, CaseReminder(domain=self.domain, case_id=voucher.case_id) ).case_id, user_case.case_id )
def test_person_case_from_voucher_case(self): prescription = self.create_prescription_case() voucher = self.create_voucher_case(prescription.case_id) self.assertIsNone( person_case_from_voucher_case(None, CaseReminder(domain=self.domain)) ) self.assertIsNone( person_case_from_voucher_case(None, CaseReminder(domain=self.domain, case_id=prescription.case_id)) ) self.assertEqual( person_case_from_voucher_case(None, CaseReminder(domain=self.domain, case_id=voucher.case_id)).case_id, self.person_id )
def _test_prescription_voucher_alert_with_language(self, voucher, language_code, expected_message): self.assertEqual( prescription_voucher_alert(CaseReminder(case_id=voucher.case_id), CaseReminderHandler(default_lang='en'), FakeRecipient(language_code)), expected_message)
def test_prescription_voucher_alert_recipients(self): located_in_mehsana.clear(self.phi) self.dto.site_code = LOCATION_SITE_CODE_MEHSANA self.dto.save() self.assign_person_to_location(self.phi.location_id) prescription = self.create_prescription_case() voucher = self.create_voucher_case(prescription.case_id) user = CommCareUser.create(self.domain, 'mobile', 'password', location=self.phi) # No user case created yet result = prescription_voucher_alert_recipients( None, CaseReminder(domain=self.domain, case_id=voucher.case_id) ) self.assertTrue(isinstance(result, CommCareCaseSQL)) self.assertEqual(result.case_id, self.person_id) # Create user case with create_user_case(user) as user_case: result = prescription_voucher_alert_recipients( None, CaseReminder(domain=self.domain, case_id=voucher.case_id) ) self.assertTrue(isinstance(result, list)) self.assertEqual( [case.case_id for case in result], [self.person_id, user_case.case_id] ) # Test location outside Mehsana located_in_mehsana.clear(self.phi) self.dto.site_code = 'dto-other' self.dto.save() result = prescription_voucher_alert_recipients( None, CaseReminder(domain=self.domain, case_id=voucher.case_id) ) self.assertTrue(isinstance(result, CommCareCaseSQL)) self.assertEqual(result.case_id, self.person_id)
def test_recipient_case_owner_location_parent(self): parent_location = SQLLocation.objects.create( domain=self.domain, name='parent test', site_code='parent', location_type=self.parent_location_type) child_location = SQLLocation.objects.create( domain=self.domain, name='child test', site_code='child', location_type=self.child_location_type, parent=parent_location) self.user.set_location(child_location.couch_location) with create_test_case(self.domain, 'test-case', 'test-name', owner_id=self.user.get_id) as case: self.assertEqual(case.owner_id, self.user.get_id) handler = CaseReminderHandler( domain=self.domain, recipient=RECIPIENT_CASE_OWNER_LOCATION_PARENT) reminder = CaseReminder(domain=self.domain, case_id=case.case_id) # Test the recipient is returned correctly with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler): self.assertEqual(reminder.recipient, [parent_location]) # Remove parent location parent_location.delete() child_location.parent = None child_location.save() with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler): self.assertIsNone(reminder.recipient) # Remove child location self.user.unset_location() child_location.delete() with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler): self.assertIsNone(reminder.recipient) # Remove case reminder.case_id = None with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler): self.assertIsNone(reminder.recipient)
def test_beneficiary_registration_recipients(self): located_in_mehsana.clear(self.phi) self.dto.site_code = LOCATION_SITE_CODE_MEHSANA self.dto.save() self.assign_person_to_location(self.phi.location_id) update_case(self.domain, self.person_id, case_properties={'fo': self.pcc.location_id}) user = CommCareUser.create(self.domain, 'mobile', 'password', location=self.pcc) # No user case created yet result = beneficiary_registration_recipients( None, CaseReminder(domain=self.domain, case_id=self.person_id)) self.assertTrue(isinstance(result, CommCareCaseSQL)) self.assertEqual(result.case_id, self.person_id) # Create user case with self.create_user_case(user) as user_case: result = beneficiary_registration_recipients( None, CaseReminder(domain=self.domain, case_id=self.person_id)) self.assertTrue(isinstance(result, list)) self.assertEqual([case.case_id for case in result], [self.person_id, user_case.case_id]) # Test location outside Mehsana located_in_mehsana.clear(self.phi) self.dto.site_code = 'dto-other' self.dto.save() result = beneficiary_registration_recipients( None, CaseReminder(domain=self.domain, case_id=self.person_id)) self.assertTrue(isinstance(result, CommCareCaseSQL)) self.assertEqual(result.case_id, self.person_id)
def test_host_case_owner_location(self): parent_location = SQLLocation.objects.create( domain=self.domain, name='parent test', site_code='parent', location_type=self.parent_location_type) self.addCleanup(parent_location.delete) child_location = SQLLocation.objects.create( domain=self.domain, name='child test', site_code='child', location_type=self.child_location_type, parent=parent_location) self.addCleanup(child_location.delete) with create_test_case(self.domain, 'test-extension-case', 'name') as extension_case: with create_test_case(self.domain, 'test-host-case', 'name') as host_case: update_case( self.domain, host_case.case_id, case_properties={'owner_id': child_location.location_id}) set_parent_case(self.domain, extension_case, host_case, relationship='extension') handler1 = CaseReminderHandler( domain=self.domain, recipient='HOST_CASE_OWNER_LOCATION') handler2 = CaseReminderHandler( domain=self.domain, recipient='HOST_CASE_OWNER_LOCATION_PARENT') reminder = CaseReminder(domain=self.domain, case_id=extension_case.case_id) # Test the recipients are returned correctly with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler1): self.assertEqual(reminder.recipient, [child_location]) with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler2): self.assertEqual(reminder.recipient, [parent_location]) # Remove parent location reference child_location.parent = None child_location.save() with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler2): self.assertIsNone(reminder.recipient) # Test location that does not exist update_case(self.domain, host_case.case_id, case_properties={'owner_id': 'does-not-exist'}) with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler1): self.assertIsNone(reminder.recipient) # Test on a case that is not an extension case reminder.case_id = host_case.case_id with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler1): self.assertIsNone(reminder.recipient) # Test on a blank case id reminder.case_id = None with patch('corehq.apps.reminders.models.CaseReminder.handler', new=handler1): self.assertIsNone(reminder.recipient)