Skip to content

Commit 384b94d

Browse files
committed
FirehoseLogger.send_log
1 parent 68bd07d commit 384b94d

File tree

2 files changed

+62
-15
lines changed

2 files changed

+62
-15
lines changed

delta_backend/src/delta.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def get_vaccine_type(patientsk) -> str:
3737

3838

3939
def handler(event, context):
40+
4041
logger.info("Starting Delta Handler")
4142
log_data = dict()
4243
firehose_log = dict()

delta_backend/tests/test_delta.py

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
os.environ["AWS_SQS_QUEUE_URL"] = "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue"
99
os.environ["DELTA_TABLE_NAME"] = "my_delta_table"
1010
os.environ["SOURCE"] = "my_source"
11+
os.environ["SPLUNK_FIREHOSE_NAME"] = "my_firehose"
1112

1213
from src.delta import send_message, handler # Import after setting environment variables
1314
import json
@@ -25,6 +26,19 @@ def setup_mock_sqs(mock_boto_client, return_value={"ResponseMetadata": {"HTTPSta
2526
mock_sqs.send_message.return_value = return_value
2627
return mock_sqs
2728

29+
@staticmethod
30+
def setup_mock_firehose(mock_boto_client, return_value={"ResponseMetadata": {"HTTPStatusCode": 200}}):
31+
mock_firehose = mock_boto_client.return_value
32+
mock_firehose.put_record.return_value = return_value
33+
return mock_firehose
34+
35+
@staticmethod
36+
def setup_mock_firehose(mock_boto_client, return_value={"ResponseMetadata": {"HTTPStatusCode": 200}}):
37+
mock_firehose = mock_boto_client.return_value
38+
mock_firehose.put_record.return_value = return_value
39+
return mock_firehose
40+
41+
2842
@staticmethod
2943
def setup_mock_dynamodb(mock_boto_resource, status_code=200):
3044
"""
@@ -128,9 +142,11 @@ def test_send_message_client_error(self, mock_logger_info, mock_boto_client):
128142
f"Error sending record to DLQ: An error occurred (500) when calling the SendMessage operation: Internal Server Error"
129143
)
130144

145+
@patch("delta.FirehoseLogger.send_log")
131146
@patch("boto3.resource")
132-
def test_handler_success_insert(self, mock_boto_resource):
147+
def test_handler_success_insert(self, mock_boto_resource, mock_send_log):
133148
# Arrange
149+
mock_send_log.return_value = None
134150
self.setup_mock_dynamodb(mock_boto_resource)
135151
suppilers = ["DPS", "EMIS"]
136152
for supplier in suppilers:
@@ -144,9 +160,11 @@ def test_handler_success_insert(self, mock_boto_resource):
144160
# Assert
145161
self.assertEqual(result["statusCode"], 200)
146162

163+
@patch("delta.FirehoseLogger.send_log")
147164
@patch("boto3.resource")
148-
def test_handler_failure(self, mock_boto_resource):
165+
def test_handler_failure(self, mock_boto_resource, mock_send_log):
149166
# Arrange
167+
mock_send_log.return_value = None
150168
self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
151169
event = self.get_event()
152170

@@ -156,9 +174,11 @@ def test_handler_failure(self, mock_boto_resource):
156174
# Assert
157175
self.assertEqual(result["statusCode"], 500)
158176

177+
@patch("delta.FirehoseLogger.send_log")
159178
@patch("boto3.resource")
160-
def test_handler_success_update(self, mock_boto_resource):
179+
def test_handler_success_update(self, mock_boto_resource, mock_send_log):
161180
# Arrange
181+
mock_send_log.return_value = None
162182
self.setup_mock_dynamodb(mock_boto_resource)
163183
event = self.get_event(event_name="UPDATE", operation="UPDATE")
164184

@@ -168,9 +188,11 @@ def test_handler_success_update(self, mock_boto_resource):
168188
# Assert
169189
self.assertEqual(result["statusCode"], 200)
170190

191+
@patch("delta.FirehoseLogger.send_log")
171192
@patch("boto3.resource")
172-
def test_handler_success_remove(self, mock_boto_resource):
193+
def test_handler_success_remove(self, mock_boto_resource, mock_send_log):
173194
# Arrange
195+
mock_send_log.return_value = None
174196
self.setup_mock_dynamodb(mock_boto_resource)
175197
event = self.get_event(event_name="REMOVE", operation="DELETE")
176198

@@ -180,10 +202,12 @@ def test_handler_success_remove(self, mock_boto_resource):
180202
# Assert
181203
self.assertEqual(result["statusCode"], 200)
182204

205+
@patch("delta.FirehoseLogger.send_log") # Patch the method directly
183206
@patch("boto3.resource")
184207
@patch("boto3.client")
185-
def test_handler_exception_intrusion_check(self, mock_boto_resource, mock_boto_client):
208+
def test_handler_exception_intrusion_check(self, mock_boto_resource, mock_boto_client, mock_send_log):
186209
# Arrange
210+
mock_send_log.return_value = None
187211
self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
188212
mock_boto_client.return_value = MagicMock()
189213
event = self.get_event()
@@ -193,22 +217,26 @@ def test_handler_exception_intrusion_check(self, mock_boto_resource, mock_boto_c
193217
result = handler(event, self.context)
194218
self.assertEqual(result["statusCode"], 500)
195219

220+
@patch("delta.FirehoseLogger.send_log") # Patch the method directly
196221
@patch("boto3.resource")
197222
@patch("boto3.client")
198-
def test_handler_exception_intrusion(self, mock_boto_resource, mock_boto_client):
223+
def test_handler_exception_intrusion(self, mock_boto_resource, mock_boto_client, mock_send_log):
199224
# Arrange
200225
self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
226+
mock_send_log.return_value = None
201227
event = self.get_event()
202228
context = {}
203229

204230
# Act & Assert
205231
with self.assertRaises(Exception):
206232
handler(event, context)
207233

234+
@patch("delta.FirehoseLogger.send_log")
208235
@patch("boto3.resource")
209236
@patch("delta.handler")
210-
def test_handler_exception_intrusion_check_false(self, mock_boto_resource, mock_boto_client):
237+
def test_handler_exception_intrusion_check_false(self, mock_boto_resource, mock_boto_client, mock_send_log):
211238
# Arrange
239+
mock_send_log.return_value = None
212240
self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
213241
event = self.get_event()
214242
context = {}
@@ -217,27 +245,45 @@ def test_handler_exception_intrusion_check_false(self, mock_boto_resource, mock_
217245
with self.assertRaises(Exception):
218246
handler(event, context)
219247

220-
@patch("delta.firehose_logger.send_log") # Mock Firehose logger
221-
@patch("delta.logger.info") # Mock logging
222-
def test_dps_record_skipped(self, mock_logger_info, mock_firehose_send_log):
248+
@patch("delta.FirehoseLogger.send_log") # Patch the method directly
249+
@patch("boto3.client")
250+
@patch("delta.logger.info")
251+
def test_dps_record_skipped(self, mock_logger_info, mock_boto_client, mock_send_log):
252+
"""
253+
Test that DPSFULL records are skipped and Firehose put_record is mocked.
254+
"""
255+
# Arrange
256+
mock_firehose_client = self.setup_mock_firehose(mock_boto_client)
257+
258+
mock_send_log.return_value = None
259+
260+
# Create a test event with supplier "DPSFULL"
223261
event = self.get_event(supplier="DPSFULL")
224262
context = {}
225263

264+
# Act
226265
response = handler(event, context)
227-
print(f"final response1: {response}")
228266

267+
# Assert
268+
# check send_log was called
269+
mock_send_log.assert_called_once()
229270
self.assertEqual(response["statusCode"], 200)
230271
self.assertEqual(response["body"], "Record from DPS skipped for 12345")
231272

232-
# Check logging and Firehose were called
273+
# Check logging was called
233274
mock_logger_info.assert_called_with("Record from DPS skipped for 12345")
234275

235-
# TODO - amend test once error handling implemented
236-
@patch("delta.firehose_logger.send_log")
276+
# Ensure Firehose put_record was not called since DPSFULL records are skipped
277+
mock_firehose_client.put_record.assert_not_called()
278+
279+
# # TODO - amend test once error handling implemented
280+
@patch("delta.FirehoseLogger.send_log") # Patch the method directly
237281
@patch("delta.logger.info")
238282
@patch("Converter.Converter")
239283
@patch("delta.boto3.resource")
240-
def test_partial_success_with_errors(self, mock_dynamodb, mock_converter, mock_logger_info, mock_firehose_send_log):
284+
def test_partial_success_with_errors(self, mock_dynamodb, mock_converter, mock_logger_info, mock_send_log):
285+
286+
mock_send_log.return_value = None
241287
mock_converter_instance = MagicMock()
242288
mock_converter_instance.runConversion.return_value = [{}]
243289
mock_converter_instance.getErrorRecords.return_value = [{"error": "Invalid field"}]

0 commit comments

Comments
 (0)