@@ -448,119 +448,6 @@ def test_lambda_handler_multiple_records_for_same_queue(self):
448448 mock_invoke_filename_lambda .assert_not_called ()
449449
450450
451- @patch .dict ("os.environ" , MOCK_ENVIRONMENT_DICT )
452- @mock_s3
453- @mock_dynamodb
454- @mock_sqs
455- @mock_firehose
456- class TestLambdaHandlerConfig (TestCase ):
457- """Tests for lambda_handler when a config file is uploaded."""
458-
459- config_event = {
460- "Records" : [{"s3" : {"bucket" : {"name" : BucketNames .CONFIG }, "object" : {"key" : (PERMISSIONS_CONFIG_FILE_KEY )}}}]
461- }
462-
463- def setUp (self ):
464- GenericSetUp (s3_client , firehose_client , sqs_client , dynamodb_client )
465-
466- def tearDown (self ):
467- GenericTearDown (s3_client , firehose_client , sqs_client , dynamodb_client )
468-
469- def test_elasticcache_failure_handled (self ):
470- "Tests if elastic cache failure is handled when service fails to send message"
471- event = {
472- "s3" : {
473- "bucket" : {"name" : "my-config-bucket" }, # triggers 'config' branch
474- "object" : {"key" : "testfile.csv" }
475- }
476- }
477-
478- with patch ("file_name_processor.upload_to_elasticache" , side_effect = Exception ("Upload failed" )), \
479- patch ("file_name_processor.logger" ) as mock_logger :
480-
481- result = handle_record (event )
482-
483- self .assertEqual (result ["statusCode" ], 500 )
484- self .assertEqual (result ["message" ], "Failed to upload file content to cache" )
485- self .assertEqual (result ["file_key" ], "testfile.csv" )
486- self .assertIn ("error" , result )
487-
488- mock_logger .error .assert_called_once ()
489- logged_msg = mock_logger .error .call_args [0 ][0 ]
490- self .assertIn ("Error uploading to cache" , logged_msg )
491-
492- def test_successful_processing_from_configs (self ):
493- """Tests that the permissions config file content is uploaded to elasticache successfully"""
494- fake_redis = fakeredis .FakeStrictRedis ()
495-
496- ravs_rsv_file_details_1 = MockFileDetails .ravs_rsv_1
497- ravs_rsv_file_details_2 = MockFileDetails .ravs_rsv_2
498- s3_client .put_object (Bucket = BucketNames .SOURCE , Key = ravs_rsv_file_details_1 .file_key )
499- s3_client .put_object (Bucket = BucketNames .SOURCE , Key = ravs_rsv_file_details_2 .file_key )
500- record_1 = {"s3" : {"bucket" : {"name" : BucketNames .SOURCE }, "object" : {"key" : ravs_rsv_file_details_1 .file_key }}}
501- record_2 = {"s3" : {"bucket" : {"name" : BucketNames .SOURCE }, "object" : {"key" : ravs_rsv_file_details_2 .file_key }}}
502-
503- ravs_rsv_permissions = {"RAVS" : ["RSV_FULL" ], "EMIS" : ["FLU_CREATE" , "FLU_UPDATE" ]}
504- ravs_no_rsv_permissions = {"RAVS" : ["FLU_FULL" ], "EMIS" : ["RSV_CREATE" , "RSV_UPDATE" ], "TPP" : ["RSV_DELETE" ]}
505-
506- # Test that the permissions config file content is uploaded to elasticache successfully
507- s3_client .put_object (
508- Bucket = BucketNames .CONFIG ,
509- Key = PERMISSIONS_CONFIG_FILE_KEY ,
510- Body = generate_permissions_config_content (ravs_rsv_permissions ),
511- )
512- with patch ("elasticache.redis_client" , new = fake_redis ):
513- lambda_handler (self .config_event , None )
514- self .assertEqual (
515- json_loads (fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_rsv_permissions }
516- )
517-
518- # Check that a RAVS RSV file processes successfully (as RAVS has permissions for RSV)
519- with (
520- patch ("file_name_processor.uuid4" , return_value = ravs_rsv_file_details_1 .message_id ),
521- patch ("elasticache.redis_client" , new = fake_redis ),
522- ):
523- result = handle_record (record_1 )
524- expected_result = {
525- "statusCode" : 200 ,
526- "message" : "Successfully sent to SQS for further processing" ,
527- "file_key" : ravs_rsv_file_details_1 .file_key ,
528- "message_id" : ravs_rsv_file_details_1 .message_id ,
529- "vaccine_type" : ravs_rsv_file_details_1 .vaccine_type ,
530- "supplier" : ravs_rsv_file_details_1 .supplier
531- }
532- self .assertEqual (result , expected_result )
533-
534- # Test that the elasticache is successfully updated when the lambda is invoked with a new permissions config
535- s3_client .put_object (
536- Bucket = BucketNames .CONFIG ,
537- Key = PERMISSIONS_CONFIG_FILE_KEY ,
538- Body = generate_permissions_config_content (ravs_no_rsv_permissions ),
539- )
540- with patch ("elasticache.redis_client" , new = fake_redis ):
541- lambda_handler (self .config_event , None )
542- self .assertEqual (
543- json_loads (fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_no_rsv_permissions }
544- )
545-
546- # Check that a RAVS RSV file fails to process (as RAVS now does not have permissions for RSV)
547- with (
548- patch ("file_name_processor.uuid4" , return_value = ravs_rsv_file_details_2 .message_id ),
549- patch ("elasticache.redis_client" , new = fake_redis ),
550- ):
551- result = handle_record (record_2 )
552- expected_result = {
553- "statusCode" : 403 ,
554- "message" : "Infrastructure Level Response Value - Processing Error" ,
555- "file_key" : ravs_rsv_file_details_2 .file_key ,
556- "message_id" : ravs_rsv_file_details_2 .message_id ,
557- "error" : "Initial file validation failed: RAVS does not have permissions for RSV" ,
558- "vaccine_type" : ravs_rsv_file_details_2 .vaccine_type ,
559- "supplier" : ravs_rsv_file_details_2 .supplier
560- }
561- self .assertEqual (result , expected_result )
562-
563-
564451@patch .dict ("os.environ" , MOCK_ENVIRONMENT_DICT )
565452@mock_s3
566453@mock_dynamodb
0 commit comments