def test_delete_phone_numbers_for_owners(self): with self.create_case_contact('9990001') as case1, \ self.create_case_contact('9990002') as case2, \ self.create_case_contact('9990003') as case3: self.assertEqual(PhoneNumber.by_owner_id(case1.case_id).count(), 1) self.assertEqual(PhoneNumber.by_owner_id(case2.case_id).count(), 1) self.assertEqual(PhoneNumber.by_owner_id(case3.case_id).count(), 1) delete_phone_numbers_for_owners([case2.case_id, case3.case_id]) self.assertEqual(PhoneNumber.by_owner_id(case1.case_id).count(), 1) self.assertEqual(PhoneNumber.by_owner_id(case2.case_id).count(), 0) self.assertEqual(PhoneNumber.by_owner_id(case3.case_id).count(), 0)
def create_test_case(domain, case_type, case_name, case_properties=None, drop_signals=True, case_id=None, owner_id=None, user_id=None): from corehq.apps.sms.tasks import delete_phone_numbers_for_owners from corehq.apps.reminders.tasks import delete_reminders_for_cases from corehq.form_processor.backends.sql.dbaccessors import CaseAccessorSQL from corehq.form_processor.utils.general import should_use_sql_backend case = create_and_save_a_case(domain, case_id or uuid.uuid4().hex, case_name, case_properties=case_properties, case_type=case_type, drop_signals=drop_signals, owner_id=owner_id, user_id=user_id) try: yield case finally: delete_phone_numbers_for_owners([case.case_id]) delete_reminders_for_cases(domain, [case.case_id]) if should_use_sql_backend(domain): CaseAccessorSQL.hard_delete_cases(domain, [case.case_id]) else: case.delete()
def _sync_case_for_messaging(domain, case_id): try: case = CaseAccessors(domain).get_case(case_id) sms_tasks.clear_case_caches(case) except CaseNotFound: case = None if case is None or case.is_deleted: sms_tasks.delete_phone_numbers_for_owners([case_id]) delete_schedule_instances_for_cases(domain, [case_id]) return if use_phone_entries(): sms_tasks._sync_case_phone_number(case) rules = AutomaticUpdateRule.by_domain_cached(case.domain, AutomaticUpdateRule.WORKFLOW_SCHEDULING) rules_by_case_type = AutomaticUpdateRule.organize_rules_by_case_type(rules) for rule in rules_by_case_type.get(case.type, []): rule.run_rule(case, utcnow())
with CriticalSection([get_sync_key(case_id)], timeout=5 * 60): _sync_case_for_messaging_rule(domain, case_id, rule_id) except Exception as e: self.retry(exc=e) def _sync_case_for_messaging(domain, case_id): try: case = CaseAccessors(domain).get_case(case_id) sms_tasks.clear_case_caches(case) except CaseNotFound: case = None case_load_counter("messaging_sync", domain)() if case is None or case.is_deleted: sms_tasks.delete_phone_numbers_for_owners([case_id]) delete_schedule_instances_for_cases(domain, [case_id]) return if use_phone_entries(): sms_tasks._sync_case_phone_number(case) rules = AutomaticUpdateRule.by_domain_cached( case.domain, AutomaticUpdateRule.WORKFLOW_SCHEDULING) rules_by_case_type = AutomaticUpdateRule.organize_rules_by_case_type(rules) for rule in rules_by_case_type.get(case.type, []): rule.run_rule(case, utcnow()) def _get_cached_rule(domain, rule_id): rules = AutomaticUpdateRule.by_domain_cached(
def clear_messaging_for_case(domain, case_id): sms_tasks.delete_phone_numbers_for_owners([case_id]) delete_schedule_instances_for_cases(domain, [case_id])