@@ -466,6 +466,30 @@ def setUp(self):
466466 def tearDown (self ):
467467 GenericTearDown (s3_client , firehose_client , sqs_client , dynamodb_client )
468468
469+ def test_elasticcache_failure_handled (self ):
470+ event = {
471+ "s3" : {
472+ "bucket" : {"name" : "my-config-bucket" }, # triggers 'config' branch
473+ "object" : {"key" : "testfile.csv" }
474+ }
475+ }
476+
477+ with patch ("file_name_processor.upload_to_elasticache" , side_effect = Exception ("Upload failed" )), \
478+ patch ("file_name_processor.logger" ) as mock_logger :
479+
480+ result = handle_record (event )
481+
482+ self .assertEqual (result ["statusCode" ], 500 )
483+ self .assertEqual (result ["message" ], "Failed to upload file content to cache" )
484+ self .assertEqual (result ["file_key" ], "testfile.csv" )
485+ self .assertIn ("error" , result )
486+ self .assertEqual (result ["vaccine_type" ], "unknown" )
487+ self .assertEqual (result ["supplier" ], "unknown" )
488+
489+ mock_logger .error .assert_called_once ()
490+ logged_msg = mock_logger .error .call_args [0 ][0 ]
491+ self .assertIn ("Error uploading to cache" , logged_msg )
492+
469493 def test_successful_processing_from_configs (self ):
470494 """Tests that the permissions config file content is uploaded to elasticache successfully"""
471495 fake_redis = fakeredis .FakeStrictRedis ()
@@ -538,7 +562,46 @@ def test_successful_processing_from_configs(self):
538562 self .assertEqual (result , expected_result )
539563
540564
565+ @patch .dict ("os.environ" , MOCK_ENVIRONMENT_DICT )
566+ @mock_s3
567+ @mock_dynamodb
568+ @mock_sqs
569+ @mock_firehose
570+ class TestUnexpectedBucket (TestCase ):
571+ """Tests for lambda_handler when an unexpected bucket name is used"""
572+
573+ def setUp (self ):
574+ GenericSetUp (s3_client , firehose_client , sqs_client , dynamodb_client )
575+
576+ def tearDown (self ):
577+ GenericTearDown (s3_client , firehose_client , sqs_client , dynamodb_client )
578+
579+ def test_unexpected_bucket_name (self ):
580+ record = {
581+ "s3" : {
582+ "bucket" : {"name" : "unknown-bucket" },
583+ "object" : {"key" : "somefile.csv" }
584+ }
585+ }
586+
587+ with patch ("file_name_processor.logger" ) as mock_logger :
588+ result = handle_record (record )
589+
590+ self .assertEqual (result ["statusCode" ], 500 )
591+ self .assertIn ("unexpected bucket name" , result ["message" ])
592+ self .assertEqual (result ["file_key" ], "somefile.csv" )
593+ self .assertEqual (result ["vaccine_type" ], "unknown" )
594+ self .assertEqual (result ["supplier" ], "unknown" )
595+
596+ mock_logger .error .assert_called_once ()
597+ args = mock_logger .error .call_args [0 ]
598+ self .assertIn ("Unable to process file" , args [0 ])
599+ self .assertIn ("somefile.csv" , args )
600+ self .assertIn ("unknown-bucket" , args )
601+
602+
541603class TestMainEntryPoint (TestCase ):
604+
542605 def test_run_local_constructs_event_and_calls_lambda_handler (self ):
543606 test_args = [
544607 "file_name_processor.py" ,
0 commit comments