11"""Tests for lambda_handler"""
2+ import json
23import sys
34from unittest .mock import patch
45from unittest import TestCase
1920from tests .utils_for_tests .mock_environment_variables import MOCK_ENVIRONMENT_DICT , BucketNames , Sqs
2021from tests .utils_for_tests .values_for_tests import MOCK_CREATED_AT_FORMATTED_STRING , MockFileDetails
2122
23+ from constants import VACCINE_TYPE_TO_DISEASES_HASH_KEY
24+
25+ from elasticache import get_valid_vaccine_types_from_cache
26+
2227# Ensure environment variables are mocked before importing from src files
2328with patch .dict ("os.environ" , MOCK_ENVIRONMENT_DICT ):
2429 from file_name_processor import lambda_handler , handle_record
@@ -67,6 +72,7 @@ def run(self, result=None):
6772 patch ("elasticache.redis_client" , new = fakeredis .FakeStrictRedis ()),
6873 # Patch the permissions config to allow all suppliers full permissions for all vaccine types.
6974 patch ("elasticache.redis_client.get" , return_value = all_permissions_config_content ),
75+ patch ("elasticache.redis_client.hkeys" , return_value = all_vaccine_types_in_this_test_file ),
7076 ]
7177
7278 with ExitStack () as stack :
@@ -457,12 +463,18 @@ class TestLambdaHandlerConfig(TestCase):
457463 """Tests for lambda_handler when a config file is uploaded."""
458464
459465 config_event = {
460- "Records" : [{"s3" : {"bucket" : {"name" : BucketNames .CONFIG }, "object" : {"key" : ( PERMISSIONS_CONFIG_FILE_KEY ) }}}]
466+ "Records" : [{"s3" : {"bucket" : {"name" : BucketNames .CONFIG }, "object" : {"key" : PERMISSIONS_CONFIG_FILE_KEY }}}]
461467 }
462468
463469 def setUp (self ):
464470 GenericSetUp (s3_client , firehose_client , sqs_client , dynamodb_client )
465471
472+ self .fake_redis = fakeredis .FakeStrictRedis (decode_responses = True )
473+ self .fake_redis .hmset (VACCINE_TYPE_TO_DISEASES_HASH_KEY , {"RSV" : "[]" })
474+ redis_patcher = patch ("elasticache.redis_client" , new = self .fake_redis )
475+ self .addCleanup (redis_patcher .stop )
476+ redis_patcher .start ()
477+
466478 def tearDown (self ):
467479 GenericTearDown (s3_client , firehose_client , sqs_client , dynamodb_client )
468480
@@ -475,8 +487,10 @@ def test_elasticcache_failure_handled(self):
475487 }
476488 }
477489
478- with patch ("file_name_processor.upload_to_elasticache" , side_effect = Exception ("Upload failed" )), \
479- patch ("file_name_processor.logger" ) as mock_logger :
490+ with (
491+ patch ("file_name_processor.upload_to_elasticache" , side_effect = Exception ("Upload failed" )),
492+ patch ("file_name_processor.logger" ) as mock_logger
493+ ):
480494
481495 result = handle_record (event )
482496
@@ -491,8 +505,6 @@ def test_elasticcache_failure_handled(self):
491505
492506 def test_successful_processing_from_configs (self ):
493507 """Tests that the permissions config file content is uploaded to elasticache successfully"""
494- fake_redis = fakeredis .FakeStrictRedis ()
495-
496508 ravs_rsv_file_details_1 = MockFileDetails .ravs_rsv_1
497509 ravs_rsv_file_details_2 = MockFileDetails .ravs_rsv_2
498510 s3_client .put_object (Bucket = BucketNames .SOURCE , Key = ravs_rsv_file_details_1 .file_key )
@@ -509,17 +521,13 @@ def test_successful_processing_from_configs(self):
509521 Key = PERMISSIONS_CONFIG_FILE_KEY ,
510522 Body = generate_permissions_config_content (ravs_rsv_permissions ),
511523 )
512- with patch ("elasticache.redis_client" , new = fake_redis ):
513- lambda_handler (self .config_event , None )
524+ lambda_handler (self .config_event , None )
514525 self .assertEqual (
515- json_loads (fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_rsv_permissions }
526+ json_loads (self . fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_rsv_permissions }
516527 )
517528
518529 # 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- ):
530+ with patch ("file_name_processor.uuid4" , return_value = ravs_rsv_file_details_1 .message_id ):
523531 result = handle_record (record_1 )
524532 expected_result = {
525533 "statusCode" : 200 ,
@@ -537,17 +545,13 @@ def test_successful_processing_from_configs(self):
537545 Key = PERMISSIONS_CONFIG_FILE_KEY ,
538546 Body = generate_permissions_config_content (ravs_no_rsv_permissions ),
539547 )
540- with patch ("elasticache.redis_client" , new = fake_redis ):
541- lambda_handler (self .config_event , None )
548+ lambda_handler (self .config_event , None )
542549 self .assertEqual (
543- json_loads (fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_no_rsv_permissions }
550+ json_loads (self . fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_no_rsv_permissions }
544551 )
545552
546553 # 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- ):
554+ with patch ("file_name_processor.uuid4" , return_value = ravs_rsv_file_details_2 .message_id ):
551555 result = handle_record (record_2 )
552556 expected_result = {
553557 "statusCode" : 403 ,
@@ -572,6 +576,10 @@ class TestUnexpectedBucket(TestCase):
572576 def setUp (self ):
573577 GenericSetUp (s3_client , firehose_client , sqs_client , dynamodb_client )
574578
579+ redis_patcher = patch ("elasticache.redis_client.hkeys" , return_value = all_vaccine_types_in_this_test_file )
580+ self .addCleanup (redis_patcher .stop )
581+ redis_patcher .start ()
582+
575583 def tearDown (self ):
576584 GenericTearDown (s3_client , firehose_client , sqs_client , dynamodb_client )
577585
0 commit comments