1010 WasenderWebhookEventType as WebhookEventType ,
1111 # WebhookHandler, # Removed: Does not exist
1212 WasenderWebhookEvent , # Import the Union type for direct parsing tests
13- MessagesUpsertData , SessionStatusData , QrCodeUpdatedData , GroupMetadata as WebhookGroupMetadata
13+ MessagesUpsertData , SessionStatusData , QrCodeUpdatedData , GroupMetadata as WebhookGroupMetadata ,
14+ UnknownWebhookEvent
1415)
1516from typing import Dict , Any
1617from dataclasses import dataclass
@@ -348,6 +349,21 @@ def test_parses_messages_reaction_event_correctly_model(self):
348349 assert payload .data [0 ].key .id == message_key_data ["id" ]
349350 assert payload .data [0 ].reaction .text == reaction_data ["text" ]
350351
352+ def test_parses_messages_recieved_event_correctly_model (self ):
353+ payload = {
354+ "event" : WebhookEventType .MESSAGES_RECIEVED .value ,
355+ "timestamp" : 1711111100 ,
356+ "data" : {
357+ 358+ "id" : "MSG123" ,
359+ "message" : {"conversation" : "Hello there" }
360+ }
361+ }
362+ adapter = TypeAdapter (WasenderWebhookEvent )
363+ parsed = adapter .validate_python (payload )
364+ assert parsed .event == WebhookEventType .MESSAGES_RECIEVED
365+ assert parsed .data ["id" ] == "MSG123"
366+
351367 def test_parses_session_status_event_correctly_model (self ):
352368 session_status_data = {"status" : "CONNECTED" , "reason" : "User initiated connection" }
353369 payload = {
@@ -373,6 +389,44 @@ def test_parses_qr_code_updated_event_correctly_model(self):
373389 assert payload .data .qr == qr_code_updated_data ["qr" ]
374390 assert payload .data .session_id == qr_code_updated_data ["sessionId" ]
375391
392+ def test_parses_call_received_event_with_generic_payload (self ):
393+ payload = {
394+ "event" : WebhookEventType .CALL_RECEIVED .value ,
395+ "timestamp" : 1711111111 ,
396+ "data" : {
"caller" :
"[email protected] " ,
"callId" :
"ABC123" }
397+ }
398+ adapter = TypeAdapter (WasenderWebhookEvent )
399+ parsed = adapter .validate_python (payload )
400+ assert parsed .event == WebhookEventType .CALL_RECEIVED
401+ assert parsed .
data [
"caller" ]
== "[email protected] " 402+
403+ def test_parses_poll_results_event_with_generic_payload (self ):
404+ payload = {
405+ "event" : WebhookEventType .POLL_RESULTS .value ,
406+ "timestamp" : 1711111112 ,
407+ "data" : {
408+ "pollId" : "poll-1" ,
409+ "votes" : {"option-a" : 5 , "option-b" : 3 }
410+ }
411+ }
412+ adapter = TypeAdapter (WasenderWebhookEvent )
413+ parsed = adapter .validate_python (payload )
414+ assert parsed .event == WebhookEventType .POLL_RESULTS
415+ assert parsed .data ["votes" ]["option-a" ] == 5
416+
417+ def test_falls_back_to_unknown_webhook_event (self ):
418+ payload = {
419+ "event" : "completely.unknown" ,
420+ "timestamp" : 1711111113 ,
421+ "data" : {"foo" : "bar" },
422+ "sessionId" : "session-xyz"
423+ }
424+ adapter = TypeAdapter (WasenderWebhookEvent )
425+ parsed = adapter .validate_python (payload )
426+ assert isinstance (parsed , UnknownWebhookEvent )
427+ assert parsed .event == "completely.unknown"
428+ assert parsed .session_id == "session-xyz"
429+
376430# Client specific fixtures and tests - REMOVED
377431# @pytest.fixture
378432# def mock_client(): ...
0 commit comments