Skip to content

Commit b7cc5fb

Browse files
SK-2068: add unit tests for polling
1 parent 045fd4e commit b7cc5fb

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

tests/vault/controller/test__detect.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)