55from json import loads as json_loads
66from contextlib import ExitStack
77from copy import deepcopy
8+ from constants import VACCINE_TYPE_TO_DISEASES_HASH_KEY
9+ from elasticache import get_valid_vaccine_types_from_cache
810import fakeredis
911from boto3 import client as boto3_client
1012from moto import mock_s3 , mock_sqs , mock_firehose , mock_dynamodb
@@ -67,6 +69,7 @@ def run(self, result=None):
6769 patch ("elasticache.redis_client" , new = fakeredis .FakeStrictRedis ()),
6870 # Patch the permissions config to allow all suppliers full permissions for all vaccine types.
6971 patch ("elasticache.redis_client.get" , return_value = all_permissions_config_content ),
72+ patch ("elasticache.redis_client.hkeys" , return_value = all_vaccine_types_in_this_test_file ),
7073 ]
7174
7275 with ExitStack () as stack :
@@ -457,12 +460,18 @@ class TestLambdaHandlerConfig(TestCase):
457460 """Tests for lambda_handler when a config file is uploaded."""
458461
459462 config_event = {
460- "Records" : [{"s3" : {"bucket" : {"name" : BucketNames .CONFIG }, "object" : {"key" : ( PERMISSIONS_CONFIG_FILE_KEY ) }}}]
463+ "Records" : [{"s3" : {"bucket" : {"name" : BucketNames .CONFIG }, "object" : {"key" : PERMISSIONS_CONFIG_FILE_KEY }}}]
461464 }
462465
463466 def setUp (self ):
464467 GenericSetUp (s3_client , firehose_client , sqs_client , dynamodb_client )
465468
469+ self .fake_redis = fakeredis .FakeStrictRedis (decode_responses = True )
470+ self .fake_redis .hmset (VACCINE_TYPE_TO_DISEASES_HASH_KEY , {"RSV" : "[]" })
471+ redis_patcher = patch ("elasticache.redis_client" , new = self .fake_redis )
472+ self .addCleanup (redis_patcher .stop )
473+ redis_patcher .start ()
474+
466475 def tearDown (self ):
467476 GenericTearDown (s3_client , firehose_client , sqs_client , dynamodb_client )
468477
@@ -475,8 +484,10 @@ def test_elasticcache_failure_handled(self):
475484 }
476485 }
477486
478- with patch ("file_name_processor.upload_to_elasticache" , side_effect = Exception ("Upload failed" )), \
479- patch ("file_name_processor.logger" ) as mock_logger :
487+ with (
488+ patch ("file_name_processor.upload_to_elasticache" , side_effect = Exception ("Upload failed" )),
489+ patch ("file_name_processor.logger" ) as mock_logger
490+ ):
480491
481492 result = handle_record (event )
482493
@@ -491,8 +502,6 @@ def test_elasticcache_failure_handled(self):
491502
492503 def test_successful_processing_from_configs (self ):
493504 """Tests that the permissions config file content is uploaded to elasticache successfully"""
494- fake_redis = fakeredis .FakeStrictRedis ()
495-
496505 ravs_rsv_file_details_1 = MockFileDetails .ravs_rsv_1
497506 ravs_rsv_file_details_2 = MockFileDetails .ravs_rsv_2
498507 s3_client .put_object (Bucket = BucketNames .SOURCE , Key = ravs_rsv_file_details_1 .file_key )
@@ -509,17 +518,13 @@ def test_successful_processing_from_configs(self):
509518 Key = PERMISSIONS_CONFIG_FILE_KEY ,
510519 Body = generate_permissions_config_content (ravs_rsv_permissions ),
511520 )
512- with patch ("elasticache.redis_client" , new = fake_redis ):
513- lambda_handler (self .config_event , None )
521+ lambda_handler (self .config_event , None )
514522 self .assertEqual (
515- json_loads (fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_rsv_permissions }
523+ json_loads (self . fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_rsv_permissions }
516524 )
517525
518526 # 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- ):
527+ with patch ("file_name_processor.uuid4" , return_value = ravs_rsv_file_details_1 .message_id ):
523528 result = handle_record (record_1 )
524529 expected_result = {
525530 "statusCode" : 200 ,
@@ -537,17 +542,13 @@ def test_successful_processing_from_configs(self):
537542 Key = PERMISSIONS_CONFIG_FILE_KEY ,
538543 Body = generate_permissions_config_content (ravs_no_rsv_permissions ),
539544 )
540- with patch ("elasticache.redis_client" , new = fake_redis ):
541- lambda_handler (self .config_event , None )
545+ lambda_handler (self .config_event , None )
542546 self .assertEqual (
543- json_loads (fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_no_rsv_permissions }
547+ json_loads (self . fake_redis .get (PERMISSIONS_CONFIG_FILE_KEY )), {"all_permissions" : ravs_no_rsv_permissions }
544548 )
545549
546550 # 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+ with patch ("file_name_processor.uuid4" , return_value = ravs_rsv_file_details_2 .message_id ):
551552 result = handle_record (record_2 )
552553 expected_result = {
553554 "statusCode" : 403 ,
@@ -572,6 +573,10 @@ class TestUnexpectedBucket(TestCase):
572573 def setUp (self ):
573574 GenericSetUp (s3_client , firehose_client , sqs_client , dynamodb_client )
574575
576+ redis_patcher = patch ("elasticache.redis_client.hkeys" , return_value = all_vaccine_types_in_this_test_file )
577+ self .addCleanup (redis_patcher .stop )
578+ redis_patcher .start ()
579+
575580 def tearDown (self ):
576581 GenericTearDown (s3_client , firehose_client , sqs_client , dynamodb_client )
577582
0 commit comments