@@ -279,9 +279,9 @@ def test_invalid_search_query_variants(self):
279
279
280
280
self ._test_invalid_search_params (query_variants )
281
281
282
- def _test_expected_search_call (self , mock_get_variants , results_cache , search_fields = None , has_gene_search = False ,
282
+ def _get_expected_search_call (self , results_cache , search_fields = None , has_gene_search = False ,
283
283
rs_ids = None , variant_ids = None , parsed_variant_ids = None , inheritance_mode = 'de_novo' ,
284
- dataset_type = None , secondary_dataset_type = None , omitted_sample_guids = None ,
284
+ dataset_type = None , secondary_dataset_type = None , exclude_keys = None , exclude_key_pairs = None ,
285
285
exclude_locations = False , exclude = None , annotations = None , annotations_secondary = None , single_gene_search = False , ** kwargs ):
286
286
genes = intervals = None
287
287
has_included_gene_search = has_gene_search and not exclude_locations
@@ -315,8 +315,16 @@ def _test_expected_search_call(self, mock_get_variants, results_cache, search_fi
315
315
expected_search ['annotations' ] = annotations
316
316
if annotations_secondary is not None :
317
317
expected_search ['annotations_secondary' ] = annotations_secondary
318
+ if exclude_keys is not None :
319
+ expected_search ['exclude_keys' ] = exclude_keys
320
+ if exclude_key_pairs is not None :
321
+ expected_search ['exclude_key_pairs' ] = exclude_key_pairs
318
322
319
- mock_get_variants .assert_called_with (mock .ANY , expected_search , self .user , results_cache , '37' , ** kwargs )
323
+ return (mock .ANY , expected_search , self .user , results_cache , '37' ), kwargs , genes
324
+
325
+ def _test_expected_search_call (self , mock_get_variants , * args , has_gene_search = False , exclude_locations = False , omitted_sample_guids = None , ** kwargs ):
326
+ call_args , call_kwargs , genes = self ._get_expected_search_call (* args , has_gene_search = has_gene_search , exclude_locations = exclude_locations , ** kwargs )
327
+ mock_get_variants .assert_called_with (* call_args , ** call_kwargs )
320
328
self ._assert_expected_search_samples (mock_get_variants , omitted_sample_guids , has_gene_search and not exclude_locations )
321
329
322
330
if genes :
@@ -341,16 +349,17 @@ def _assert_expected_search_samples(self, mock_get_variants, omitted_sample_guid
341
349
342
350
343
351
def test_query_variants (self , mock_get_variants ):
352
+ parsed_variants = [{** v , 'key' : (i + 1 ) * 1000 } for i , v in enumerate (PARSED_VARIANTS )]
344
353
def _mock_get_variants (families , search , user , previous_search_results , genome_version , ** kwargs ):
345
- previous_search_results ['all_results' ] = PARSED_VARIANTS
354
+ previous_search_results ['all_results' ] = parsed_variants
346
355
previous_search_results ['total_results' ] = 5
347
- return PARSED_VARIANTS
356
+ return parsed_variants
348
357
mock_get_variants .side_effect = _mock_get_variants
349
358
350
359
variants , total = query_variants (self .results_model , user = self .user )
351
- self .assertListEqual (variants , PARSED_VARIANTS )
360
+ self .assertListEqual (variants , parsed_variants )
352
361
self .assertEqual (total , 5 )
353
- results_cache = {'all_results' : PARSED_VARIANTS , 'total_results' : 5 }
362
+ results_cache = {'all_results' : parsed_variants , 'total_results' : 5 }
354
363
self .assert_cached_results (results_cache )
355
364
self ._test_expected_search_call (
356
365
mock_get_variants , results_cache , sort = 'xpos' , page = 1 , num_results = 100 , skip_genotype_filter = False ,
@@ -466,6 +475,25 @@ def _mock_get_variants(families, search, user, previous_search_results, genome_v
466
475
omitted_sample_guids = ['S000145_hg00731' , 'S000146_hg00732' , 'S000148_hg00733' ],
467
476
)
468
477
478
+ self .set_cache (None )
479
+ mock_get_variants .reset_mock ()
480
+ self .search_model .search = {
481
+ 'inheritance' : {'mode' : 'any_affected' },
482
+ 'exclude' : {'previousSearch' : True , 'previousSearchHash' : 'abc1234' , 'clinvar' : ['benign' ]},
483
+ }
484
+ previous_search_model = VariantSearch .objects .create (search = {'inheritance' : {'mode' : 'de_novo' }})
485
+ previous_results_model = VariantSearchResults .objects .create (variant_search = previous_search_model , search_hash = 'abc1234' )
486
+ previous_results_model .families .set (self .families )
487
+ query_variants (self .results_model , user = self .user )
488
+ self ._test_exclude_previous_search (
489
+ mock_get_variants , results_cache , sort = 'xpos' , page = 1 , num_results = 100 , skip_genotype_filter = False ,
490
+ inheritance_mode = 'any_affected' , exclude = {'clinvar' : ['benign' ]}, search_fields = ['exclude' ],
491
+ )
492
+
493
+ def _test_exclude_previous_search (self , mock_get_variants , * args , num_searches = 1 , ** kwargs ):
494
+ self ._test_expected_search_call (mock_get_variants , * args , ** kwargs )
495
+ self .assertEqual (mock_get_variants .call_count , num_searches )
496
+
469
497
def test_cached_query_variants (self ):
470
498
self .set_cache ({'total_results' : 4 , 'all_results' : self .CACHED_VARIANTS })
471
499
variants , total = query_variants (self .results_model , user = self .user )
@@ -624,6 +652,28 @@ def _assert_expected_get_single_variant_call(self, mock_call, variant_id, expect
624
652
def test_query_variants (self , mock_call ):
625
653
super ().test_query_variants (mock_call )
626
654
655
+ def _test_exclude_previous_search (self , mock_get_variants , * args , ** kwargs ):
656
+ super ()._test_exclude_previous_search (
657
+ mock_get_variants , * args , ** kwargs ,
658
+ exclude_key_pairs = {}, exclude_keys = {'MITO' : [1000 , 2000 ]}, num_searches = 2 ,
659
+ )
660
+ call_args , call_kwargs , _ = self ._get_expected_search_call (* args , inheritance_mode = 'de_novo' , sort = None , num_results = 100 )
661
+ mock_get_variants .assert_has_calls ([mock .call (* call_args , ** call_kwargs )])
662
+
663
+ # Test when previous results are cached
664
+ mock_get_variants .reset_mock ()
665
+ self .mock_redis .get .side_effect = [
666
+ None ,
667
+ json .dumps ({'all_results' : [VARIANT1 , [VARIANT1 , VARIANT2 ], [VARIANT1 , SV_VARIANT1 ], VARIANT2 , [VARIANT4 , VARIANT3 ], SV_VARIANT1 ]}),
668
+ ]
669
+ self .mock_redis .keys .side_effect = [[], ['search_results__abc1234__gnomad' ]]
670
+ query_variants (self .results_model , user = self .user )
671
+ super ()._test_exclude_previous_search (
672
+ mock_get_variants , * args , ** kwargs , num_searches = 1 ,
673
+ exclude_key_pairs = {'SNV_INDEL' : [[1 , 2 ], [3 , 4 ]], 'SNV_INDEL,SV_WGS' : [[1 , 12 ]]},
674
+ exclude_keys = {'SNV_INDEL' : [1 , 2 ], 'SV_WGS' : [12 ]},
675
+ )
676
+
627
677
def test_cached_query_variants (self ):
628
678
Project .objects .filter (id = 1 ).update (genome_version = '38' )
629
679
super ().test_cached_query_variants ()
0 commit comments