Fix upgrading a room without `events` field in power levels (#16725)
This commit is contained in:
parent
e87499b3f4
commit
0a00c99823
|
@ -0,0 +1 @@
|
||||||
|
Fix a bug introduced in Synapse 1.7.2 where rooms whose power levels lacked an `events` field could not be upgraded.
|
|
@ -549,7 +549,7 @@ class RoomCreationHandler:
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
ban = 50
|
ban = 50
|
||||||
needed_power_level = max(
|
needed_power_level = max(
|
||||||
state_default_int, ban, max(event_power_levels.values())
|
state_default_int, ban, max(event_power_levels.values(), default=0)
|
||||||
)
|
)
|
||||||
|
|
||||||
# Get the user's current power level, this matches the logic in get_user_power_level,
|
# Get the user's current power level, this matches the logic in get_user_power_level,
|
||||||
|
|
|
@ -246,6 +246,34 @@ class UpgradeRoomTest(unittest.HomeserverTestCase):
|
||||||
# We should now have an integer power level.
|
# We should now have an integer power level.
|
||||||
self.assertEqual(new_power_levels["users"][self.creator], 100, new_power_levels)
|
self.assertEqual(new_power_levels["users"][self.creator], 100, new_power_levels)
|
||||||
|
|
||||||
|
def test_events_field_missing(self) -> None:
|
||||||
|
"""Regression test for https://github.com/matrix-org/synapse/issues/16715."""
|
||||||
|
# Create a new room.
|
||||||
|
room_id = self.helper.create_room_as(
|
||||||
|
self.creator, tok=self.creator_token, room_version="10"
|
||||||
|
)
|
||||||
|
self.helper.join(room_id, self.other, tok=self.other_token)
|
||||||
|
|
||||||
|
# Retrieve the room's current power levels.
|
||||||
|
power_levels = self.helper.get_state(
|
||||||
|
room_id,
|
||||||
|
"m.room.power_levels",
|
||||||
|
tok=self.creator_token,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Remove the events field and re-set the power levels.
|
||||||
|
del power_levels["events"]
|
||||||
|
self.helper.send_state(
|
||||||
|
room_id,
|
||||||
|
"m.room.power_levels",
|
||||||
|
body=power_levels,
|
||||||
|
tok=self.creator_token,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Upgrade the room. Check the homeserver reports success.
|
||||||
|
channel = self._upgrade_room(room_id=room_id)
|
||||||
|
self.assertEqual(200, channel.code, channel.result)
|
||||||
|
|
||||||
def test_space(self) -> None:
|
def test_space(self) -> None:
|
||||||
"""Test upgrading a space."""
|
"""Test upgrading a space."""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue