@@ -2624,6 +2624,64 @@ def from_response(cls, hit: JSON) -> Self:
26242624 })
26252625
26262626
2627+ class TestNestedFieldAggregation (IndexResponseTestCase ):
2628+ maxDiff = None
2629+
2630+ @classmethod
2631+ def bundles (cls ) -> list [BundleFQID ]:
2632+ return [
2633+ # 1 file, 1 sample
2634+ # tissue_atlas=[None/None (x2), Lung/None, Retina/v1.0, Blood/v1.0]
2635+ cls .bundle_fqid (uuid = '2c7d06b8-658e-4c51-9de4-a768322f84c5' ,
2636+ version = '2021-09-21T17:27:23.898000Z' ),
2637+ # 20 files, 1 sample
2638+ # tissue_atlas=[Blood/v1.0]
2639+ cls .bundle_fqid (uuid = '587d74b4-1075-4bbf-b96a-4d1ede0481b2' ,
2640+ version = '2018-10-10T02:23:43.182000Z' ),
2641+ # 2 files, 1 sample
2642+ # tissue_atlas=[] (none)
2643+ cls .bundle_fqid (uuid = '97f0cc83-f0ac-417a-8a29-221c77debde8' ,
2644+ version = '2019-10-14T19:54:15.397406Z' ),
2645+ ]
2646+
2647+ @classmethod
2648+ def setUpClass (cls ):
2649+ super ().setUpClass ()
2650+ cls ._setup_indices ()
2651+
2652+ @classmethod
2653+ def tearDownClass (cls ):
2654+ cls ._teardown_indices ()
2655+ super ().tearDownClass ()
2656+
2657+ def test_nested_field_facet (self ):
2658+ tissue_atlas_terms = [
2659+ {'atlas' : 'Blood' , 'version' : 'v1.0' },
2660+ {'atlas' : None , 'version' : None },
2661+ {'atlas' : 'Lung' , 'version' : None },
2662+ {'atlas' : 'Retina' , 'version' : 'v1.0' },
2663+ None ,
2664+ ]
2665+ tissue_atlas_term_counts = {
2666+ 'projects' : [2 , 1 , 1 , 1 , 1 ],
2667+ 'bundles' : [2 , 1 , 1 , 1 , 1 ],
2668+ 'samples' : [2 , 1 , 1 , 1 , 1 ],
2669+ 'files' : [21 , 1 , 1 , 1 , 2 ]
2670+ }
2671+ for entity_type , counts in tissue_atlas_term_counts .items ():
2672+ with self .subTest (entity_type = entity_type ):
2673+ url = self .base_url .set (path = '/index/' + entity_type ,
2674+ args = (self ._params (size = 1 )))
2675+ response = requests .get (str (url ))
2676+ response .raise_for_status ()
2677+ response_json = response .json ()
2678+ facets = response_json ['termFacets' ]
2679+ expected = []
2680+ for count , term in zip (counts , tissue_atlas_terms ):
2681+ expected .append ({'count' : count , 'term' : term })
2682+ self .assertElasticEqual (expected , facets ['tissueAtlas' ]['terms' ])
2683+
2684+
26272685class TestSortAndFilterByCellCount (IndexResponseTestCase ):
26282686 maxDiff = None
26292687
@@ -3568,11 +3626,13 @@ def test_projects_response(self):
35683626
35693627 tissue_atlas = response_json ['termFacets' ]['tissueAtlas' ]
35703628 self .assertEqual (5 , tissue_atlas ['total' ])
3571- terms = {
3572- entry ['term' ]: entry ['count' ]
3573- for entry in tissue_atlas ['terms' ]
3574- }
3575- self .assertEqual ({None : 2 , 'Lung' : 1 , 'Retina' : 1 , 'Blood' : 1 }, terms )
3629+ expected_tissue_atlas_terms = [
3630+ {'count' : 1 , 'term' : {'atlas' : None , 'version' : None }},
3631+ {'count' : 1 , 'term' : {'atlas' : 'Blood' , 'version' : 'v1.0' }},
3632+ {'count' : 1 , 'term' : {'atlas' : 'Lung' , 'version' : None }},
3633+ {'count' : 1 , 'term' : {'atlas' : 'Retina' , 'version' : 'v1.0' }},
3634+ ]
3635+ self .assertEqual (expected_tissue_atlas_terms , tissue_atlas ['terms' ])
35763636
35773637 def test_data_use_and_duos_id (self ):
35783638 test_data = [
0 commit comments