@@ -87,7 +87,7 @@ def setUp(self):
8787 self .sample_notification = {
8888 "id" : "notif-789" ,
8989 "specversion" : "1.0" ,
90- "type" : "imms-vaccinations-2 " ,
90+ "type" : "imms-vaccinations-1 " ,
9191 "filtering" : {"action" : "CREATE" },
9292 }
9393 self .mock_mns_service = Mock ()
@@ -97,11 +97,11 @@ def setUp(self):
9797 def test_process_record_success (self , mock_logger , mock_create_notification ):
9898 """Test successful processing of a single record."""
9999 mock_create_notification .return_value = self .sample_notification
100- self .mock_mns_service .publish_notification .return_value = { "status_code" : 200 }
100+ self .mock_mns_service .publish_notification .return_value = None
101101
102- result = process_record (self .sample_sqs_record , self .mock_mns_service )
102+ # Should not raise exception
103+ process_record (self .sample_sqs_record , self .mock_mns_service )
103104
104- self .assertIsNone (result )
105105 mock_create_notification .assert_called_once_with (self .sample_sqs_record )
106106 self .mock_mns_service .publish_notification .assert_called_once_with (self .sample_notification )
107107 mock_logger .exception .assert_not_called ()
@@ -112,10 +112,10 @@ def test_process_record_create_notification_failure(self, mock_logger, mock_crea
112112 """Test handling when notification creation fails."""
113113 mock_create_notification .side_effect = Exception ("Creation error" )
114114
115- result = process_record (self .sample_sqs_record , self .mock_mns_service )
115+ # Should raise exception
116+ with self .assertRaises (Exception ):
117+ process_record (self .sample_sqs_record , self .mock_mns_service )
116118
117- self .assertEqual (result , {"itemIdentifier" : "98ed30eb-829f-41df-8a73-57fef70cf161" })
118- mock_logger .exception .assert_called_once ()
119119 self .mock_mns_service .publish_notification .assert_not_called ()
120120
121121 @patch ("process_records.create_mns_notification" )
@@ -125,22 +125,9 @@ def test_process_record_publish_failure(self, mock_logger, mock_create_notificat
125125 mock_create_notification .return_value = self .sample_notification
126126 self .mock_mns_service .publish_notification .side_effect = Exception ("Publish error" )
127127
128- result = process_record (self .sample_sqs_record , self .mock_mns_service )
129-
130- self .assertEqual (result , {"itemIdentifier" : "98ed30eb-829f-41df-8a73-57fef70cf161" })
131- mock_logger .exception .assert_called_once ()
132-
133- @patch ("process_records.create_mns_notification" )
134- @patch ("process_records.logger" )
135- def test_process_record_logs_trace_ids (self , mock_logger , mock_create_notification ):
136- """Test that trace IDs are logged correctly."""
137- mock_create_notification .return_value = self .sample_notification
138-
139- process_record (self .sample_sqs_record , self .mock_mns_service )
140-
141- # Check info log was called with trace IDs
142- info_calls = [call for call in mock_logger .info .call_args_list if "Processing message" in str (call )]
143- self .assertEqual (len (info_calls ), 1 )
128+ # Should raise exception
129+ with self .assertRaises (Exception ):
130+ process_record (self .sample_sqs_record , self .mock_mns_service )
144131
145132
146133class TestProcessRecords (unittest .TestCase ):
@@ -158,33 +145,36 @@ def setUpClass(cls):
158145
159146 cls .sample_sqs_record = raw_event
160147
148+ @patch ("process_records.logger" )
161149 @patch ("process_records.get_mns_service" )
162150 @patch ("process_records.process_record" )
163- def test_process_records_all_success (self , mock_process_record , mock_get_mns ):
151+ def test_process_records_all_success (self , mock_process_record , mock_get_mns , mock_logger ):
164152 """Test processing multiple records with all successes."""
165153 mock_mns_service = Mock ()
166154 mock_get_mns .return_value = mock_mns_service
167- mock_process_record .return_value = None # Success
155+ mock_process_record .return_value = None # No exception
168156
169157 record_2 = self .sample_sqs_record .copy ()
170158 record_2 ["messageId" ] = "different-id"
171159 records = [self .sample_sqs_record , record_2 ]
172160
173161 result = process_records (records )
174162
175- self .assertEqual (result , [] )
163+ self .assertEqual (result , { "batchItemFailures" : []} )
176164 self .assertEqual (mock_process_record .call_count , 2 )
177165 mock_get_mns .assert_called_once ()
166+ mock_logger .info .assert_called_with ("Successfully processed all 2 messages" )
178167
168+ @patch ("process_records.logger" )
179169 @patch ("process_records.get_mns_service" )
180170 @patch ("process_records.process_record" )
181- def test_process_records_partial_failure (self , mock_process_record , mock_get_mns ):
171+ def test_process_records_partial_failure (self , mock_process_record , mock_get_mns , mock_logger ):
182172 """Test processing with some failures."""
183173 mock_mns_service = Mock ()
184174 mock_get_mns .return_value = mock_mns_service
185175 mock_process_record .side_effect = [
186176 None , # Success
187- { "itemIdentifier" : "msg-456" } , # Failure
177+ Exception ( "Processing error" ) , # Failure
188178 ]
189179
190180 record_2 = self .sample_sqs_record .copy ()
@@ -193,24 +183,28 @@ def test_process_records_partial_failure(self, mock_process_record, mock_get_mns
193183
194184 result = process_records (records )
195185
196- self .assertEqual (len (result ), 1 )
197- self .assertEqual (result [0 ]["itemIdentifier" ], "msg-456" )
186+ self .assertEqual (len (result ["batchItemFailures" ]), 1 )
187+ self .assertEqual (result ["batchItemFailures" ][0 ]["itemIdentifier" ], "msg-456" )
188+ mock_logger .warning .assert_called_with ("Batch completed with 1 failures" )
198189
190+ @patch ("process_records.logger" )
199191 @patch ("process_records.get_mns_service" )
200192 @patch ("process_records.process_record" )
201- def test_process_records_empty_list (self , mock_process_record , mock_get_mns ):
193+ def test_process_records_empty_list (self , mock_process_record , mock_get_mns , mock_logger ):
202194 """Test processing empty record list."""
203195 mock_mns_service = Mock ()
204196 mock_get_mns .return_value = mock_mns_service
205197
206198 result = process_records ([])
207199
208- self .assertEqual (result , [] )
200+ self .assertEqual (result , { "batchItemFailures" : []} )
209201 mock_process_record .assert_not_called ()
202+ mock_logger .info .assert_called_with ("Successfully processed all 0 messages" )
210203
204+ @patch ("process_records.logger" )
211205 @patch ("process_records.get_mns_service" )
212206 @patch ("process_records.process_record" )
213- def test_process_records_mns_service_created_once (self , mock_process_record , mock_get_mns ):
207+ def test_process_records_mns_service_created_once (self , mock_process_record , mock_get_mns , mock_logger ):
214208 """Test that MNS service is created only once for batch."""
215209 mock_mns_service = Mock ()
216210 mock_get_mns .return_value = mock_mns_service
@@ -239,35 +233,30 @@ def setUpClass(cls):
239233 cls .sample_sqs_record = raw_event
240234
241235 @patch ("lambda_handler.process_records" )
242- @patch ("lambda_handler.logger" )
243- def test_lambda_handler_all_success (self , mock_logger , mock_process_records ):
236+ def test_lambda_handler_all_success (self , mock_process_records ):
244237 """Test lambda handler with all records succeeding."""
245- mock_process_records .return_value = []
238+ mock_process_records .return_value = { "batchItemFailures" : []}
246239
247240 event = {"Records" : [self .sample_sqs_record ]}
248241 result = lambda_handler (event , Mock ())
249242
250243 self .assertEqual (result , {"batchItemFailures" : []})
251244 mock_process_records .assert_called_once_with ([self .sample_sqs_record ])
252- mock_logger .info .assert_called_with ("Successfully processed all 1 messages" )
253245
254246 @patch ("lambda_handler.process_records" )
255- @patch ("lambda_handler.logger" )
256- def test_lambda_handler_with_failures (self , mock_logger , mock_process_records ):
247+ def test_lambda_handler_with_failures (self , mock_process_records ):
257248 """Test lambda handler with some failures."""
258- mock_process_records .return_value = [{"itemIdentifier" : "msg-123" }]
249+ mock_process_records .return_value = { "batchItemFailures" : [{"itemIdentifier" : "msg-123" }]}
259250
260251 event = {"Records" : [self .sample_sqs_record ]}
261252 result = lambda_handler (event , Mock ())
262253
263254 self .assertEqual (result , {"batchItemFailures" : [{"itemIdentifier" : "msg-123" }]})
264- mock_logger .warning .assert_called_with ("Batch completed with 1 failures" )
265255
266256 @patch ("lambda_handler.process_records" )
267- @patch ("lambda_handler.logger" )
268- def test_lambda_handler_empty_records (self , mock_logger , mock_process_records ):
257+ def test_lambda_handler_empty_records (self , mock_process_records ):
269258 """Test lambda handler with no records."""
270- mock_process_records .return_value = []
259+ mock_process_records .return_value = { "batchItemFailures" : []}
271260
272261 event = {"Records" : []}
273262 result = lambda_handler (event , Mock ())
0 commit comments