Exemple #1
0
async def test_single_query(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        await load_organizations_data(requester, 2)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        builder = Q_(resource="ChargeItem", engine=engine)
        builder = builder.where(exists_("ChargeItem.enteredDate"))

        result = await builder(async_result=True).single()
        assert result is not None
        assert result[0]["resourceType"] == builder._from[0][0]
        # test empty result
        builder = Q_(resource="ChargeItem", engine=engine)
        builder = builder.where(not_(exists_("ChargeItem.enteredDate")))

        result = await builder(async_result=True).single()
        assert result is None

        # Test Multiple Result error
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active", "true"))

        with pytest.raises(MultipleResultsFound) as excinfo:
            await builder(async_result=True).single()
        assert excinfo.type == MultipleResultsFound
Exemple #2
0
    def test_fetchall(self):
        """ """
        self.load_contents()

        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization")).sort(
                   sort_("Organization.meta.lastUpdated", SortOrderType.DESC))
        result = builder(async_result=False, unrestricted=True).fetchall()

        self.assertEqual(result.header.total, 2)

        # Test
        builder = Q_(resource="Task", engine=engine)
        builder = builder.where(T_("Task.status", "ready"))
        result = builder(async_result=False, unrestricted=True).fetchall()
        self.assertEqual(result.header.total, 2)

        # Search with part-of
        # should be two sub tasks
        builder = Q_(resource="Task", engine=engine)
        builder = builder.where(
            T_("Task.partOf.reference",
               "Task/5df31190-0ed4-45ba-8b16-3c689fc2e686"))
        result = builder(async_result=False, unrestricted=True).fetchall()
        self.assertEqual(result.header.total, 2)
Exemple #3
0
    def test_first_query(self):
        """ """
        self.load_contents()

        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization"))
        result_query = builder(async_result=False, unrestricted=True)
        result = result_query.first()
        self.assertEqual(result[0]["resourceType"],
                         result_query._query.get_from()[0][0])
Exemple #4
0
    def test_negetive_query(self):
        """ """
        self.load_contents()

        engine = self.get_engine()

        builder = Q_(resource="Task", engine=engine)
        builder = builder.where(
            not_(
                T_(
                    "Task.owner.reference",
                    "Practitioner/fake-ac0-821d-46d9-9d40-a61f2578cadf",
                )))

        result = builder(async_result=False, unrestricted=True).fetchall()
        self.assertEqual(result.header.total, 3)
Exemple #5
0
    def test_iter_result(self):
        """ """
        self.load_contents()
        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization")).sort(
                   sort_("Organization.meta.lastUpdated", SortOrderType.DESC))
        count = 0

        for resource in builder(async_result=False, unrestricted=True):
            count += 1

            assert resource.__class__.__name__ == "Organization"

        self.assertEqual(count, 2)
Exemple #6
0
async def test_exists_query(es_requester):
    """ enteredDate"""
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        builder = Q_(resource="ChargeItem", engine=engine)
        builder = builder.where(exists_("ChargeItem.enteredDate"))

        result = await builder(async_result=True).fetchall()
        assert result.header.total == 1
Exemple #7
0
async def test_first_query(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        await load_organizations_data(requester, 5)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active", "true"))

        result = await builder(async_result=True).first()

        assert result[0]["resourceType"] == builder._from[0][0]

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active", "false"))

        result = await builder(async_result=True).first()
        assert result is None
Exemple #8
0
async def test_raw_result(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        await load_organizations_data(requester, 161)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        query = Q_(resource="Organization", engine=engine)

        result_query = query.where(T_("Organization.active") == "true")(
            async_result=True, unrestricted=True)
        # Test scrol api! although default size is 100 but engine should collect all
        # by chunking based
        result = await result_query._engine.execute(result_query._query,
                                                    result_query._unrestricted)
        assert result.header.total > 0
        assert result.header.total == len(result.body)

        # Test limit works
        result_query = query.where(
            T_("Organization.active") == "true").limit(20)(async_result=True)
        result = await result_query._engine.execute(result_query._query,
                                                    result_query._unrestricted)

        assert 20 == len(result.body)
        # Test with bundle wrapper
        bundle = engine.wrapped_with_bundle(result)

        assert bundle.total == result.header.total
Exemple #9
0
    def test_single_query(self):
        """ """
        self.load_contents()

        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.id", "f001"))
        result_query = builder(async_result=False, unrestricted=True)
        self.assertIsNotNone(result_query.single())

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization"))
        result_query = builder(async_result=False, unrestricted=True)
        try:
            result_query.single()
            raise AssertionError(
                "Code should not come here, as multiple resources should in result"
            )
        except MultipleResultsFound:
            pass
Exemple #10
0
async def test_in_query(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active") == V_("true")).where(
            in_(
                "Organization.meta.lastUpdated",
                (
                    "2010-05-28T05:35:56+00:00",
                    "2001-05-28T05:35:56+00:00",
                    "2018-05-28T05:35:56+00:00",
                ),
            ))
        result = await builder(async_result=True).fetchall()
        assert result.header.total == 1

        # Test NOT IN
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active") == V_("true")).where(
            not_in_(
                "Organization.meta.lastUpdated",
                ("2010-05-28T05:35:56+00:00", "2001-05-28T05:35:56+00:00",
                 "2018-05-28T05:35:56+00:00", "2015-05-28T05:35:56+00:00",
                 "2019-10-03T05:35:56+00:00"),
            ))
        result = await builder(async_result=True).fetchall()
        assert result.header.total == 0