31
31
pytest --cov=../ingest/
32
32
33
33
"""
34
+
34
35
import unittest
35
36
from unittest .mock import patch , MagicMock
36
37
from test_dense import mock_load_r_files
47
48
IngestPipeline ,
48
49
exit_pipeline ,
49
50
run_ingest ,
50
- get_action_from_args
51
+ get_action_from_args ,
51
52
)
52
53
from expression_files .expression_files import GeneExpression
53
54
@@ -102,8 +103,7 @@ def execute_ingest(args, mock_storage_client, mock_storage_blob):
102
103
return_value = True ,
103
104
)
104
105
def test_ingest_dense_matrix (self , mock_check_unique_cells ):
105
- """Ingest Pipeline should extract, transform, and load dense matrices
106
- """
106
+ """Ingest Pipeline should extract, transform, and load dense matrices"""
107
107
args = [
108
108
"--study-id" ,
109
109
"5d276a50421aa9117c982845" ,
@@ -132,8 +132,7 @@ def test_ingest_dense_matrix(self, mock_check_unique_cells):
132
132
return_value = True ,
133
133
)
134
134
def test_ingest_local_dense_matrix (self , mock_check_unique_cells ):
135
- """Ingest Pipeline should extract and transform local dense matrices
136
- """
135
+ """Ingest Pipeline should extract and transform local dense matrices"""
137
136
138
137
args = [
139
138
"--study-id" ,
@@ -164,7 +163,7 @@ def test_ingest_local_dense_matrix(self, mock_check_unique_cells):
164
163
)
165
164
def test_ingest_local_compressed_dense_matrix (self , mock_check_unique_cells ):
166
165
"""Ingest Pipeline should extract and transform local dense matrices
167
- from compressed file in the same manner as uncompressed file
166
+ from compressed file in the same manner as uncompressed file
168
167
"""
169
168
170
169
args = [
@@ -191,8 +190,7 @@ def test_ingest_local_compressed_dense_matrix(self, mock_check_unique_cells):
191
190
self .execute_ingest (args )
192
191
193
192
def test_empty_dense_file (self ):
194
- """Ingest Pipeline should fail gracefully when an empty file is given
195
- """
193
+ """Ingest Pipeline should fail gracefully when an empty file is given"""
196
194
197
195
args = [
198
196
"--study-id" ,
@@ -222,8 +220,7 @@ def test_empty_dense_file(self):
222
220
self .assertEqual (cm .exception .code , 1 )
223
221
224
222
def test_empty_mtx_file (self ):
225
- """Ingest Pipeline should fail gracefully when an empty file is given
226
- """
223
+ """Ingest Pipeline should fail gracefully when an empty file is given"""
227
224
228
225
args = [
229
226
"--study-id" ,
@@ -261,8 +258,7 @@ def test_empty_mtx_file(self):
261
258
return_value = True ,
262
259
)
263
260
def test_ingest_mtx_matrix (self , mock_check_unique_cells ):
264
- """Ingest Pipeline should extract and transform MTX matrix bundles
265
- """
261
+ """Ingest Pipeline should extract and transform MTX matrix bundles"""
266
262
267
263
args = [
268
264
"--study-id" ,
@@ -296,8 +292,7 @@ def test_ingest_mtx_matrix(self, mock_check_unique_cells):
296
292
return_value = True ,
297
293
)
298
294
def test_ingest_unsorted_mtx_matrix (self , mock_check_unique_cells ):
299
- """Ingest Pipeline should extract and transform unsorted MTX matrix bundles
300
- """
295
+ """Ingest Pipeline should extract and transform unsorted MTX matrix bundles"""
301
296
302
297
args = [
303
298
"--study-id" ,
@@ -331,8 +326,7 @@ def test_ingest_unsorted_mtx_matrix(self, mock_check_unique_cells):
331
326
return_value = True ,
332
327
)
333
328
def test_ingest_zipped_mtx_matrix (self , mock_check_unique_cells ):
334
- """Ingest Pipeline should extract and transform MTX matrix bundles
335
- """
329
+ """Ingest Pipeline should extract and transform MTX matrix bundles"""
336
330
337
331
args = [
338
332
"--study-id" ,
@@ -366,8 +360,7 @@ def test_ingest_zipped_mtx_matrix(self, mock_check_unique_cells):
366
360
return_value = True ,
367
361
)
368
362
def test_remote_mtx_bundles (self , mock_check_unique_cells ):
369
- """Ingest Pipeline should handle MTX matrix files fetched from bucket
370
- """
363
+ """Ingest Pipeline should handle MTX matrix files fetched from bucket"""
371
364
372
365
args = [
373
366
"--study-id" ,
@@ -402,8 +395,7 @@ def test_remote_mtx_bundles(self, mock_check_unique_cells):
402
395
return_value = True ,
403
396
)
404
397
def test_mtx_bundle_argument_validation (self , mock_check_unique_cells ):
405
- """Omitting --gene-file and --barcode-file in MTX ingest should error
406
- """
398
+ """Omitting --gene-file and --barcode-file in MTX ingest should error"""
407
399
408
400
args = [
409
401
"--study-id" ,
@@ -452,8 +444,7 @@ def test_r_file_dense(self, mock_check_unique_cells, mock_load):
452
444
self .execute_ingest (args )
453
445
454
446
def test_good_metadata_file (self ):
455
- """Ingest Pipeline should succeed for properly formatted metadata file
456
- """
447
+ """Ingest Pipeline should succeed for properly formatted metadata file"""
457
448
args = [
458
449
"--study-id" ,
459
450
"5d276a50421aa9117c982845" ,
@@ -488,7 +479,7 @@ def test_exponential_back_off_expression_file(
488
479
self , mock_check_unique_cells , mock_load
489
480
):
490
481
"""Ingest Pipeline should not succeed if mongo cannot connect after 5
491
- reconnection tries.
482
+ reconnection tries.
492
483
"""
493
484
args = [
494
485
"--study-id" ,
@@ -522,8 +513,7 @@ def test_exponential_back_off_expression_file(
522
513
self .assertEqual (cm .exception .code , 1 )
523
514
524
515
def test_bad_metadata_file (self ):
525
- """Ingest Pipeline should not succeed for misformatted metadata file
526
- """
516
+ """Ingest Pipeline should not succeed for misformatted metadata file"""
527
517
528
518
args = [
529
519
"--study-id" ,
@@ -565,8 +555,7 @@ def test_bad_metadata_file_contains_coordinates(self):
565
555
self .assertEqual (cm .exception .code , 1 )
566
556
567
557
def test_good_cluster_file (self ):
568
- """Ingest Pipeline should succeed for properly formatted cluster file
569
- """
558
+ """Ingest Pipeline should succeed for properly formatted cluster file"""
570
559
args = [
571
560
"--study-id" ,
572
561
"5d276a50421aa9117c982845" ,
@@ -590,8 +579,7 @@ def test_good_cluster_file(self):
590
579
self .assertEqual (status [0 ], None )
591
580
592
581
def test_bad_cluster_file (self ):
593
- """Ingest Pipeline should fail for misformatted cluster file
594
- """
582
+ """Ingest Pipeline should fail for misformatted cluster file"""
595
583
args = [
596
584
"--study-id" ,
597
585
"5d276a50421aa9117c982845" ,
@@ -611,8 +599,7 @@ def test_bad_cluster_file(self):
611
599
self .assertEqual (cm .exception .code , 1 )
612
600
613
601
def test_bad_cluster_missing_coordinate_file (self ):
614
- """Ingest Pipeline should fail for missing coordinate in cluster file
615
- """
602
+ """Ingest Pipeline should fail for missing coordinate in cluster file"""
616
603
args = [
617
604
"--study-id" ,
618
605
"5d276a50421aa9117c982845" ,
@@ -633,8 +620,7 @@ def test_bad_cluster_missing_coordinate_file(self):
633
620
634
621
@patch ("ingest_pipeline.IngestPipeline.load_subsample" , return_value = 0 )
635
622
def test_subsample (self , mock_load_subsample ):
636
- """When cell values in cluster are present in cell metadata file ingest should succeed.
637
- """
623
+ """When cell values in cluster are present in cell metadata file ingest should succeed."""
638
624
args = [
639
625
"--study-id" ,
640
626
"5d276a50421aa9117c982845" ,
@@ -689,8 +675,7 @@ def test_get_cluster_query(self):
689
675
690
676
@patch ("ingest_pipeline.IngestPipeline.load_subsample" , return_value = 0 )
691
677
def test_subsample_no_cell_intersection (self , mock_load_subsample ):
692
- """When cell values in cluster are not present in cell metadata file ingest should fail.
693
- """
678
+ """When cell values in cluster are not present in cell metadata file ingest should fail."""
694
679
args = [
695
680
"--study-id" ,
696
681
"5d276a50421aa9117c982845" ,
@@ -737,6 +722,24 @@ def test_extract_cluster_file_from_anndata(self):
737
722
except :
738
723
print (f"Error while deleting file : { filename } " )
739
724
725
+ def test_invalid_obsm_key_for_anndata (self ):
726
+ args = [
727
+ "--study-id" ,
728
+ "5d276a50421aa9117c982845" ,
729
+ "--study-file-id" ,
730
+ "5dd5ae25421aa910a723a337" ,
731
+ "ingest_anndata" ,
732
+ "--ingest-anndata" ,
733
+ "--extract" ,
734
+ "['cluster']" ,
735
+ "--anndata-file" ,
736
+ "../tests/data/anndata/trimmed_compliant_pbmc3K.h5ad" ,
737
+ "--obsm-keys" ,
738
+ "['foo']" ,
739
+ ]
740
+ ingest , arguments , status , status_cell_metadata = self .execute_ingest (args )
741
+ self .assertEqual (status [0 ], 1 )
742
+
740
743
def test_extract_metadata_file_from_anndata (self ):
741
744
args = [
742
745
"--study-id" ,
@@ -857,16 +860,12 @@ def test_insert_reconnect(self):
857
860
client_mock ["data_arrays" ].insert_many .assert_called_with (docs )
858
861
859
862
client_mock ["data_arrays" ].insert_many .side_effect = ValueError ("Foo" )
860
- self .assertRaises (
861
- Exception , ingest .insert_many , "data_arrays" , docs
862
- )
863
+ self .assertRaises (Exception , ingest .insert_many , "data_arrays" , docs )
863
864
client_mock .reset_mock ()
864
865
865
866
# Test exponential back off for auto reconnect
866
867
client_mock ["data_arrays" ].insert_many .side_effect = AutoReconnect
867
- self .assertRaises (
868
- AutoReconnect , ingest .insert_many , "data_arrays" , docs
869
- )
868
+ self .assertRaises (AutoReconnect , ingest .insert_many , "data_arrays" , docs )
870
869
self .assertEqual (client_mock ["data_arrays" ].insert_many .call_count , 3 )
871
870
client_mock .reset_mock ()
872
871
@@ -890,9 +889,7 @@ def raiseError(*args, **kwargs):
890
889
891
890
# Test exponential back off for BulkWriteError
892
891
client_mock ["data_arrays" ].insert_many .side_effect = raiseError
893
- self .assertRaises (
894
- BulkWriteError , ingest .insert_many , "data_arrays" , docs
895
- )
892
+ self .assertRaises (BulkWriteError , ingest .insert_many , "data_arrays" , docs )
896
893
self .assertEqual (client_mock ["data_arrays" ].insert_many .call_count , 3 )
897
894
898
895
0 commit comments