Exemple #1
0
    def test_deleted_case_migration(self):
        parent_case_id = uuid.uuid4().hex
        child_case_id = uuid.uuid4().hex
        parent_case = create_and_save_a_case(self.domain_name, case_id=parent_case_id, case_name='test parent')
        child_case = create_and_save_a_case(self.domain_name, case_id=child_case_id, case_name='test child')
        set_parent_case(self.domain_name, child_case, parent_case)

        form_ids = self._get_form_ids()
        self.assertEqual(3, len(form_ids))
        FormAccessors(self.domain.name).soft_delete_forms(
            form_ids, datetime.utcnow(), 'test-deletion-with-cases'
        )
        CaseAccessors(self.domain.name).soft_delete_cases(
            [parent_case_id, child_case_id], datetime.utcnow(), 'test-deletion-with-cases'
        )
        self.assertEqual(2, len(get_doc_ids_in_domain_by_type(
            self.domain_name, "CommCareCase-Deleted", XFormInstance.get_db())
        ))
        self._do_migration_and_assert_flags(self.domain_name)
        self.assertEqual(2, len(CaseAccessorSQL.get_deleted_case_ids_in_domain(self.domain_name)))
        self._compare_diffs([])
        parent_transactions = CaseAccessorSQL.get_transactions(parent_case_id)
        self.assertEqual(2, len(parent_transactions))
        self.assertTrue(parent_transactions[0].is_case_create)
        self.assertTrue(parent_transactions[1].is_form_transaction)
        child_transactions = CaseAccessorSQL.get_transactions(child_case_id)
        self.assertEqual(2, len(child_transactions))
        self.assertTrue(child_transactions[0].is_case_create)
        self.assertTrue(child_transactions[1].is_case_index)
Exemple #2
0
    def test_migrate_ledgers(self):
        case_id = uuid.uuid4().hex
        create_and_save_a_case(self.domain_name,
                               case_id=case_id,
                               case_name="Simon's sweet shop")
        self._set_balance(100,
                          case_id,
                          self.liquorice._id,
                          type="set_the_liquorice_balance")
        self._set_balance(50, case_id, self.sherbert._id)
        self._set_balance(175, case_id, self.jelly_babies._id)

        expected_stock_state = {
            'stock': {
                self.liquorice._id: 100,
                self.sherbert._id: 50,
                self.jelly_babies._id: 175
            }
        }
        self._validate_ledger_data(self._get_ledger_state(case_id),
                                   expected_stock_state)
        self._do_migration_and_assert_flags(self.domain_name)
        self._validate_ledger_data(self._get_ledger_state(case_id),
                                   expected_stock_state)

        transactions = LedgerAccessorSQL.get_ledger_transactions_for_case(
            case_id)
        self.assertEqual(3, len(transactions))

        self._compare_diffs([])
 def test_report_case_reindexer(self):
     cases_included = set()
     for i in range(3):
         case = create_and_save_a_case(DOMAIN,
                                       uuid.uuid4().hex,
                                       'case_name-{}'.format(i))
         cases_included.add(case.case_id)
Exemple #4
0
 def _create_case_and_sync_to_es(self):
     case_id = uuid.uuid4().hex
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     with self.process_case_changes:
         create_and_save_a_case(self.domain, case_id, case_name)
     self.elasticsearch.indices.refresh(CASE_INDEX_INFO.index)
     return case_id, case_name
    def test_global_registry_ucr(self):
        """Globally accessible UCR get's data from all participating domains regardless
        of grants.
        """
        config = get_sample_registry_data_source(
            domain=self.registry_owner_domain,
            registry_slug=self.registry_1.slug,
            globally_accessible=True)
        config.save()
        self.addCleanup(config.delete)

        adapter = get_indicator_adapter(config)
        adapter.build_table()
        self.addCleanup(adapter.drop_table)

        pillow = get_kafka_ucr_registry_pillow(ucr_configs=[config],
                                               processor_chunk_size=100)

        expected = {}
        with process_pillow_changes(pillow):
            for domain in self.participants:
                case = create_and_save_a_case(domain,
                                              uuid.uuid4().hex,
                                              f"name-{domain}",
                                              case_type="ticket",
                                              case_properties={
                                                  "category": "bug",
                                                  "tags": "easy-win public",
                                                  "is_starred": "yes",
                                                  "estimate": "2.3",
                                                  "priority": "4",
                                              })
                expected[case.case_id] = domain
Exemple #6
0
    def test_deleted_case_migration(self):
        parent_case_id = uuid.uuid4().hex
        child_case_id = uuid.uuid4().hex
        parent_case = create_and_save_a_case(self.domain_name, case_id=parent_case_id, case_name='test parent')
        child_case = create_and_save_a_case(self.domain_name, case_id=child_case_id, case_name='test child')
        set_parent_case(self.domain_name, child_case, parent_case)

        form_ids = self._get_form_ids()
        self.assertEqual(3, len(form_ids))
        FormAccessors(self.domain.name).soft_delete_forms(
            form_ids, datetime.utcnow(), 'test-deletion-with-cases'
        )
        CaseAccessors(self.domain.name).soft_delete_cases(
            [parent_case_id, child_case_id], datetime.utcnow(), 'test-deletion-with-cases'
        )
        self.assertEqual(2, len(get_doc_ids_in_domain_by_type(
            self.domain_name, "CommCareCase-Deleted", XFormInstance.get_db())
        ))
        self._do_migration_and_assert_flags(self.domain_name)
        self.assertEqual(2, len(CaseAccessorSQL.get_deleted_case_ids_in_domain(self.domain_name)))
        self._compare_diffs([])
        parent_transactions = CaseAccessorSQL.get_transactions(parent_case_id)
        self.assertEqual(2, len(parent_transactions))
        self.assertTrue(parent_transactions[0].is_case_create)
        self.assertTrue(parent_transactions[1].is_form_transaction)
        child_transactions = CaseAccessorSQL.get_transactions(child_case_id)
        self.assertEqual(2, len(child_transactions))
        self.assertTrue(child_transactions[0].is_case_create)
        self.assertTrue(child_transactions[1].is_case_index)
Exemple #7
0
 def _create_case_and_sync_to_es(self, domain):
     case_id = uuid.uuid4().hex
     case_name = "case-name-{}".format(uuid.uuid4().hex)
     with process_kafka_changes("ReportCaseToElasticsearchPillow"):
         with process_couch_changes("DefaultChangeFeedPillow"):
             create_and_save_a_case(domain, case_id, case_name)
     self.elasticsearch.indices.refresh(REPORT_CASE_INDEX_INFO.index)
     return case_id, case_name
 def test_case_lookups(self):
     case_id = uuid.uuid4().hex
     create_and_save_a_case(domain=self.domain,
                            case_id=case_id,
                            case_name='related doc test case')
     expression = self._get_expression('CommCareCase')
     doc = self._get_doc(case_id)
     self.assertEqual(case_id, expression(doc, EvaluationContext(doc, 0)))
Exemple #9
0
 def _create_case_and_sync_to_es(self):
     case_id = uuid.uuid4().hex
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     with process_kafka_changes('CaseToElasticsearchPillow'):
         with process_couch_changes('DefaultChangeFeedPillow'):
             create_and_save_a_case(self.domain, case_id, case_name)
     self.elasticsearch.indices.refresh(CASE_INDEX_INFO.index)
     return case_id, case_name
Exemple #10
0
 def test_basic_case_migration(self):
     create_and_save_a_case(self.domain_name,
                            case_id=uuid.uuid4().hex,
                            case_name='test case')
     self.assertEqual(1, len(self._get_case_ids()))
     self._do_migration_and_assert_flags(self.domain_name)
     self.assertEqual(1, len(self._get_case_ids()))
     self._compare_diffs([])
 def _create_case_and_sync_to_es(self, domain):
     case_id = uuid.uuid4().hex
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     with process_pillow_changes('case-pillow'):
         with process_pillow_changes('DefaultChangeFeedPillow'):
             create_and_save_a_case(domain, case_id, case_name)
     self.elasticsearch.indices.refresh(REPORT_CASE_INDEX_INFO.index)
     return case_id, case_name
 def _create_case_and_sync_to_es(self, domain):
     case_id = uuid.uuid4().hex
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     with process_pillow_changes('case-pillow'):
         with process_pillow_changes('DefaultChangeFeedPillow'):
             create_and_save_a_case(domain, case_id, case_name)
     self.elasticsearch.indices.refresh(REPORT_CASE_INDEX_INFO.index)
     return case_id, case_name
 def _create_case_and_sync_to_es(self):
     case_id = uuid.uuid4().hex
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     with process_kafka_changes('CaseToElasticsearchPillow'):
         with process_couch_changes('DefaultChangeFeedPillow'):
             create_and_save_a_case(self.domain, case_id, case_name)
     self.elasticsearch.indices.refresh(CASE_INDEX_INFO.index)
     return case_id, case_name
 def _create_case_and_sync_to_es(self):
     case_id = uuid.uuid4().hex
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     with process_pillow_changes('case-pillow', {'skip_ucr': True}):
         with process_pillow_changes('DefaultChangeFeedPillow'):
             create_and_save_a_case(self.domain, case_id, case_name)
     self.elasticsearch.indices.refresh(CASE_INDEX_INFO.alias)
     return case_id, case_name
Exemple #15
0
 def _make_case(self, domain, case_properties):
     # make a case
     case_properties = case_properties or {}
     case_id = case_properties.pop('_id')
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     owner_id = case_properties.pop('owner_id', None)
     case = create_and_save_a_case(domain, case_id, case_name, case_properties, owner_id=owner_id)
     return case
Exemple #16
0
 def _make_case(self, domain=None, case_properties=None):
     # make a case
     case_id = uuid.uuid4().hex
     case_name = 'case-name-{}'.format(uuid.uuid4().hex)
     if domain is None:
         domain = self.domain
     case = create_and_save_a_case(domain, case_id, case_name, case_properties)
     return case
Exemple #17
0
 def test_basic_case_migration(self):
     create_and_save_a_case(self.domain,
                            case_id=uuid.uuid4().hex,
                            case_name='test case')
     self.assertEqual(
         1, len(CaseAccessors(domain=self.domain).get_case_ids_in_domain()))
     self._do_migration_and_assert_flags(self.domain)
     self.assertEqual(
         1, len(CaseAccessors(domain=self.domain).get_case_ids_in_domain()))
Exemple #18
0
    def test_case_with_indices_migration(self):
        parent_case_id = uuid.uuid4().hex
        child_case_id = uuid.uuid4().hex
        parent_case = create_and_save_a_case(self.domain_name, case_id=parent_case_id, case_name='test parent')
        child_case = create_and_save_a_case(self.domain_name, case_id=child_case_id, case_name='test child')
        set_parent_case(self.domain_name, child_case, parent_case)

        self.assertEqual(2, len(self._get_case_ids()))
        self._do_migration_and_assert_flags(self.domain_name)
        self.assertEqual(2, len(self._get_case_ids()))
        self._compare_diffs([])

        indices = CaseAccessorSQL.get_indices(self.domain_name, child_case_id)
        self.assertEqual(1, len(indices))
        self.assertEqual(parent_case_id, indices[0].referenced_id)
Exemple #19
0
    def test_case_with_indices_migration(self):
        parent_case_id = uuid.uuid4().hex
        child_case_id = uuid.uuid4().hex
        parent_case = create_and_save_a_case(self.domain_name, case_id=parent_case_id, case_name='test parent')
        child_case = create_and_save_a_case(self.domain_name, case_id=child_case_id, case_name='test child')
        set_parent_case(self.domain_name, child_case, parent_case)

        self.assertEqual(2, len(self._get_case_ids()))
        self._do_migration_and_assert_flags(self.domain_name)
        self.assertEqual(2, len(self._get_case_ids()))
        self._compare_diffs([])

        indices = CaseAccessorSQL.get_indices(self.domain_name, child_case_id)
        self.assertEqual(1, len(indices))
        self.assertEqual(parent_case_id, indices[0].referenced_id)
Exemple #20
0
    def test_case_soft_deletion(self):
        # make a case
        case_id = uuid.uuid4().hex
        case_name = 'case-name-{}'.format(uuid.uuid4().hex)
        case = create_and_save_a_case(self.domain, case_id, case_name)

        # send to elasticsearch
        self._sync_couch_cases_to_es()

        # verify there
        results = CaseES().run()
        self.assertEqual(1, results.total)

        seq_before_deletion = self.pillow.get_change_feed().get_latest_change_id()

        # soft delete the case
        case.soft_delete()

        # sync to elasticsearch
        self._sync_couch_cases_to_es(since=seq_before_deletion)

        # ensure not there anymore
        results = CaseES().run()
        self.assertEqual(0, results.total)

        # cleanup
        case.delete()
class ReportCaseReindexerTest(TestCase):
    def setUp(self):
        super(ReportCaseReindexerTest, self).setUp()
        FormProcessorTestUtils.delete_all_xforms()
        FormProcessorTestUtils.delete_all_cases()
        with trap_extra_setup(ConnectionError):
            self.elasticsearch = get_es_new()
            ensure_index_deleted(REPORT_CASE_INDEX_INFO.index)

    def tearDown(self):
        FormProcessorTestUtils.delete_all_xforms()
        FormProcessorTestUtils.delete_all_cases()
        ensure_index_deleted(REPORT_CASE_INDEX_INFO.index)
        super(ReportCaseReindexerTest, self).tearDown()

    @run_with_all_backends
    def test_report_case_reindexer(self):
        cases_included = set()
        for i in range(3):
            case = create_and_save_a_case(DOMAIN,
                                          uuid.uuid4().hex,
                                          'case_name-{}'.format(i))
            cases_included.add(case.case_id)

        # excluded case
        create_and_save_a_case('unsupported', uuid.uuid4().hex, 'unsupported')

        reindex_and_clean('report-case')

        # verify there
        results = CaseES("report_cases").run()
        self.assertEqual(3, results.total, results.hits)
        ids_in_es = {doc['_id'] for doc in results.hits}
        self.assertEqual(cases_included, ids_in_es)
    def test_report_case_reindexer(self):
        cases_included = set()
        for i in range(3):
            case = create_and_save_a_case(DOMAIN, uuid.uuid4().hex, 'case_name-{}'.format(i))
            cases_included.add(case.case_id)

        # excluded case
        create_and_save_a_case('unsupported', uuid.uuid4().hex, 'unsupported')

        reindex_and_clean('report-case')

        # verify there
        results = CaseES("report_cases").run()
        self.assertEqual(3, results.total, results.hits)
        ids_in_es = {doc['_id'] for doc in results.hits}
        self.assertEqual(cases_included, ids_in_es)
Exemple #23
0
    def test_case_pillow_sql(self):
        consumer = get_test_kafka_consumer(topics.CASE_SQL)
        # have to get the seq id before the change is processed
        kafka_seq = consumer.offsets()['fetch'][(topics.CASE_SQL, 0)]

        # make a case
        case_id = uuid.uuid4().hex
        case_name = 'case-name-{}'.format(uuid.uuid4().hex)
        case = create_and_save_a_case(self.domain, case_id, case_name)

        # confirm change made it to kafka
        message = consumer.next()
        change_meta = change_meta_from_kafka_message(message.value)
        self.assertEqual(case.case_id, change_meta.document_id)
        self.assertEqual(self.domain, change_meta.domain)

        # send to elasticsearch
        sql_pillow = get_sql_case_to_elasticsearch_pillow()
        sql_pillow.process_changes(since=kafka_seq, forever=False)
        self.elasticsearch.indices.refresh(self.pillow.es_index)

        # confirm change made it to elasticserach
        results = CaseES().run()
        self.assertEqual(1, results.total)
        case_doc = results.hits[0]
        self.assertEqual(self.domain, case_doc['domain'])
        self.assertEqual(case_id, case_doc['_id'])
        self.assertEqual(case_name, case_doc['name'])
Exemple #24
0
    def setUpClass(cls):
        super().setUpClass()
        cls.es = get_es_new()
        cls.es_interface = ElasticsearchInterface(cls.es)
        cls.index = TEST_INDEX_INFO.index
        cls.es_alias = TEST_INDEX_INFO.alias

        with trap_extra_setup(ConnectionError):
            ensure_index_deleted(cls.index)
            initialize_index_and_mapping(cls.es, TEST_INDEX_INFO)

        cls.domain = uuid.uuid4().hex
        cls.case_ids = [uuid.uuid4().hex for i in range(4)]
        with drop_connected_signals(sql_case_post_save):
            for case_id in cls.case_ids:
                create_and_save_a_case(cls.domain, case_id, case_id)
Exemple #25
0
    def test_form_touches_case_without_updates(self):
        case_id = uuid.uuid4().hex
        create_and_save_a_case(self.domain_name,
                               case_id=case_id,
                               case_name='touched by a form',
                               user_id='user1')

        form_id = uuid.uuid4().hex
        xml = """<?xml version='1.0' ?>
                <data uiVersion="1" version="1" name="" xmlns="http://openrosa.org/formdesigner/123">
                    <name>fgg</name>
                    <date>2011-06-07</date>
                    <n0:case case_id="{case_id}" user_id="user1" date_modified="{date}"
                        xmlns:n0="http://commcarehq.org/case/transaction/v2">
                    </n0:case>
                    <n0:case case_id="case-123" user_id="user-abc" date_modified="{date}"
                        xmlns:n0="http://commcarehq.org/case/transaction/v2">
                        <n0:create>
                            <n0:case_type_id>cc_bc_demo</n0:case_type_id>
                            <n0:case_name>fgg</n0:case_name>
                        </n0:create>
                    </n0:case>
                    <n1:meta xmlns:n1="http://openrosa.org/jr/xforms">
                        <n1:deviceID>354957031935664</n1:deviceID>
                        <n1:timeStart>{date}</n1:timeStart>
                        <n1:timeEnd>{date}</n1:timeEnd>
                        <n1:username>bcdemo</n1:username>
                        <n1:userID>user1</n1:userID>
                        <n1:instanceID>{form_id}</n1:instanceID>
                    </n1:meta>
                </data>""".format(date=datetime.utcnow(),
                                  form_id=form_id,
                                  case_id=case_id)
        result = submit_form_locally(xml, self.domain_name)
        case = [case for case in result.cases if case.case_id == case_id][0]
        case.xform_ids.remove(
            form_id
        )  # legacy bug that didn't include these form IDs in the case
        case.save()

        self.assertEqual(2, len(self._get_form_ids()))
        self.assertEqual(2, len(self._get_case_ids()))
        self._do_migration_and_assert_flags(self.domain_name)
        self.assertEqual(2, len(self._get_form_ids()))
        self.assertEqual(2, len(self._get_case_ids()))
        self._compare_diffs([])
Exemple #26
0
    def test_report_case_reindexer(self):
        cases_included = set()
        for i in range(3):
            case = create_and_save_a_case(DOMAIN, uuid.uuid4().hex, "case_name-{}".format(i))
            cases_included.add(case.case_id)

        # excluded case
        create_and_save_a_case("unsupported", uuid.uuid4().hex, "unsupported")

        reindexer = get_report_case_reindexer()
        reindexer.reindex()

        # verify there
        results = CaseES("report_cases").run()
        self.assertEqual(3, results.total, results.hits)
        ids_in_es = {doc["_id"] for doc in results.hits}
        self.assertEqual(cases_included, ids_in_es)
Exemple #27
0
    def test_case_is_published(self):
        with process_kafka_changes(self.case_pillow):
            with process_couch_changes('DefaultChangeFeedPillow'):
                case = create_and_save_a_case(self.domain, case_id=uuid.uuid4().hex, case_name='test case')

        self.assertEqual(1, len(self.processor.changes_seen))
        change_meta = self.processor.changes_seen[0].metadata
        self.assertEqual(case.case_id, change_meta.document_id)
        self.assertEqual(self.domain, change_meta.domain)
Exemple #28
0
 def make_episode_case(self):
     return create_and_save_a_case(
         self.domain,
         uuid.uuid4().hex,
         case_name='prescription',
         case_properties={'test_confirming_diagnosis': "Old Nan's wisdom",
                          'weight': "15 stone"},
         case_type='episode',
     )
Exemple #29
0
 def make_voucher(self):
     return create_and_save_a_case(
         self.domain,
         uuid.uuid4().hex,
         case_name='prescription',
         case_properties={'amount_initial': '105',
                          'state': 'approved'},
         case_type='voucher',
     )
 def test_registry_ucr(self):
     expected = {}
     with process_pillow_changes(self.pillow):
         for domain in self.participants:
             case = create_and_save_a_case(domain,
                                           uuid.uuid4().hex,
                                           f"name-{domain}",
                                           case_type="ticket",
                                           case_properties={
                                               "category": "bug",
                                               "tags": "easy-win public",
                                               "is_starred": "yes",
                                               "estimate": "2.3",
                                               "priority": "4",
                                           })
             if domain != self.participator_3:
                 # 3 does not grant either of the others access
                 expected[case.case_id] = domain
Exemple #31
0
    def test_form_touches_case_without_updates(self):
        case_id = uuid.uuid4().hex
        create_and_save_a_case(self.domain_name, case_id=case_id, case_name='touched by a form', user_id='user1')

        form_id = uuid.uuid4().hex
        xml = """<?xml version='1.0' ?>
                <data uiVersion="1" version="1" name="" xmlns="http://openrosa.org/formdesigner/123">
                    <name>fgg</name>
                    <date>2011-06-07</date>
                    <n0:case case_id="{case_id}" user_id="user1" date_modified="{date}"
                        xmlns:n0="http://commcarehq.org/case/transaction/v2">
                    </n0:case>
                    <n0:case case_id="case-123" user_id="user-abc" date_modified="{date}"
                        xmlns:n0="http://commcarehq.org/case/transaction/v2">
                        <n0:create>
                            <n0:case_type_id>cc_bc_demo</n0:case_type_id>
                            <n0:case_name>fgg</n0:case_name>
                        </n0:create>
                    </n0:case>
                    <n1:meta xmlns:n1="http://openrosa.org/jr/xforms">
                        <n1:deviceID>354957031935664</n1:deviceID>
                        <n1:timeStart>{date}</n1:timeStart>
                        <n1:timeEnd>{date}</n1:timeEnd>
                        <n1:username>bcdemo</n1:username>
                        <n1:userID>user1</n1:userID>
                        <n1:instanceID>{form_id}</n1:instanceID>
                    </n1:meta>
                </data>""".format(
            date=datetime.utcnow(),
            form_id=form_id,
            case_id=case_id
        )
        _, _, cases = submit_form_locally(xml, self.domain_name)
        case = [case for case in cases if case.case_id == case_id][0]
        case.xform_ids.remove(form_id)  # legacy bug that didn't include these form IDs in the case
        case.save()

        self.assertEqual(2, len(self._get_form_ids()))
        self.assertEqual(2, len(self._get_case_ids()))
        self._do_migration_and_assert_flags(self.domain_name)
        self.assertEqual(2, len(self._get_form_ids()))
        self.assertEqual(2, len(self._get_case_ids()))
        self._compare_diffs([])
Exemple #32
0
    def test_case_deletions(self):
        case = create_and_save_a_case(self.domain, case_id=uuid.uuid4().hex, case_name='test case')
        with process_pillow_changes(self.case_pillow):
            with process_pillow_changes('DefaultChangeFeedPillow'):
                case.soft_delete()

        self.assertEqual(1, len(self.processor.changes_seen))
        change_meta = self.processor.changes_seen[0].metadata
        self.assertEqual(case.case_id, change_meta.document_id)
        self.assertTrue(change_meta.is_deletion)
Exemple #33
0
    def test_migrate_ledgers(self):
        case_id = uuid.uuid4().hex
        create_and_save_a_case(self.domain_name, case_id=case_id, case_name="Simon's sweet shop")
        self._set_balance(100, case_id, self.liquorice._id)
        self._set_balance(50, case_id, self.sherbert._id)
        self._set_balance(175, case_id, self.jelly_babies._id)

        expected_stock_state = {'stock': {
            self.liquorice._id: 100,
            self.sherbert._id: 50,
            self.jelly_babies._id: 175
        }}
        self._validate_ledger_data(self._get_ledger_state(case_id), expected_stock_state)
        self._do_migration_and_assert_flags(self.domain_name)
        self._validate_ledger_data(self._get_ledger_state(case_id), expected_stock_state)

        transactions = LedgerAccessorSQL.get_ledger_transactions_for_case(case_id)
        self.assertEqual(3, len(transactions))

        self._compare_diffs([])
Exemple #34
0
 def test_user_can_acces_case(self):
     self.case = create_and_save_a_case(
         self.domain,
         uuid.uuid4().hex,
         'test-case',
         owner_id=self.locations['Cambridge'].location_id)
     self.assertTrue(
         user_can_access_case(self.domain, self.cambridge_worker,
                              self.case))
     self.assertFalse(
         user_can_access_case(self.domain, self.suffolk_user, self.case))
Exemple #35
0
    def test_case_pillow_couch(self):
        # make a case
        case_id = uuid.uuid4().hex
        case_name = 'case-name-{}'.format(uuid.uuid4().hex)
        case = create_and_save_a_case(self.domain, case_id, case_name)

        # send to elasticsearch
        self._sync_couch_cases_to_es()

        # verify there
        results = CaseES().run()
        self.assertEqual(1, results.total)
        case_doc = results.hits[0]
        self.assertEqual(self.domain, case_doc['domain'])
        self.assertEqual(case_id, case_doc['_id'])
        self.assertEqual(case_name, case_doc['name'])

        # cleanup
        case.delete()
Exemple #36
0
def _create_and_save_a_case():
    case_name = 'reindexer-test-case-{}'.format(uuid.uuid4().hex)
    case_id = uuid.uuid4().hex
    return create_and_save_a_case(DOMAIN, case_id, case_name)
Exemple #37
0
 def test_basic_case_migration(self):
     create_and_save_a_case(self.domain_name, case_id=uuid.uuid4().hex, case_name='test case')
     self.assertEqual(1, len(self._get_case_ids()))
     self._do_migration_and_assert_flags(self.domain_name)
     self.assertEqual(1, len(self._get_case_ids()))
     self._compare_diffs([])
Exemple #38
0
 def test_case_is_published(self):
     with self.process_case_changes:
         case = create_and_save_a_case(self.domain,
                                       case_id=uuid.uuid4().hex,
                                       case_name='test case')
Exemple #39
0
 def test_case_lookups(self):
     case_id = uuid.uuid4().hex
     create_and_save_a_case(domain=self.domain, case_id=case_id, case_name='related doc test case')
     expression = self._get_expression('CommCareCase')
     doc = self._get_doc(case_id)
     self.assertEqual(case_id, expression(doc, EvaluationContext(doc, 0)))
Exemple #40
0
 def test_case_is_published(self):
     with process_pillow_changes(self.case_pillow):
         with process_pillow_changes('DefaultChangeFeedPillow'):
             case = create_and_save_a_case(self.domain,
                                           case_id=uuid.uuid4().hex,
                                           case_name='test case')
Exemple #41
0
    def test_case_is_published(self):
        with process_pillow_changes(self.case_pillow):
            with process_pillow_changes('DefaultChangeFeedPillow'):
                case = create_and_save_a_case(self.domain,
                                              case_id=uuid.uuid4().hex,
                                              case_name='test case')

        self.assertEqual(1, len(self.processor.changes_seen))
        change_meta = self.processor.changes_seen[0].metadata
        self.assertEqual(case.case_id, change_meta.document_id)
        self.assertEqual(self.domain, change_meta.domain)

    def test_case_deletions(self):
        case = create_and_save_a_case(self.domain,
                                      case_id=uuid.uuid4().hex,
                                      case_name='test case')
        with process_pillow_changes(self.case_pillow):
            with process_pillow_changes('DefaultChangeFeedPillow'):
                case.soft_delete()

        self.assertEqual(1, len(self.processor.changes_seen))
        change_meta = self.processor.changes_seen[0].metadata
        self.assertEqual(case.case_id, change_meta.document_id)
        self.assertTrue(change_meta.is_deletion)


@use_sql_backend
class KafkaPublishingTestSQL(KafkaPublishingTest):
    pass
Exemple #42
0
def _create_and_save_a_case():
    case_name = 'reindexer-test-case-{}'.format(uuid.uuid4().hex)
    case_id = uuid.uuid4().hex
    return create_and_save_a_case(DOMAIN, case_id, case_name)
Exemple #43
0
 def test_case_is_published(self):
     kafka_consumer = get_test_kafka_consumer(topics.CASE_SQL)
     case = create_and_save_a_case(self.domain, case_id=uuid.uuid4().hex, case_name='test case')
     change_meta = change_meta_from_kafka_message(kafka_consumer.next().value)
     self.assertEqual(case.case_id, change_meta.document_id)
     self.assertEqual(self.domain, change_meta.domain)