diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index a1d542854d..d317f2b30e 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -343,9 +343,9 @@ class RoomMemberHandler(BaseHandler):
"""
target_user_id = event.state_key
- # TODO(markjh): get prev state from snapshot.
- prev_state = yield self.store.get_room_member(
- target_user_id, event.room_id
+ prev_state = context.current_state.get(
+ (RoomMemberEvent.TYPE, target_user_id),
+ None
)
room_id = event.room_id
diff --git a/tests/handlers/test_room.py b/tests/handlers/test_room.py
index 21853fdc50..9ae9335e29 100644
--- a/tests/handlers/test_room.py
+++ b/tests/handlers/test_room.py
@@ -270,7 +270,7 @@ class RoomMemberHandlerTestCase(unittest.TestCase):
(RoomMemberEvent.TYPE, "@bob:red"): self._create_member(
user_id="@bob:red",
room_id=room_id,
- membership=Membership.INVITE
+ membership=Membership.JOIN
),
}
@@ -297,6 +297,17 @@ class RoomMemberHandlerTestCase(unittest.TestCase):
# Actual invocation
yield room_handler.change_membership(event, context)
+ self.federation.handle_new_event.assert_called_once_with(
+ event, None, destinations=set(['red'])
+ )
+
+ self.datastore.persist_event.assert_called_once_with(
+ event, context=context
+ )
+ self.notifier.on_new_room_event.assert_called_once_with(
+ event, extra_users=[user]
+ )
+
leave_signal_observer.assert_called_with(
user=user, room_id=room_id
)
|