Skip to content

Commit adf6519

Browse files
committed
new endpoints and webhook events
1 parent 3c68034 commit adf6519

File tree

6 files changed

+849
-46
lines changed

6 files changed

+849
-46
lines changed

tests/test_webhooks.py

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
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
)
1516
from typing import Dict, Any
1617
from 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+
"from": "[email protected]",
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

Comments
 (0)