bugfix: calculate the PL for non-creators correctly in v11 rooms (#18547)
Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
This commit is contained in:
parent
3b94e40cc8
commit
db8a8d33fe
1
changelog.d/18547.bugfix
Normal file
1
changelog.d/18547.bugfix
Normal file
@ -0,0 +1 @@
|
||||
Fix an issue where during state resolution for v11 rooms Synapse would incorrectly calculate the power level of the creator when there was no power levels event in the room.
|
||||
@ -255,7 +255,7 @@ async def _get_power_level_for_sender(
|
||||
)
|
||||
if aev and (aev.type, aev.state_key) == (EventTypes.Create, ""):
|
||||
creator = (
|
||||
event.sender
|
||||
aev.sender
|
||||
if event.room_version.implicit_room_creator
|
||||
else aev.content.get("creator")
|
||||
)
|
||||
|
||||
@ -961,25 +961,47 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
|
||||
f"wrong pl for {user_id} on v{room_version.identifier}",
|
||||
)
|
||||
|
||||
# the creator alone without PL is 100
|
||||
got_creator_pl = self.successResultOf(
|
||||
defer.ensureDeferred(
|
||||
_get_power_level_for_sender(
|
||||
ROOM_ID,
|
||||
member_event.event_id,
|
||||
{
|
||||
member_event.event_id: member_event,
|
||||
create_event.event_id: create_event,
|
||||
},
|
||||
store,
|
||||
# the creator alone without PL is 100, everyone else is 0
|
||||
want_pls = {
|
||||
ALICE: 100,
|
||||
BOB: 0,
|
||||
CHARLIE: 0,
|
||||
}
|
||||
for user_id, want_pl in want_pls.items():
|
||||
test_event = make_event_from_dict(
|
||||
{
|
||||
"room_id": ROOM_ID,
|
||||
"sender": user_id,
|
||||
"type": EventTypes.Topic,
|
||||
"state_key": "",
|
||||
"content": {"topic": "Test"},
|
||||
"auth_events": [
|
||||
create_event.event_id,
|
||||
member_event.event_id,
|
||||
pl_event.event_id,
|
||||
],
|
||||
"prev_events": [pl_event.event_id],
|
||||
},
|
||||
room_version,
|
||||
)
|
||||
got_pl = self.successResultOf(
|
||||
defer.ensureDeferred(
|
||||
_get_power_level_for_sender(
|
||||
ROOM_ID,
|
||||
test_event.event_id,
|
||||
{
|
||||
test_event.event_id: test_event,
|
||||
create_event.event_id: create_event,
|
||||
},
|
||||
store,
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
self.assertEqual(
|
||||
got_creator_pl,
|
||||
100,
|
||||
f"wrong pl for creator with no PL event on v{room_version.identifier}",
|
||||
)
|
||||
self.assertEqual(
|
||||
got_pl,
|
||||
want_pl,
|
||||
f"wrong pl for {user_id} with no PL event on v{room_version.identifier}",
|
||||
)
|
||||
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user