@@ -58,19 +58,21 @@ def test_init_creates_deduplicator(self, testmsg_cog):
5858
5959 def test_deduplicator_processes_unique_message (self , testmsg_cog , mock_service_envelope ):
6060 assert testmsg_cog .deduplicator .should_process (mock_service_envelope )
61- assert 12345 in testmsg_cog .deduplicator .message_queue
61+ assert ( "!1a2b3c4d" , 12345 ) in testmsg_cog .deduplicator .message_queue
6262
63- def test_deduplicator_skips_duplicate_message (self , testmsg_cog , mock_service_envelope , mock_service_envelope_duplicate ):
63+ def test_deduplicator_processes_same_packet_different_gateway (
64+ self , testmsg_cog , mock_service_envelope , mock_service_envelope_duplicate
65+ ):
6466 assert testmsg_cog .deduplicator .should_process (mock_service_envelope )
65- assert not testmsg_cog .deduplicator .should_process (mock_service_envelope_duplicate )
67+ assert testmsg_cog .deduplicator .should_process (mock_service_envelope_duplicate )
6668
6769 def test_deduplicator_processes_different_messages (
6870 self , testmsg_cog , mock_service_envelope , mock_service_envelope_different
6971 ):
7072 assert testmsg_cog .deduplicator .should_process (mock_service_envelope )
7173 assert testmsg_cog .deduplicator .should_process (mock_service_envelope_different )
72- assert 12345 in testmsg_cog .deduplicator .message_queue
73- assert 67890 in testmsg_cog .deduplicator .message_queue
74+ assert ( "!1a2b3c4d" , 12345 ) in testmsg_cog .deduplicator .message_queue
75+ assert ( "!1a2b3c4d" , 67890 ) in testmsg_cog .deduplicator .message_queue
7476
7577 @patch ("bridger.cogs.testmsg.PBPacketProcessor" )
7678 def test_mqtt_processing_skips_duplicate_packets (self , mock_processor_class , testmsg_cog , mock_service_envelope ):
@@ -108,7 +110,7 @@ def test_mqtt_processing_handles_unique_packets(self, mock_processor_class, test
108110 assert processor .data .text == "!test message"
109111
110112 def test_deduplicator_bounded_queue_behavior (self , testmsg_cog ):
111- testmsg_cog .deduplicator = PacketDeduplicator (maxlen = 3 )
113+ testmsg_cog .deduplicator = PacketDeduplicator (maxlen = 3 , use_gateway_id = True )
112114
113115 for i in range (3 ):
114116 envelope = MagicMock ()
@@ -117,28 +119,28 @@ def test_deduplicator_bounded_queue_behavior(self, testmsg_cog):
117119 testmsg_cog .deduplicator .mark_processed (envelope )
118120
119121 assert len (testmsg_cog .deduplicator .message_queue ) == 3
120- assert 0 in testmsg_cog .deduplicator .message_queue
121- assert 1 in testmsg_cog .deduplicator .message_queue
122- assert 2 in testmsg_cog .deduplicator .message_queue
122+ assert ( "!test" , 0 ) in testmsg_cog .deduplicator .message_queue
123+ assert ( "!test" , 1 ) in testmsg_cog .deduplicator .message_queue
124+ assert ( "!test" , 2 ) in testmsg_cog .deduplicator .message_queue
123125
124126 envelope = MagicMock ()
125127 envelope .packet .id = 3
126128 envelope .gateway_id = "!test"
127129 testmsg_cog .deduplicator .mark_processed (envelope )
128130
129131 assert len (testmsg_cog .deduplicator .message_queue ) == 3
130- assert 0 not in testmsg_cog .deduplicator .message_queue
131- assert 1 in testmsg_cog .deduplicator .message_queue
132- assert 2 in testmsg_cog .deduplicator .message_queue
133- assert 3 in testmsg_cog .deduplicator .message_queue
132+ assert ( "!test" , 0 ) not in testmsg_cog .deduplicator .message_queue
133+ assert ( "!test" , 1 ) in testmsg_cog .deduplicator .message_queue
134+ assert ( "!test" , 2 ) in testmsg_cog .deduplicator .message_queue
135+ assert ( "!test" , 3 ) in testmsg_cog .deduplicator .message_queue
134136
135137 @patch ("bridger.deduplication.logger" )
136138 def test_deduplicator_logs_duplicate_detection (self , mock_logger , testmsg_cog , mock_service_envelope ):
137139 testmsg_cog .deduplicator .should_process (mock_service_envelope )
138140 testmsg_cog .deduplicator .is_duplicate (mock_service_envelope )
139141 mock_logger .bind .assert_called_with (envelope_id = 12345 )
140142
141- def test_integration_deduplication_prevents_discord_spam (self , testmsg_cog ):
143+ def test_integration_deduplication_processes_different_gateways (self , testmsg_cog ):
142144 envelope1 = MagicMock ()
143145 envelope1 .packet .id = 99999
144146 envelope1 .gateway_id = "!gateway1"
@@ -150,5 +152,20 @@ def test_integration_deduplication_prevents_discord_spam(self, testmsg_cog):
150152 should_process_first = testmsg_cog .deduplicator .should_process (envelope1 )
151153 assert should_process_first
152154
155+ should_process_second = testmsg_cog .deduplicator .should_process (envelope2 )
156+ assert should_process_second
157+
158+ def test_integration_deduplication_prevents_true_duplicates (self , testmsg_cog ):
159+ envelope1 = MagicMock ()
160+ envelope1 .packet .id = 99999
161+ envelope1 .gateway_id = "!gateway1"
162+
163+ envelope2 = MagicMock ()
164+ envelope2 .packet .id = 99999
165+ envelope2 .gateway_id = "!gateway1"
166+
167+ should_process_first = testmsg_cog .deduplicator .should_process (envelope1 )
168+ assert should_process_first
169+
153170 should_process_second = testmsg_cog .deduplicator .should_process (envelope2 )
154171 assert not should_process_second
0 commit comments