@@ -46,16 +46,18 @@ def valid_cloud_event():
4646 'specversion' : '1.0' ,
4747 'source' : '/nhs/england/notify/production/primary/data-plane/digitalletters/mesh' ,
4848 'subject' : 'customer/920fca11-596a-4eca-9c47-99f624614658/recipient/769acdd4-6a47-496f-999f-76a6fd2c3959' ,
49- 'type' : 'uk.nhs.notify.digital.letters.sent .v1' ,
49+ 'type' : 'uk.nhs.notify.digital.letters.mesh.inbox.message.received .v1' ,
5050 'time' : '2023-06-20T12:00:00Z' ,
5151 'recordedtime' : '2023-06-20T12:00:00.250Z' ,
5252 'severitynumber' : 2 ,
53+ 'severitytext' : 'INFO' ,
5354 'traceparent' : '00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01' ,
54- 'dataschema' : 'https://notify.nhs.uk/cloudevents/schemas/digital-letters/2025-10/digital-letter-base-data.schema.json' ,
55+ 'dataschema' : 'https://notify.nhs.uk/cloudevents/schemas/digital-letters/2025-10/digital-letters-mesh-inbox-message-received-data.schema.json' ,
56+ 'dataschemaversion' : '1.0' ,
5557 'data' : {
56- 'digital-letter-id' : '123e4567-e89b-12d3-a456-426614174000' ,
57- 'messageReference' : 'ref1' ,
58+ 'meshMessageId' : 'test-123' ,
5859 'senderId' : 'sender1' ,
60+ 'messageReference' : 'ref_001'
5961 },
6062 }
6163
@@ -67,18 +69,19 @@ def valid_cloud_event2():
6769 'profilepublished' : '2025-10' ,
6870 'id' : '550e8400-e29b-41d4-a716-446655440002' ,
6971 'specversion' : '1.0' ,
70- 'source' : '/nhs/england/notify/development/primary/data-plane/digital-letters ' ,
72+ 'source' : '/nhs/england/notify/development/primary/data-plane/digitalletters/mesh ' ,
7173 'subject' : 'customer/920fca11-596a-4eca-9c47-99f624614658/recipient/769acdd4-6a47-496f-999f-76a6fd2c3959' ,
72- 'type' : 'uk.nhs.notify.digital.letters.sent.v2 ' ,
74+ 'type' : 'uk.nhs.notify.digital.letters.mesh.inbox.message.received.v1 ' ,
7375 'time' : '2023-06-20T12:00:00Z' ,
7476 'recordedtime' : '2023-06-20T12:00:00.250Z' ,
7577 'severitynumber' : 2 ,
7678 'traceparent' : '00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01' ,
77- 'dataschema' : 'https://notify.nhs.uk/cloudevents/schemas/digital-letters/2025-10/digital-letter-base-data.schema.json' ,
79+ 'dataschema' : 'https://notify.nhs.uk/cloudevents/schemas/digital-letters/2025-10/digital-letters-mesh-inbox-message-received-data.schema.json' ,
80+ 'dataschemaversion' : '1.0' ,
7881 'data' : {
79- 'digital-letter-id' : '123e4567-e89b-12d3-a456-426614174001' ,
80- 'messageReference' : 'ref1' ,
82+ 'meshMessageId' : 'test-123' ,
8183 'senderId' : 'sender1' ,
84+ 'messageReference' : 'ref_001'
8285 },
8386 }
8487
@@ -101,11 +104,14 @@ def test_should_return_empty_array_when_no_events_provided(self, test_config, mo
101104 mock_events_client .put_events .assert_not_called ()
102105 mock_sqs_client .send_message_batch .assert_not_called ()
103106
104- def test_should_send_valid_events_to_eventbridge (self , test_config , mock_events_client , valid_cloud_event , valid_cloud_event2 ):
107+ def test_should_send_valid_events_to_eventbridge (self , test_config , mock_events_client , mock_sqs_client , valid_cloud_event , valid_cloud_event2 ):
105108 mock_events_client .put_events .return_value = {
106109 'FailedEntryCount' : 0 ,
107110 'Entries' : [{'EventId' : 'event-1' }]
108111 }
112+ mock_sqs_client .send_message_batch .return_value = {
113+ 'Successful' : []
114+ }
109115
110116 publisher = EventPublisher (** test_config )
111117 result = publisher .send_events ([valid_cloud_event , valid_cloud_event2 ])
@@ -154,6 +160,7 @@ def test_should_send_failed_eventbridge_events_to_dlq(self, test_config, mock_ev
154160
155161 assert result == []
156162 assert mock_events_client .put_events .call_count == 1
163+ # Should call DLQ once for the failed event
157164 assert mock_sqs_client .send_message_batch .call_count == 1
158165
159166 # Verify EventBridge was called with both events
@@ -180,6 +187,7 @@ def test_should_handle_eventbridge_send_error_and_send_all_events_to_dlq(self, t
180187
181188 assert result == []
182189 assert mock_events_client .put_events .call_count == 1
190+ # Should call DLQ once for all events after EventBridge failure
183191 assert mock_sqs_client .send_message_batch .call_count == 1
184192
185193 def test_should_return_failed_events_when_dlq_also_fails (self , test_config , mock_sqs_client , invalid_cloud_event ):
@@ -280,11 +288,14 @@ def test_should_throw_error_when_dlq_url_is_missing(self, test_config):
280288 with pytest .raises (ValueError , match = 'dlq_url has not been specified' ):
281289 EventPublisher (** test_config )
282290
283- def test_should_be_reusable_for_multiple_calls (self , test_config , mock_events_client , valid_cloud_event , valid_cloud_event2 ):
291+ def test_should_be_reusable_for_multiple_calls (self , test_config , mock_events_client , mock_sqs_client , valid_cloud_event , valid_cloud_event2 ):
284292 mock_events_client .put_events .return_value = {
285293 'FailedEntryCount' : 0 ,
286294 'Entries' : [{'EventId' : 'event-1' }]
287295 }
296+ mock_sqs_client .send_message_batch .return_value = {
297+ 'Successful' : []
298+ }
288299
289300 publisher = EventPublisher (** test_config )
290301
0 commit comments