Skip to content

Commit 6e02f42

Browse files
committed
VED-294: Send messages with any failures to the DLQ. Add test assertions.
1 parent f52d85b commit 6e02f42

2 files changed

Lines changed: 24 additions & 5 deletions

File tree

delta_backend/src/delta.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,7 @@ def handler(event, _context):
223223
send_message(event) # Send failed records to DLQ
224224
send_firehose({"function_name": "delta_sync", "operation_outcome": operation_outcome})
225225

226-
# TODO - should we be doing this too?
227-
# if not overall_success:
228-
# send_message(event)
226+
if not overall_success:
227+
send_message(event)
229228

230229
return overall_success

delta_backend/tests/test_delta.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
from common.mappings import EventName, Operation, ActionFlag
88
from utils_for_converter_tests import ValuesForTests, RecordConfig
99

10+
TEST_QUEUE_URL = "https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue"
11+
1012
# Set environment variables before importing the module
1113
## @TODO: # Note: Environment variables shared across tests, thus aligned
12-
os.environ["AWS_SQS_QUEUE_URL"] = "https://sqs.eu-west-2.amazonaws.com/123456789012/test-queue"
14+
os.environ["AWS_SQS_QUEUE_URL"] = TEST_QUEUE_URL
1315
os.environ["DELTA_TABLE_NAME"] = "my_delta_table"
1416
os.environ["SOURCE"] = "my_source"
1517

@@ -103,8 +105,20 @@ def test_handler_success_insert(self):
103105
self.assertEqual(put_item_data["Imms"]["ACTION_FLAG"], ActionFlag.CREATE)
104106
self.assertEqual(put_item_data["Operation"], Operation.CREATE)
105107
self.assertEqual(put_item_data["SupplierSystem"], supplier)
108+
self.mock_sqs_client.send_message.assert_not_called()
109+
110+
def test_handler_overall_failure(self):
111+
# Arrange
112+
event = {"invalid_format": True}
113+
114+
# Act
115+
result = handler(event, None)
116+
117+
# Assert
118+
self.assertFalse(result)
119+
self.mock_sqs_client.send_message.assert_called_with(QueueUrl=TEST_QUEUE_URL, MessageBody=json.dumps(event))
106120

107-
def test_handler_failure(self):
121+
def test_handler_processing_failure(self):
108122
# Arrange
109123
self.mock_delta_table.put_item.return_value = FAIL_RESPONSE
110124
event = ValuesForTests.get_event()
@@ -114,6 +128,7 @@ def test_handler_failure(self):
114128

115129
# Assert
116130
self.assertFalse(result)
131+
self.mock_sqs_client.send_message.assert_called_with(QueueUrl=TEST_QUEUE_URL, MessageBody=json.dumps(event))
117132

118133
def test_handler_success_update(self):
119134
# Arrange
@@ -134,6 +149,7 @@ def test_handler_success_update(self):
134149
self.assertEqual(put_item_data["Imms"]["ACTION_FLAG"], ActionFlag.UPDATE)
135150
self.assertEqual(put_item_data["Operation"], Operation.UPDATE)
136151
self.assertEqual(put_item_data["ImmsID"], imms_id)
152+
self.mock_sqs_client.send_message.assert_not_called()
137153

138154
def test_handler_success_delete_physical(self):
139155
# Arrange
@@ -154,6 +170,7 @@ def test_handler_success_delete_physical(self):
154170
self.assertEqual(put_item_data["Operation"], Operation.DELETE_PHYSICAL)
155171
self.assertEqual(put_item_data["ImmsID"], imms_id)
156172
self.assertEqual(put_item_data["Imms"], "") # check imms has been blanked out
173+
self.mock_sqs_client.send_message.assert_not_called()
157174

158175
def test_handler_success_delete_logical(self):
159176
# Arrange
@@ -175,6 +192,7 @@ def test_handler_success_delete_logical(self):
175192
self.assertEqual(put_item_data["Imms"]["ACTION_FLAG"], ActionFlag.DELETE_LOGICAL)
176193
self.assertEqual(put_item_data["Operation"], Operation.DELETE_LOGICAL)
177194
self.assertEqual(put_item_data["ImmsID"], imms_id)
195+
self.mock_sqs_client.send_message.assert_not_called()
178196

179197
@patch("delta.logger.info")
180198
def test_dps_record_skipped(self, mock_logger_info):
@@ -186,6 +204,8 @@ def test_dps_record_skipped(self, mock_logger_info):
186204

187205
# Check logging and Firehose were called
188206
mock_logger_info.assert_called_with("Record from DPS skipped")
207+
self.mock_firehose_logger.send_log.assert_called()
208+
self.mock_sqs_client.send_message.assert_not_called()
189209

190210
@patch("delta.Converter")
191211
def test_partial_success_with_errors(self, mock_converter):

0 commit comments

Comments
 (0)