From 0cf660c60686c99a34ae7f3a68d96347b23cc2be Mon Sep 17 00:00:00 2001 From: Jage9 Date: Mon, 9 Mar 2026 02:02:16 -0400 Subject: [PATCH] Update stale server tests for current lifecycle --- server/tests/test_item_use_cooldown.py | 66 +++++++++++++++++++------- server/tests/test_models.py | 2 +- server/tests/test_nickname_updates.py | 13 ++++- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/server/tests/test_item_use_cooldown.py b/server/tests/test_item_use_cooldown.py index d2ff7ac..d63e886 100644 --- a/server/tests/test_item_use_cooldown.py +++ b/server/tests/test_item_use_cooldown.py @@ -13,11 +13,24 @@ def _fake_ws() -> ServerConnection: return cast(ServerConnection, object()) +def _activate_client( + client: ClientConnection, + *, + permissions: set[str] | None = None, +) -> ClientConnection: + client.authenticated = True + client.user_id = client.user_id or client.id + client.username = client.username or client.nickname + client.permissions = set(permissions or client.permissions or set()) + client.world_ready = True + return client + + @pytest.mark.asyncio async def test_item_use_has_global_cooldown(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "dice") server.item_service.add_item(item) @@ -52,7 +65,7 @@ async def test_item_use_has_global_cooldown(monkeypatch: pytest.MonkeyPatch) -> async def test_radio_use_toggles_enabled(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "radio_station") server.item_service.add_item(item) @@ -88,7 +101,10 @@ async def test_radio_use_toggles_enabled(monkeypatch: pytest.MonkeyPatch) -> Non async def test_radio_media_fields_update_validate(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client( + ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), + permissions={"item.edit.own"}, + ) server.clients[ws] = client item = server.item_service.default_item(client, "radio_station") server.item_service.add_item(item) @@ -165,7 +181,10 @@ async def test_radio_media_fields_update_validate(monkeypatch: pytest.MonkeyPatc async def test_item_update_strips_unknown_params(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client( + ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), + permissions={"item.edit.own"}, + ) server.clients[ws] = client item = server.item_service.default_item(client, "radio_station") server.item_service.add_item(item) @@ -194,7 +213,7 @@ async def test_item_update_strips_unknown_params(monkeypatch: pytest.MonkeyPatch async def test_item_use_revalidates_updated_params(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "widget") item.params["hackedFlag"] = True @@ -223,7 +242,7 @@ async def test_item_use_revalidates_updated_params(monkeypatch: pytest.MonkeyPat async def test_clock_use_reports_time_without_use_sound_packet(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "clock") server.item_service.add_item(item) @@ -252,7 +271,10 @@ async def test_clock_use_reports_time_without_use_sound_packet(monkeypatch: pyte async def test_clock_timezone_update_validates(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client( + ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), + permissions={"item.edit.own"}, + ) server.clients[ws] = client item = server.item_service.default_item(client, "clock") server.item_service.add_item(item) @@ -311,7 +333,7 @@ async def test_clock_timezone_update_validates(monkeypatch: pytest.MonkeyPatch) async def test_failed_wheel_use_does_not_consume_cooldown(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "wheel") item.params["spaces"] = ",,," @@ -343,7 +365,10 @@ async def test_failed_wheel_use_does_not_consume_cooldown(monkeypatch: pytest.Mo async def test_widget_update_and_use(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client( + ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), + permissions={"item.edit.own", "item.use"}, + ) server.clients[ws] = client item = server.item_service.default_item(client, "widget") server.item_service.add_item(item) @@ -426,7 +451,7 @@ async def test_widget_update_and_use(monkeypatch: pytest.MonkeyPatch) -> None: async def test_carried_item_use_sound_uses_carrier_position(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "widget") item.params["useSound"] = "sounds/test.ogg" @@ -464,7 +489,10 @@ async def test_carried_item_use_sound_uses_carrier_position(monkeypatch: pytest. async def test_piano_update_and_use(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client( + ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), + permissions={"item.edit.own", "item.use"}, + ) server.clients[ws] = client item = server.item_service.default_item(client, "piano") server.item_service.add_item(item) @@ -549,9 +577,12 @@ async def test_piano_update_and_use(monkeypatch: pytest.MonkeyPatch) -> None: async def test_piano_note_packet_broadcasts(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws_sender = _fake_ws() - sender = ClientConnection(websocket=ws_sender, id="u1", nickname="tester", x=5, y=6) + sender = _activate_client( + ClientConnection(websocket=ws_sender, id="u1", nickname="tester", x=5, y=6), + permissions={"item.use"}, + ) ws_other = _fake_ws() - other = ClientConnection(websocket=ws_other, id="u2", nickname="listener", x=7, y=6) + other = _activate_client(ClientConnection(websocket=ws_other, id="u2", nickname="listener", x=7, y=6)) server.clients[ws_sender] = sender server.clients[ws_other] = other item = server.item_service.default_item(sender, "piano") @@ -597,7 +628,10 @@ async def test_piano_note_packet_broadcasts(monkeypatch: pytest.MonkeyPatch) -> async def test_piano_note_key_cap(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws_sender = _fake_ws() - sender = ClientConnection(websocket=ws_sender, id="u1", nickname="tester", x=5, y=6) + sender = _activate_client( + ClientConnection(websocket=ws_sender, id="u1", nickname="tester", x=5, y=6), + permissions={"item.use"}, + ) server.clients[ws_sender] = sender item = server.item_service.default_item(sender, "piano") server.item_service.add_item(item) @@ -632,7 +666,7 @@ async def test_piano_note_key_cap(monkeypatch: pytest.MonkeyPatch) -> None: async def test_piano_recording_toggle_and_save(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "piano") server.item_service.add_item(item) @@ -700,7 +734,7 @@ async def test_piano_recording_toggle_and_save(monkeypatch: pytest.MonkeyPatch) async def test_piano_playback_starts_task(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6) + client = _activate_client(ClientConnection(websocket=ws, id="u1", nickname="tester", x=5, y=6), permissions={"item.use"}) server.clients[ws] = client item = server.item_service.default_item(client, "piano") item.params["songId"] = "item:test-song" diff --git a/server/tests/test_models.py b/server/tests/test_models.py index 2879612..bba0aad 100644 --- a/server/tests/test_models.py +++ b/server/tests/test_models.py @@ -34,7 +34,7 @@ def test_item_piano_recording_packet_validates() -> None: def test_item_transfer_packet_validates() -> None: adapter = TypeAdapter(ClientPacket) - packet = adapter.validate_python({"type": "item_transfer", "itemId": "i1", "targetId": "u2"}) + packet = adapter.validate_python({"type": "item_transfer", "itemId": "i1", "targetUserId": "u2"}) assert packet.type == "item_transfer" diff --git a/server/tests/test_nickname_updates.py b/server/tests/test_nickname_updates.py index 48ec3b2..53d7cc8 100644 --- a/server/tests/test_nickname_updates.py +++ b/server/tests/test_nickname_updates.py @@ -14,11 +14,20 @@ def _fake_ws() -> ServerConnection: return cast(ServerConnection, object()) +def _activate_client(client: ClientConnection) -> ClientConnection: + client.authenticated = True + client.user_id = client.user_id or client.id + client.username = client.username or client.nickname + client.permissions = set(client.permissions or set()) | {"profile.update_nickname"} + client.world_ready = True + return client + + @pytest.mark.asyncio async def test_same_nickname_same_case_is_noop(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="1", nickname="Jage") + client = _activate_client(ClientConnection(websocket=ws, id="1", nickname="Jage")) server.clients[ws] = client sent_packets: list[object] = [] @@ -47,7 +56,7 @@ async def test_same_nickname_same_case_is_noop(monkeypatch: pytest.MonkeyPatch) async def test_case_only_change_is_allowed_and_broadcast(monkeypatch: pytest.MonkeyPatch) -> None: server = SignalingServer("127.0.0.1", 8765, None, None) ws = _fake_ws() - client = ClientConnection(websocket=ws, id="1", nickname="jage") + client = _activate_client(ClientConnection(websocket=ws, id="1", nickname="jage")) server.clients[ws] = client sent_packets: list[object] = []