Skip to content

Commit 24ee9d8

Browse files
committed
fix permissions to fetch from supplier rather than ods_code
1 parent 6c8fcaf commit 24ee9d8

File tree

4 files changed

+69
-25
lines changed

4 files changed

+69
-25
lines changed

lambdas/filenameprocessor/src/file_name_processor.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ def handle_unexpected_bucket_name(bucket_name: str, file_key: str) -> dict:
107107
config and overarching design"""
108108
try:
109109
if file_key.startswith(EXTENDED_ATTRIBUTES_FILE_PREFIX):
110-
vaccine_type, supplier = validate_extended_attributes_file_key(file_key)
111-
extended_attribute_identifier = f"{supplier}_{vaccine_type}"
110+
vaccine_type, organisation_code = validate_extended_attributes_file_key(file_key)
111+
extended_attribute_identifier = f"{organisation_code}_{vaccine_type}"
112112
logger.error(
113113
"Unable to process file %s due to unexpected bucket name %s",
114114
file_key,
@@ -249,8 +249,10 @@ def handle_extended_attributes_file(
249249

250250
extended_attribute_identifier = None
251251
try:
252-
vaccine_type, supplier = validate_extended_attributes_file_key(file_key)
253-
extended_attribute_identifier = validate_permissions_for_extended_attributes_files(vaccine_type, supplier)
252+
vaccine_type, organisation_code = validate_extended_attributes_file_key(file_key)
253+
extended_attribute_identifier = validate_permissions_for_extended_attributes_files(
254+
vaccine_type, organisation_code
255+
)
254256

255257
upsert_audit_table(
256258
message_id,

lambdas/filenameprocessor/src/supplier_permissions.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from common.clients import logger
44
from constants import Operation
5-
from elasticache import get_supplier_permissions_from_cache
5+
from elasticache import get_supplier_permissions_from_cache, get_supplier_system_from_cache
66
from models.errors import VaccineTypePermissionsError
77

88

@@ -22,7 +22,7 @@ def validate_vaccine_type_permissions(vaccine_type: str, supplier: str) -> list:
2222
return supplier_permissions
2323

2424

25-
def validate_permissions_for_extended_attributes_files(vaccine_type: str, supplier: str) -> str:
25+
def validate_permissions_for_extended_attributes_files(vaccine_type: str, ods_code: str) -> str:
2626
"""
2727
Checks that the supplier has COVID vaccine type and its CUD permissions.
2828
Raises an exception if the supplier does not have at least one permission for the vaccine type.
@@ -32,6 +32,7 @@ def validate_permissions_for_extended_attributes_files(vaccine_type: str, suppli
3232
Operation.UPDATE,
3333
Operation.DELETE,
3434
}
35+
supplier = get_supplier_system_from_cache(ods_code)
3536
supplier_permissions = get_supplier_permissions_from_cache(supplier)
3637
cached_operations = [
3738
permission.split(".")[1] for permission in supplier_permissions if permission.split(".")[0] == vaccine_type
@@ -41,4 +42,4 @@ def validate_permissions_for_extended_attributes_files(vaccine_type: str, suppli
4142
logger.error(error_message)
4243
raise VaccineTypePermissionsError(error_message)
4344

44-
return f"{supplier}_{vaccine_type}"
45+
return f"{ods_code}_{vaccine_type}"

lambdas/filenameprocessor/tests/test_lambda_handler.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,11 @@ def test_lambda_handler_extended_attributes_extension_checks(self, mock_get_redi
478478
s3_client.put_object(Bucket=BucketNames.SOURCE, Key=csv_key, Body=MOCK_EXTENDED_ATTRIBUTES_FILE_CONTENT)
479479
with (
480480
patch("file_name_processor.validate_permissions_for_extended_attributes_files", return_value="X8E5B_COVID"),
481+
# Ensure EA DAT case passes permission validation by returning CUDS for X8E5B
482+
patch(
483+
"supplier_permissions.get_supplier_permissions_from_cache",
484+
return_value=["COVID.CUDS"],
485+
),
481486
patch("file_name_processor.uuid4", return_value="EA_csv_id"),
482487
patch(
483488
"file_name_processor.copy_file_to_external_bucket",

lambdas/filenameprocessor/tests/test_supplier_permissions.py

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,30 @@ def test_validate_vaccine_type_permissions(self):
6969

7070
def test_validate_permissions_for_extended_attributes_files_success(self):
7171
"""Supplier with COVID CUD permissions should be accepted and identifier returned."""
72-
with patch(
73-
"supplier_permissions.get_supplier_permissions_from_cache",
74-
return_value=["COVID.CUDS", "FLU.CRUDS"],
72+
with (
73+
patch(
74+
"supplier_permissions.get_supplier_permissions_from_cache",
75+
return_value=["COVID.CUDS", "FLU.CRUDS"],
76+
),
77+
patch(
78+
"supplier_permissions.get_supplier_system_from_cache",
79+
return_value="X8E5B",
80+
),
7581
):
7682
result = validate_permissions_for_extended_attributes_files("COVID", "X8E5B")
7783
self.assertEqual(result, "X8E5B_COVID")
7884

7985
def test_validate_permissions_for_extended_attributes_files_fail_no_covid(self):
8086
"""Supplier without any COVID permissions should raise VaccineTypePermissionsError."""
81-
with patch(
82-
"supplier_permissions.get_supplier_permissions_from_cache",
83-
return_value=["FLU.CRUDS"],
87+
with (
88+
patch(
89+
"supplier_permissions.get_supplier_permissions_from_cache",
90+
return_value=["FLU.CRUDS"],
91+
),
92+
patch(
93+
"supplier_permissions.get_supplier_system_from_cache",
94+
return_value="X8E5B",
95+
),
8496
):
8597
with self.assertRaises(VaccineTypePermissionsError) as context:
8698
validate_permissions_for_extended_attributes_files("COVID", "X8E5B")
@@ -103,9 +115,15 @@ def test_validate_permissions_for_extended_attributes_files_fail_partial_ops(sel
103115

104116
for permissions in partial_permission_cases:
105117
with self.subTest(permissions=permissions):
106-
with patch(
107-
"supplier_permissions.get_supplier_permissions_from_cache",
108-
return_value=permissions,
118+
with (
119+
patch(
120+
"supplier_permissions.get_supplier_permissions_from_cache",
121+
return_value=permissions,
122+
),
123+
patch(
124+
"supplier_permissions.get_supplier_system_from_cache",
125+
return_value="X8E5B",
126+
),
109127
):
110128
with self.assertRaises(VaccineTypePermissionsError) as context:
111129
validate_permissions_for_extended_attributes_files("COVID", "X8E5B")
@@ -116,16 +134,28 @@ def test_validate_permissions_for_extended_attributes_files_fail_partial_ops(sel
116134

117135
def test_validate_permissions_for_extended_attributes_files_multiple_entries(self):
118136
"""Multiple COVID permission entries should pass only if the first matching COVID entry contains CUD."""
119-
with patch(
120-
"supplier_permissions.get_supplier_permissions_from_cache",
121-
return_value=["COVID.CUDS", "COVID.C"],
137+
with (
138+
patch(
139+
"supplier_permissions.get_supplier_permissions_from_cache",
140+
return_value=["COVID.CUDS", "COVID.C"],
141+
),
142+
patch(
143+
"supplier_permissions.get_supplier_system_from_cache",
144+
return_value="RAVS",
145+
),
122146
):
123147
result = validate_permissions_for_extended_attributes_files("COVID", "RAVS")
124148
self.assertEqual(result, "RAVS_COVID")
125149

126-
with patch(
127-
"supplier_permissions.get_supplier_permissions_from_cache",
128-
return_value=["COVID.C", "COVID.CUDS"],
150+
with (
151+
patch(
152+
"supplier_permissions.get_supplier_permissions_from_cache",
153+
return_value=["COVID.C", "COVID.CUDS"],
154+
),
155+
patch(
156+
"supplier_permissions.get_supplier_system_from_cache",
157+
return_value="RAVS",
158+
),
129159
):
130160
with self.assertRaises(VaccineTypePermissionsError) as context:
131161
validate_permissions_for_extended_attributes_files("COVID", "RAVS")
@@ -136,9 +166,15 @@ def test_validate_permissions_for_extended_attributes_files_multiple_entries(sel
136166

137167
def test_validate_permissions_for_extended_attributes_files_crud_passes(self):
138168
"""COVID.CRUD contains C, U, D letters and should be accepted by the current implementation."""
139-
with patch(
140-
"supplier_permissions.get_supplier_permissions_from_cache",
141-
return_value=["COVID.CRUD"],
169+
with (
170+
patch(
171+
"supplier_permissions.get_supplier_permissions_from_cache",
172+
return_value=["COVID.CRUD"],
173+
),
174+
patch(
175+
"supplier_permissions.get_supplier_system_from_cache",
176+
return_value="X8E5B",
177+
),
142178
):
143179
result = validate_permissions_for_extended_attributes_files("COVID", "X8E5B")
144180
self.assertEqual(result, "X8E5B_COVID")

0 commit comments

Comments
 (0)