@@ -487,3 +487,93 @@ def test_get_detect_run_in_progress_status(self, mock_validate):
487487 self .assertIsInstance (args , DeidentifyFileResponse )
488488 self .assertEqual (args .status , 'IN_PROGRESS' )
489489 self .assertEqual (args .run_id , run_id )
490+
491+ def test_get_transformations_with_shift_dates (self ):
492+
493+ class DummyShiftDates :
494+ max = 30
495+ min = 10
496+ entities = ["SSN" ]
497+
498+ class DummyTransformations :
499+ shift_dates = DummyShiftDates ()
500+
501+ class DummyRequest :
502+ transformations = DummyTransformations ()
503+
504+ request = DummyRequest ()
505+ result = self .detect ._Detect__get_transformations (request )
506+
507+ self .assertEqual (result , {
508+ 'shift_dates' : {
509+ 'max_days' : 30 ,
510+ 'min_days' : 10 ,
511+ 'entity_types' : ["SSN" ]
512+ }
513+ })
514+
515+ @patch ("skyflow.vault.controller._detect.time.sleep" , return_value = None )
516+ def test_poll_for_processed_file_timeout (self , mock_sleep ):
517+ """Test polling timeout returns IN_PROGRESS status"""
518+ files_api = Mock ()
519+ files_api .with_raw_response = files_api
520+ self .vault_client .get_detect_file_api .return_value = files_api
521+
522+ # Always return IN_PROGRESS
523+ def get_run_side_effect (* args , ** kwargs ):
524+ in_progress = Mock ()
525+ in_progress .status = "IN_PROGRESS"
526+ return Mock (data = in_progress )
527+
528+ files_api .get_run .side_effect = get_run_side_effect
529+
530+ result = self .detect ._Detect__poll_for_processed_file ("runid123" , max_wait_time = 1 )
531+ self .assertIsInstance (result , DeidentifyFileResponse )
532+ self .assertEqual (result .status , "IN_PROGRESS" )
533+ self .assertEqual (result .run_id , "runid123" )
534+
535+ @patch ("skyflow.vault.controller._detect.time.sleep" , return_value = None )
536+ def test_poll_for_processed_file_wait_time_calculation (self , mock_sleep ):
537+ """Test wait time calculation in polling loop"""
538+ files_api = Mock ()
539+ files_api .with_raw_response = files_api
540+ self .vault_client .get_detect_file_api .return_value = files_api
541+
542+ calls = []
543+
544+ def track_sleep (* args ):
545+ calls .append (args [0 ]) # Record wait time
546+
547+ mock_sleep .side_effect = track_sleep
548+
549+ # Return IN_PROGRESS twice then SUCCESS
550+ responses = [
551+ Mock (data = Mock (status = "IN_PROGRESS" )),
552+ Mock (data = Mock (status = "IN_PROGRESS" )),
553+ Mock (data = Mock (status = "SUCCESS" ))
554+ ]
555+ files_api .get_run .side_effect = responses
556+
557+ result = self .detect ._Detect__poll_for_processed_file ("runid123" , max_wait_time = 4 )
558+
559+ self .assertEqual (calls , [2 , 2 ])
560+ self .assertEqual (result .status , "SUCCESS" )
561+
562+
563+ def test_parse_deidentify_file_response_output_conversion (self ):
564+ """Test output conversion in parse_deidentify_file_response"""
565+
566+ class OutputObj :
567+ processed_file = "file123"
568+ processed_file_type = "pdf"
569+ processed_file_extension = "pdf"
570+
571+ data = Mock ()
572+ data .output = [OutputObj ()]
573+ data .word_character_count = Mock (word_count = 1 , character_count = 1 )
574+
575+ result = self .detect ._Detect__parse_deidentify_file_response (data )
576+
577+ self .assertEqual (result .file , "file123" )
578+ self .assertEqual (result .type , "pdf" )
579+ self .assertEqual (result .extension , "pdf" )
0 commit comments