Skip to content

Commit 60399fa

Browse files
committed
cleanup, add tests
1 parent 7d3ba6e commit 60399fa

File tree

2 files changed

+66
-9
lines changed

2 files changed

+66
-9
lines changed

backend/src/log_structure.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,18 @@
1515

1616
firehose_logger = FirehoseLogger()
1717

18-
def _log_data_from_body(event, log_data):
18+
def _log_data_from_body(event) -> dict:
19+
log_data = {}
1920
if event.get("body"):
2021
try:
2122
imms = json.loads(event["body"])
22-
except json.decoder.JSONDecodeError as e:
23-
return log_data
24-
25-
if imms.get("protocolApplied"):
2623
vaccine_type = get_vaccine_type(imms)
2724
log_data["vaccine_type"] = vaccine_type
28-
if imms.get("identifier"):
2925
local_id = imms["identifier"][0]["value"] + "^" + imms["identifier"][0]["system"]
3026
log_data["local_id"] = local_id
27+
except Exception as e:
28+
# if there's no body, or it can't be parsed
29+
return {}
3130
return log_data
3231

3332

@@ -62,7 +61,7 @@ def wrapper(*args, **kwargs):
6261
print(f"Result:{result}")
6362
end = time.time()
6463
log_data["time_taken"] = f"{round(end - start, 5)}s"
65-
log_data = _log_data_from_body(event, log_data)
64+
log_data.update(_log_data_from_body(event))
6665
status = "500"
6766
status_code = "Exception"
6867
diagnostics = str()
@@ -98,7 +97,7 @@ def wrapper(*args, **kwargs):
9897
log_data["error"] = str(e)
9998
end = time.time()
10099
log_data["time_taken"] = f"{round(end - start, 5)}s"
101-
log_data = _log_data_from_body(event, log_data)
100+
log_data.update(_log_data_from_body(event))
102101
logger.exception(json.dumps(log_data))
103102
firehose_log["event"] = log_data
104103
firehose_logger.send_log(firehose_log)

backend/tests/test_log_structure_wrapper.py

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,62 @@ def test_exception_handling(self, mock_logger, mock_firehose_logger):
9797
self.assertEqual(logged_info['resource_path'], '/failed_test')
9898
self.assertEqual(logged_info['error'], str(ValueError("Test error")))
9999
self.assertEqual(logged_info['local_id'], '12345^http://test')
100-
self.assertEqual(logged_info['vaccine_type'], 'FLU')
100+
self.assertEqual(logged_info['vaccine_type'], 'FLU')
101+
102+
def test_invalid_body(self, mock_logger, mock_firehose_logger):
103+
# Arrange
104+
wrapped_function = function_info(self.mock_success_function)
105+
event = {
106+
'headers': {
107+
'X-Correlation-ID': 'test_correlation',
108+
'X-Request-ID': 'test_request',
109+
'SupplierSystem': 'test_supplier'
110+
},
111+
'path': '/test',
112+
'requestContext': {'resourcePath': '/test'},
113+
'body': "{\"identifier\": [{\"system\": \"http://test\", \"value\": \"12345\"}], \"protocolApplied\": []}"
114+
}
115+
116+
# Act
117+
result = wrapped_function(event, {})
118+
119+
# Assert
120+
args, kwargs = mock_logger.info.call_args
121+
logged_info = json.loads(args[0])
122+
123+
self.assertEqual(logged_info['X-Correlation-ID'], 'test_correlation')
124+
self.assertEqual(logged_info['X-Request-ID'], 'test_request')
125+
self.assertEqual(logged_info['supplier'], 'test_supplier')
126+
self.assertEqual(logged_info['actual_path'], '/test')
127+
self.assertEqual(logged_info['resource_path'], '/test')
128+
self.assertNotIn('local_id', logged_info)
129+
self.assertNotIn('vaccine_type', logged_info)
130+
131+
def test_nonexistent_body(self, mock_logger, mock_firehose_logger):
132+
# Arrange
133+
wrapped_function = function_info(self.mock_success_function)
134+
event = {
135+
'headers': {
136+
'X-Correlation-ID': 'test_correlation',
137+
'X-Request-ID': 'test_request',
138+
'SupplierSystem': 'test_supplier'
139+
},
140+
'path': '/test',
141+
'requestContext': {'resourcePath': '/test'}
142+
}
143+
144+
# Act
145+
result = wrapped_function(event, {})
146+
147+
# Assert
148+
args, kwargs = mock_logger.info.call_args
149+
logged_info = json.loads(args[0])
150+
151+
self.assertEqual(logged_info['X-Correlation-ID'], 'test_correlation')
152+
self.assertEqual(logged_info['X-Request-ID'], 'test_request')
153+
self.assertEqual(logged_info['supplier'], 'test_supplier')
154+
self.assertEqual(logged_info['actual_path'], '/test')
155+
self.assertEqual(logged_info['resource_path'], '/test')
156+
self.assertNotIn('local_id', logged_info)
157+
self.assertNotIn('vaccine_type', logged_info)
158+

0 commit comments

Comments
 (0)