55import pytest
66from unittest .mock import Mock , call , patch
77from mesh_client import MeshClient
8+ from src .processor import MeshMessageProcessor
89
910
1011def setup_mocks ():
@@ -53,22 +54,20 @@ def setup_message_data(test_id="0"):
5354
5455
5556def get_remaining_time_in_millis ():
56- return 1000000
57+ return 1000
5758
5859
5960def get_remaining_time_in_millis_near_timeout ():
6061 return 100
6162
6263
64+ @patch ('src.processor.os.getenv' )
65+ @patch ('src.processor.EventPublisher' )
6366class TestMeshMessageProcessor :
6467 """Test suite for MeshMessageProcessor"""
6568
66- @patch ('src.processor.os.getenv' )
67- @patch ('src.processor.EventPublisher' )
6869 def test_process_messages_iterates_through_inbox (self , mock_event_publisher_class , mock_getenv ):
6970 """Test that processor iterates through all messages in MESH inbox"""
70- from src .processor import MeshMessageProcessor
71-
7271 (config , client_lookup , mesh_client , log , polling_metric ) = setup_mocks ()
7372 message1 = setup_message_data ("1" )
7473 message2 = setup_message_data ("2" )
@@ -96,19 +95,13 @@ def test_process_messages_iterates_through_inbox(self, mock_event_publisher_clas
9695
9796 mesh_client .handshake .assert_called_once ()
9897 assert mesh_client .iterate_all_messages .call_count == 2
99- # Messages are acknowledged only on auth errors, not on success
10098 polling_metric .record .assert_called_once ()
10199
102- @patch ('src.processor.os.getenv' )
103- @patch ('src.processor.EventPublisher' )
104100 def test_process_messages_stops_near_timeout (self , mock_event_publisher_class , mock_getenv ):
105101 """Test that processor stops processing when near timeout"""
106- from src .processor import MeshMessageProcessor
107-
108102 (config , client_lookup , mesh_client , log , polling_metric ) = setup_mocks ()
109103 message1 = setup_message_data ("1" )
110104
111- # Mock environment variables
112105 mock_getenv .side_effect = lambda key , default = '' : {
113106 'EVENT_PUBLISHER_EVENT_BUS_ARN' : 'arn:aws:events:eu-west-2:123456789012:event-bus/test' ,
114107 'EVENT_PUBLISHER_DLQ_URL' : 'https://sqs.eu-west-2.amazonaws.com/123456789012/test-dlq'
@@ -127,20 +120,14 @@ def test_process_messages_stops_near_timeout(self, mock_event_publisher_class, m
127120
128121 processor .process_messages ()
129122
130- # Should not process messages when near timeout
131123 client_lookup .is_valid_sender .assert_not_called ()
132124 polling_metric .record .assert_called_once ()
133125
134- @patch ('src.processor.os.getenv' )
135- @patch ('src.processor.EventPublisher' )
136126 def test_process_message_with_valid_sender (self , mock_event_publisher_class , mock_getenv ):
137127 """Test processing a single message from valid sender"""
138- from src .processor import MeshMessageProcessor
139-
140128 (config , client_lookup , mesh_client , log , polling_metric ) = setup_mocks ()
141129 message = setup_message_data ("1" )
142130
143- # Mock environment variables
144131 mock_getenv .side_effect = lambda key , default = '' : {
145132 'EVENT_PUBLISHER_EVENT_BUS_ARN' : 'arn:aws:events:eu-west-2:123456789012:event-bus/test' ,
146133 'EVENT_PUBLISHER_DLQ_URL' : 'https://sqs.eu-west-2.amazonaws.com/123456789012/test-dlq'
@@ -168,16 +155,11 @@ def test_process_message_with_valid_sender(self, mock_event_publisher_class, moc
168155 mock_event_publisher .send_events .assert_called_once ()
169156 message .acknowledge .assert_not_called () # Only acknowledged on auth error
170157
171- @patch ('src.processor.os.getenv' )
172- @patch ('src.processor.EventPublisher' )
173158 def test_process_message_with_unknown_sender (self , mock_event_publisher_class , mock_getenv ):
174159 """Test that messages from unknown senders are rejected silently"""
175- from src .processor import MeshMessageProcessor
176-
177160 (config , client_lookup , mesh_client , log , polling_metric ) = setup_mocks ()
178161 message = setup_message_data ("1" )
179162
180- # Mock environment variables
181163 mock_getenv .side_effect = lambda key , default = '' : {
182164 'EVENT_PUBLISHER_EVENT_BUS_ARN' : 'arn:aws:events:eu-west-2:123456789012:event-bus/test' ,
183165 'EVENT_PUBLISHER_DLQ_URL' : 'https://sqs.eu-west-2.amazonaws.com/123456789012/test-dlq'
@@ -197,22 +179,16 @@ def test_process_message_with_unknown_sender(self, mock_event_publisher_class, m
197179
198180 processor .process_message (message )
199181
200- # Message should be acknowledged (removed from inbox)
201182 client_lookup .is_valid_sender .assert_called_once_with (message .sender )
202183 message .acknowledge .assert_called_once ()
203184
204- @patch ('src.processor.os.getenv' )
205- @patch ('src.processor.EventPublisher' )
206185 def test_process_messages_across_multiple_iterations (self , mock_event_publisher_class , mock_getenv ):
207186 """Test that processor continues polling until no messages remain"""
208- from src .processor import MeshMessageProcessor
209-
210187 (config , client_lookup , mesh_client , log , polling_metric ) = setup_mocks ()
211188 message1 = setup_message_data ("1" )
212189 message2 = setup_message_data ("2" )
213190 message3 = setup_message_data ("3" )
214191
215- # Mock environment variables
216192 mock_getenv .side_effect = lambda key , default = '' : {
217193 'EVENT_PUBLISHER_EVENT_BUS_ARN' : 'arn:aws:events:eu-west-2:123456789012:event-bus/test' ,
218194 'EVENT_PUBLISHER_DLQ_URL' : 'https://sqs.eu-west-2.amazonaws.com/123456789012/test-dlq'
@@ -227,7 +203,6 @@ def test_process_messages_across_multiple_iterations(self, mock_event_publisher_
227203 polling_metric = polling_metric
228204 )
229205
230- # Messages across multiple iterations
231206 mesh_client .iterate_all_messages .side_effect = [
232207 [message1 , message2 ], # First iteration
233208 [message3 ], # Second iteration
0 commit comments