示例#1
0
 def add_ledger(self, case_id, **values):
     ref = UniqueLedgerReference(case_id, "stock", case_id)
     self.sql_ledgers[case_id] = Config(
         ledger_reference=ref,
         values=values,
         to_json=lambda: dict(values, ledger_reference=ref.as_id()),
     )
     couch_values = dict(values)
     stock = Config(
         ledger_reference=ref,
         values=couch_values,
         to_json=lambda: dict(couch_values, ledger_reference=ref.as_id()),
     )
     self.couch_ledgers[case_id] = stock
     return stock
示例#2
0
    def test_ledger_pillow(self):
        factory = CaseFactory(domain=self.domain)
        case = factory.create_case()

        consumer = get_test_kafka_consumer(topics.LEDGER)
        # have to get the seq id before the change is processed
        kafka_seq = get_topic_offset(topics.LEDGER)

        from corehq.apps.commtrack.tests.util import get_single_balance_block
        from corehq.apps.hqcase.utils import submit_case_blocks
        submit_case_blocks([
            get_single_balance_block(case.case_id, self.product_id, 100)],
            self.domain
        )

        ref = UniqueLedgerReference(case.case_id, 'stock', self.product_id)
        # confirm change made it to kafka
        message = consumer.next()
        change_meta = change_meta_from_kafka_message(message.value)
        if should_use_sql_backend(self.domain):
            self.assertEqual(ref.as_id(), change_meta.document_id)
        else:
            from corehq.apps.commtrack.models import StockState
            state = StockState.objects.all()
            self.assertEqual(1, len(state))
            self.assertEqual(state[0].pk, change_meta.document_id)  #
        self.assertEqual(self.domain, change_meta.domain)

        # send to elasticsearch
        self.pillow.process_changes(since=kafka_seq, forever=False)
        self.elasticsearch.indices.refresh(LEDGER_INDEX_INFO.index)

        # confirm change made it to elasticserach
        self._assert_ledger_in_es(ref)
示例#3
0
    def test_ledger_pillow_sql(self):
        factory = CaseFactory(domain=self.domain)
        case = factory.create_case()

        consumer = get_test_kafka_consumer(topics.LEDGER)
        # have to get the seq id before the change is processed
        kafka_seq = consumer.offsets()['fetch'][(topics.LEDGER, 0)]

        from corehq.apps.commtrack.tests import get_single_balance_block
        from corehq.apps.hqcase.utils import submit_case_blocks
        submit_case_blocks([
            get_single_balance_block(case.case_id, self.product_id, 100)],
            self.domain
        )

        ref = UniqueLedgerReference(case.case_id, 'stock', self.product_id)
        # confirm change made it to kafka
        message = consumer.next()
        change_meta = change_meta_from_kafka_message(message.value)
        if should_use_sql_backend(self.domain):
            self.assertEqual(ref.as_id(), change_meta.document_id)
        else:
            from corehq.apps.commtrack.models import StockState
            state = StockState.objects.all()
            self.assertEqual(1, len(state))
            self.assertEqual(state[0].pk, change_meta.document_id)  #
        self.assertEqual(self.domain, change_meta.domain)

        # send to elasticsearch
        self.pillow.process_changes(since=kafka_seq, forever=False)
        self.elasticsearch.indices.refresh(LEDGER_INDEX_INFO.index)

        # confirm change made it to elasticserach
        results = self.elasticsearch.search(
            LEDGER_INDEX_INFO.index,
            LEDGER_INDEX_INFO.type, body={
                "query": {
                    "bool": {
                        "must": [{
                            "match_all": {}
                        }]
                    }
                }
            }
        )
        self.assertEqual(1, results['hits']['total'])
        ledger_doc = results['hits']['hits'][0]['_source']
        self.assertEqual(self.domain, ledger_doc['domain'])
        self.assertEqual(ref.case_id, ledger_doc['case_id'])
        self.assertEqual(ref.section_id, ledger_doc['section_id'])
        self.assertEqual(ref.entry_id, ledger_doc['entry_id'])
示例#4
0
 def add_ledger(self, case_id, **values):
     ref = UniqueLedgerReference(case_id, "stock", case_id)
     self.sql_ledgers[case_id] = Config(
         ledger_reference=ref,
         values=values,
         last_modified_form_id="form",
         to_json=lambda: dict(values, ledger_reference=ref.as_id()),
     )
     couch_values = dict(values)
     stock = Config(
         ledger_reference=ref,
         values=couch_values,
         last_modified_form_id="form",
         to_json=lambda: dict(couch_values, ledger_reference=ref.as_id()),
     )
     self.couch_ledgers[case_id] = stock
     tx = Config(
         report=Config(form_id="form", type="transfer"),
         ledger_reference=ref,
     )
     tx_helper = Config(ledger_reference=ref)
     self.stock_transactions[ref] = [tx]
     self.form_transactions["form"] = [("transfer", tx_helper)]
     return stock