Skip to content

Commit 0669abc

Browse files
committed
Fix tests after porting EventBase to Rust
Adapt tests that mutated Python event internals (`_event_id`, `_dict`, direct attribute assignment, `FrozenEventV3(...)` construction) to work with the new Rust-backed `Event` class: - Rebuild events via `make_event_from_dict` / `make_test_event` instead of patching attributes in place. - Plumb `rejected_reason` through `_join_rules_event` rather than assigning to `rejected_reason` after construction. - Replace the hand-built event in `test_msc4242_state_dag` with a `Mock(spec=EventBase)` since the test only needs a handful of attributes. - Add `# type: ignore` for the deprecated `event.user_id` / `event[key]` accessors and for assigning to `event.content`. - In `make_test_event`, drop the default `room_id` for v11+ create events so each gets a distinct hash-derived room ID.
1 parent abfabfc commit 0669abc

8 files changed

Lines changed: 56 additions & 43 deletions

File tree

tests/events/test_py_protocol.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,28 @@
1616
from unittest.mock import Mock
1717

1818
from synapse.api.room_versions import RoomVersion, RoomVersions
19-
from synapse.events import EventBase, make_event_from_dict
19+
from synapse.events import EventBase
2020
from synapse.events.py_protocol import (
2121
EventProtocol,
2222
MSC4242Event,
2323
all_supports_msc4242_state_dag,
2424
supports_msc4242_state_dag,
2525
)
2626

27+
from tests.test_utils.event_builders import make_test_event
2728
from tests.unittest import TestCase
2829

2930

3031
def _make_event(room_version: RoomVersion) -> EventBase:
3132
"""Helper to make an EventBase with the given room version."""
32-
event_dict = {
33-
"content": {},
34-
"sender": "@user:example.com",
35-
"type": "m.room.message",
36-
"room_id": "!room:example.com",
37-
}
38-
if room_version.msc4242_state_dags:
39-
event_dict["prev_state_events"] = []
40-
return make_event_from_dict(event_dict, room_version=room_version)
33+
return make_test_event(
34+
{
35+
"sender": "@user:example.com",
36+
"type": "m.room.message",
37+
"room_id": "!room:example.com",
38+
},
39+
room_version=room_version,
40+
)
4141

4242

4343
class TestMetaClass(TestCase):

tests/handlers/test_device.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from synapse.api.room_versions import RoomVersions
3737
from synapse.appservice import ApplicationService
3838
from synapse.crypto.event_signing import add_hashes_and_signatures
39-
from synapse.events import EventBase, FrozenEventV3
39+
from synapse.events import EventBase, make_event_from_dict
4040
from synapse.federation.federation_client import SendJoinResult
4141
from synapse.federation.transport.client import (
4242
StateRequestResponse,
@@ -677,7 +677,7 @@ def _build_public_room(self) -> StateMap[EventBase]:
677677
self.REMOTE1_SERVER_SIGNATURE_KEY,
678678
)
679679

680-
create_event = FrozenEventV3(create_event_dict, room_version, {}, None)
680+
create_event = make_event_from_dict(create_event_dict, room_version)
681681
events.append(create_event)
682682

683683
room_version = self.hs.config.server.default_room_version
@@ -700,7 +700,7 @@ def _build_public_room(self) -> StateMap[EventBase]:
700700
self.hs.hostname,
701701
self.hs.signing_key,
702702
)
703-
join_event = FrozenEventV3(join_event_dict, room_version, {}, None)
703+
join_event = make_event_from_dict(join_event_dict, room_version)
704704
events.append(join_event)
705705

706706
# Then set the join rules to public
@@ -722,7 +722,7 @@ def _build_public_room(self) -> StateMap[EventBase]:
722722
self.REMOTE1_SERVER_NAME,
723723
self.REMOTE1_SERVER_SIGNATURE_KEY,
724724
)
725-
join_rules_event = FrozenEventV3(join_rules_event_dict, room_version, {}, None)
725+
join_rules_event = make_event_from_dict(join_rules_event_dict, room_version)
726726
events.append(join_rules_event)
727727

728728
return {(event.type, event.state_key): event for event in events}
@@ -733,7 +733,7 @@ def _build_signed_join_event(
733733
user: str,
734734
signing_key: SigningKey,
735735
state: StateMap[EventBase],
736-
) -> FrozenEventV3:
736+
) -> EventBase:
737737
"""Build a join event for the local user, signed by the local server."""
738738

739739
latest_event = max(state.values(), key=lambda e: e.depth)
@@ -759,7 +759,7 @@ def _build_signed_join_event(
759759
get_domain_from_id(user),
760760
signing_key,
761761
)
762-
return FrozenEventV3(join_event_dict, room_version, {}, None)
762+
return make_event_from_dict(join_event_dict, room_version)
763763

764764
@parameterized.expand([("not_pruned", False), ("pruned", True)])
765765
@patch(

tests/module_api/test_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -841,10 +841,10 @@ def test_event_deprecated_methods(self) -> None:
841841
create_event = state[(EventTypes.Create, "")]
842842

843843
# `.user_id` is a deprecated alias for `.sender`.
844-
self.assertEqual(create_event.user_id, user_id)
844+
self.assertEqual(create_event.user_id, user_id) # type: ignore[attr-defined]
845845

846846
# The event supports looking up keys via `__getitem__` although deprecated
847-
self.assertEqual(create_event["room_id"], room_id)
847+
self.assertEqual(create_event["room_id"], room_id) # type: ignore[index]
848848

849849

850850
class ModuleApiWorkerTestCase(BaseModuleApiTestCase, BaseMultiWorkerStreamTestCase):

tests/rest/client/test_third_party_rules.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def test_cannot_modify_event(self) -> None:
236236
async def check(
237237
ev: EventBase, state: StateMap[EventBase]
238238
) -> tuple[bool, JsonDict | None]:
239-
ev.content = {"x": "y"}
239+
ev.content = {"x": "y"} # type: ignore[misc]
240240
return True, None
241241

242242
self.hs.get_module_api_callbacks().third_party_event_rules._check_event_allowed_callbacks = [

tests/storage/test_msc4242_state_dag.py

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
from synapse.api.constants import EventTypes
2020
from synapse.api.errors import SynapseError
2121
from synapse.api.room_versions import RoomVersions
22-
from synapse.events.py_protocol import MSC4242Event, supports_msc4242_state_dag
22+
from synapse.events import EventBase
23+
from synapse.events.py_protocol import MSC4242Event
2324
from synapse.events.snapshot import EventContext
2425
from synapse.rest.client import room
2526
from synapse.server import HomeServer
2627
from synapse.util.clock import Clock
2728

28-
from tests.test_utils.event_builders import make_test_event
2929
from tests.unittest import HomeserverTestCase, override_config
3030

3131

@@ -154,21 +154,11 @@ def _make_event(
154154
prev_state_events: list[str],
155155
rejected: bool = False,
156156
) -> tuple[MSC4242Event, EventContext]:
157-
ev = make_test_event(
158-
{
159-
"prev_state_events": prev_state_events,
160-
"content": {
161-
"membership": "join",
162-
},
163-
"sender": "@unimportant:info",
164-
"state_key": "@unimportant:info",
165-
"type": "m.room.member",
166-
"room_id": self.room_id,
167-
},
168-
room_version=RoomVersions.MSC4242v12,
169-
)
170-
ev._event_id = id # type: ignore[attr-defined]
171-
assert supports_msc4242_state_dag(ev)
157+
ev = Mock(spec=EventBase)
158+
ev.event_id = id
159+
ev.prev_state_events = prev_state_events
160+
ev.state_key = "@unimportant:info"
161+
ev.is_state.return_value = True
172162
ctx = Mock()
173163
ctx.rejected = rejected
174164
return ev, ctx

tests/storage/test_redaction.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
from synapse.api.constants import EventTypes, Membership
2828
from synapse.api.room_versions import RoomVersion, RoomVersions
29-
from synapse.events import EventBase
29+
from synapse.events import EventBase, make_event_from_dict
3030
from synapse.events.builder import EventBuilder
3131
from synapse.server import HomeServer
3232
from synapse.synapse_rust.events import EventInternalMetadata
@@ -238,11 +238,16 @@ async def build(
238238
prev_event_ids=prev_event_ids, auth_event_ids=auth_event_ids
239239
)
240240

241-
built_event._event_id = self._event_id # type: ignore[attr-defined]
242-
built_event._dict["event_id"] = self._event_id
243-
assert built_event.event_id == self._event_id
241+
event_dict = built_event.get_dict()
242+
event_dict["event_id"] = self._event_id
243+
rebuilt_event = make_event_from_dict(
244+
event_dict,
245+
room_version=built_event.room_version,
246+
internal_metadata_dict=built_event.internal_metadata.get_dict(),
247+
)
248+
assert rebuilt_event.event_id == self._event_id
244249

245-
return built_event
250+
return rebuilt_event
246251

247252
@property
248253
def room_id(self) -> str:

tests/test_event_auth.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ def test_rejected_auth_events(self) -> None:
9393
RoomVersions.V9,
9494
creator,
9595
"public",
96+
rejected_reason="stinky",
9697
)
97-
rejected_join_rules.rejected_reason = "stinky"
9898
auth_events.append(rejected_join_rules)
9999
event_store.add_event(rejected_join_rules)
100100

@@ -1180,7 +1180,10 @@ def _random_state_event(
11801180

11811181

11821182
def _join_rules_event(
1183-
room_version: RoomVersion, sender: str, join_rule: str
1183+
room_version: RoomVersion,
1184+
sender: str,
1185+
join_rule: str,
1186+
rejected_reason: str | None = None,
11841187
) -> EventBase:
11851188
return make_test_event(
11861189
{
@@ -1194,6 +1197,7 @@ def _join_rules_event(
11941197
},
11951198
},
11961199
room_version=room_version,
1200+
rejected_reason=rejected_reason,
11971201
)
11981202

11991203

tests/test_utils/event_builders.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,20 @@ def make_test_event(
7676
**(event_dict or {}),
7777
**fields,
7878
}
79+
80+
# For room versions where the create event's room_id is derived from its
81+
# event ID (v11+ format), omit the default room_id on create events so each
82+
# create event ends up with a distinct room_id.
83+
#
84+
# We can't do this in the `default_event_fields` as we don't know the event
85+
# type at that point.
86+
if (
87+
room_version.msc4291_room_ids_as_hashes
88+
and merged["type"] == "m.room.create"
89+
and merged["state_key"] == ""
90+
):
91+
merged.pop("room_id", None)
92+
7993
return make_event_from_dict(
8094
merged,
8195
room_version=room_version,

0 commit comments

Comments
 (0)