33"""
44from unittest .mock import Mock , patch
55from uuid import uuid4
6-
76import pytest
87from digital_letters_events import MESHInboxMessageDownloaded , MESHInboxMessageInvalid
98from mesh_acknowledge .message_processor import MessageProcessor
@@ -74,13 +73,15 @@ def downloaded_event_fixture():
7473
7574@pytest .fixture (name = 'valid_sqs_message' )
7675def create_valid_sqs_message ():
77- """Create a valid SQS message with one record"""
76+ """Create a valid SQS message with one downloaded event record"""
77+ event_id = str (uuid4 ())
78+ import json
7879 return {
7980 'Records' : [
8081 {
8182 'messageId' : 'sqs-msg-123' ,
8283 'eventSource' : 'aws:sqs' ,
83- 'body' : 'detail": { }' ,
84+ 'body' : json . dumps ({ 'detail' : create_downloaded_event_dict ( event_id )}) ,
8485 }
8586 ]
8687 }
@@ -153,11 +154,11 @@ def test_process_message_multiple_records(
153154 message = {
154155 'Records' : [
155156 {'messageId' : 'msg-1' , 'eventSource' : 'aws:sqs' ,
156- 'body' : '{"detail": {}}' },
157+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' },
157158 {'messageId' : 'msg-2' , 'eventSource' : 'aws:sqs' ,
158- 'body' : '{"detail": {}}' },
159+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' },
159160 {'messageId' : 'msg-3' , 'eventSource' : 'aws:sqs' ,
160- 'body' : '{"detail": {}}' }
161+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' }
161162 ]
162163 }
163164
@@ -191,11 +192,11 @@ def test_process_message_partial_failures(
191192 message = {
192193 'Records' : [
193194 {'messageId' : 'msg-1' , 'eventSource' : 'aws:sqs' ,
194- 'body' : '{"detail": {}}' },
195+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' },
195196 {'messageId' : 'msg-2' , 'eventSource' : 'aws:sqs' ,
196- 'body' : '{"detail": {}}' },
197+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' },
197198 {'messageId' : 'msg-3' , 'eventSource' : 'aws:sqs' ,
198- 'body' : '{"detail": {}}' }
199+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' }
199200 ]
200201 }
201202
@@ -222,11 +223,11 @@ def test_process_message_all_failures(
222223 'Records' : [
223224 {
224225 'messageId' : 'msg-1' , 'eventSource' : 'aws:sqs' ,
225- 'body' : '{"detail": {}}'
226+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}'
226227 },
227228 {
228229 'messageId' : 'msg-2' , 'eventSource' : 'aws:sqs' ,
229- 'body' : '{"detail": {}}'
230+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}'
230231 }
231232 ]
232233 }
@@ -444,11 +445,11 @@ def test_process_message_logs_summary(
444445 message = {
445446 'Records' : [
446447 {'messageId' : 'msg-1' , 'eventSource' : 'aws:sqs' ,
447- 'body' : '{"detail": {}}' },
448+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' },
448449 {'messageId' : 'msg-2' , 'eventSource' : 'aws:sqs' ,
449- 'body' : '{"detail": {}}' },
450+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' },
450451 {'messageId' : 'msg-3' , 'eventSource' : 'aws:sqs' ,
451- 'body' : '{"detail": {}}' }
452+ 'body' : '{"detail": {"type": "uk.nhs.notify.digital.letters.mesh.inbox.message.downloaded.v1" }}' }
452453 ]
453454 }
454455
@@ -468,8 +469,8 @@ def invalid_event_fixture():
468469 return MESHInboxMessageInvalid (** create_invalid_event_dict (event_id ))
469470
470471
471- @pytest .fixture (name = 'valid_invalid_sqs_message ' )
472- def create_valid_invalid_sqs_message ():
472+ @pytest .fixture (name = 'invalid_sqs_message ' )
473+ def create_invalid_sqs_message ():
473474 """Create a valid SQS message containing a MESHInboxMessageInvalid record"""
474475 event_id = str (uuid4 ())
475476 return {
@@ -501,7 +502,7 @@ def test_process_invalid_event_success(
501502 mock_sender_lookup ,
502503 mock_event_publisher ,
503504 mock_logger ,
504- valid_invalid_sqs_message ,
505+ invalid_sqs_message ,
505506 invalid_event : MESHInboxMessageInvalid
506507 ):
507508 """Test successful processing of a MESHInboxMessageInvalid SQS record"""
@@ -511,12 +512,12 @@ def test_process_invalid_event_success(
511512 mock_sender_lookup .get_mailbox_id .return_value = mesh_mailbox_id
512513 mock_acknowledger .negative_acknowledge_message .return_value = "NACK123"
513514
514- result = message_processor .process_message (valid_invalid_sqs_message )
515+ result = message_processor .process_message (invalid_sqs_message )
515516
516517 assert result == []
517518
518519 mock_parse_invalid .assert_called_once_with (
519- valid_invalid_sqs_message ['Records' ][0 ],
520+ invalid_sqs_message ['Records' ][0 ],
520521 mock_logger
521522 )
522523 mock_sender_lookup .get_mailbox_id .assert_called_once_with (
@@ -545,14 +546,14 @@ def test_process_invalid_event_unknown_sender_returns_failure(
545546 message_processor ,
546547 mock_sender_lookup ,
547548 mock_acknowledger ,
548- valid_invalid_sqs_message ,
549+ invalid_sqs_message ,
549550 invalid_event : MESHInboxMessageInvalid
550551 ):
551552 """Test that an unknown senderId causes a batch failure for invalid events"""
552553 mock_parse_invalid .return_value = invalid_event
553554 mock_sender_lookup .get_mailbox_id .return_value = None
554555
555- result = message_processor .process_message (valid_invalid_sqs_message )
556+ result = message_processor .process_message (invalid_sqs_message )
556557
557558 assert len (result ) == 1
558559 assert result [0 ] == {"itemIdentifier" : "sqs-msg-invalid-123" }
@@ -569,15 +570,15 @@ def test_process_invalid_event_nack_error_returns_failure(
569570 message_processor ,
570571 mock_sender_lookup ,
571572 mock_acknowledger ,
572- valid_invalid_sqs_message ,
573+ invalid_sqs_message ,
573574 invalid_event : MESHInboxMessageInvalid
574575 ):
575576 """Test that a NACK send failure causes a batch failure"""
576577 mock_parse_invalid .return_value = invalid_event
577578 mock_sender_lookup .get_mailbox_id .return_value = "MAILBOX001"
578579 mock_acknowledger .negative_acknowledge_message .side_effect = RuntimeError ("NACK failed" )
579580
580- result = message_processor .process_message (valid_invalid_sqs_message )
581+ result = message_processor .process_message (invalid_sqs_message )
581582
582583 assert len (result ) == 1
583584 assert result [0 ] == {"itemIdentifier" : "sqs-msg-invalid-123" }
@@ -594,7 +595,7 @@ def test_process_invalid_event_publish_error_sends_to_dlq(
594595 mock_sender_lookup ,
595596 mock_acknowledger ,
596597 mock_dlq ,
597- valid_invalid_sqs_message ,
598+ invalid_sqs_message ,
598599 invalid_event : MESHInboxMessageInvalid
599600 ):
600601 """
@@ -605,11 +606,11 @@ def test_process_invalid_event_publish_error_sends_to_dlq(
605606 mock_acknowledger .negative_acknowledge_message .return_value = "NACK123"
606607 mock_publish_nack .side_effect = Exception ("Publish failed" )
607608
608- result = message_processor .process_message (valid_invalid_sqs_message )
609+ result = message_processor .process_message (invalid_sqs_message )
609610
610611 assert result == []
611612 mock_dlq .send_to_queue .assert_called_once_with (
612- record = valid_invalid_sqs_message ['Records' ][0 ],
613+ record = invalid_sqs_message ['Records' ][0 ],
613614 reason = "Failed to publish negative acknowledged event"
614615 )
615616
@@ -623,7 +624,7 @@ def test_process_invalid_event_dlq_error_returns_failure(
623624 mock_sender_lookup ,
624625 mock_acknowledger ,
625626 mock_dlq ,
626- valid_invalid_sqs_message ,
627+ invalid_sqs_message ,
627628 invalid_event : MESHInboxMessageInvalid
628629 ):
629630 """Test that if both publish and DLQ fail, the record is returned as a batch failure"""
@@ -633,7 +634,7 @@ def test_process_invalid_event_dlq_error_returns_failure(
633634 mock_publish_nack .side_effect = Exception ("Publish failed" )
634635 mock_dlq .send_to_queue .side_effect = Exception ("DLQ send failed" )
635636
636- result = message_processor .process_message (valid_invalid_sqs_message )
637+ result = message_processor .process_message (invalid_sqs_message )
637638
638639 assert len (result ) == 1
639640 assert result [0 ] == {"itemIdentifier" : "sqs-msg-invalid-123" }
0 commit comments