From 5c9d29a3a7c26577fbe7e201b7c0b600bc367fc4 Mon Sep 17 00:00:00 2001 From: Asger Geel Weirsoee Date: Sun, 15 Mar 2026 10:32:10 +0000 Subject: [PATCH] fix(realtime): restore websocket phase event type --- realtime/consumers.py | 4 +++- realtime/tests.py | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/realtime/consumers.py b/realtime/consumers.py index b52c088..a3149c7 100644 --- a/realtime/consumers.py +++ b/realtime/consumers.py @@ -58,4 +58,6 @@ class GameConsumer(AsyncJsonWebsocketConsumer): async def phase_event(self, event): """Forward any phase_event broadcast to the WebSocket client.""" - await self.send_json(event["payload"]) + payload = dict(event.get("payload") or {}) + payload["type"] = event["event_type"] + await self.send_json(payload) diff --git a/realtime/tests.py b/realtime/tests.py index 21b3d64..e87677e 100644 --- a/realtime/tests.py +++ b/realtime/tests.py @@ -1,5 +1,5 @@ import unittest -from unittest.mock import Mock, patch +from unittest.mock import AsyncMock, Mock, patch from channels.exceptions import InvalidChannelLayerError from django.contrib.auth import get_user_model @@ -13,6 +13,7 @@ except Exception: # pragma: no cover - optional test dependency from fupogfakta.models import GameSession, Player from partyhub.asgi import application from realtime.broadcast import broadcast_phase_event, sync_broadcast_phase_event +from realtime.consumers import GameConsumer User = get_user_model() @@ -38,6 +39,26 @@ class BroadcastPhaseEventTests(SimpleTestCase): sender.assert_called_once_with("ABCD", "phase.scoreboard", {"phase": "scoreboard"}) +class GameConsumerPhaseEventTests(SimpleTestCase): + async def test_phase_event_restores_external_type_field(self): + consumer = GameConsumer() + consumer.send_json = AsyncMock() + + await consumer.phase_event( + { + "event_type": "phase.test_event", + "payload": {"hello": "world"}, + } + ) + + consumer.send_json.assert_awaited_once_with( + { + "type": "phase.test_event", + "hello": "world", + } + ) + + @unittest.skipIf(WebsocketCommunicator is None, "channels.testing dependencies unavailable") class GameConsumerConnectTest(TestCase): def setUp(self):