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)
Example #2
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()
Example #3
0
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())
Example #4
0
        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(
Example #5
0
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])