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
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)
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])
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)
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)
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
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
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
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
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