@@ -1137,3 +1137,62 @@ func newMemberContent(
1137
1137
ThirdPartyInvite : thirdPartyInvite ,
1138
1138
}
1139
1139
}
1140
+
1141
+ var negativePowerLevelTestRoom = & testAuthEvents {
1142
+ CreateJSON : json .RawMessage (`{
1143
+ "type": "m.room.create",
1144
+ "state_key": "",
1145
+ "sender": "@u1:a",
1146
+ "room_id": "!r1:a",
1147
+ "event_id": "$e1:a",
1148
+ "content": {
1149
+ "room_version": "10"
1150
+ }
1151
+ }` ),
1152
+ PowerLevelsJSON : json .RawMessage (`{
1153
+ "type": "m.room.power_levels",
1154
+ "state_key": "",
1155
+ "sender": "@u1:a",
1156
+ "room_id": "!r1:a",
1157
+ "event_id": "$e3:a",
1158
+ "content": {
1159
+ "events_default": -9007199254740990,
1160
+ "state_default": -9007199254740990,
1161
+ "users_default": -9007199254740990,
1162
+ "users": {
1163
+ }
1164
+ }
1165
+ }` ),
1166
+ MemberJSON : map [string ]json.RawMessage {
1167
+ "@u1:a" : json .RawMessage (`{
1168
+ "type": "m.room.member",
1169
+ "state_key": "@u1:a",
1170
+ "sender": "@u1:a",
1171
+ "room_id": "!r1:a",
1172
+ "event_id": "$e2:a",
1173
+ "content": {
1174
+ "membership": "join"
1175
+ }
1176
+ }` ),
1177
+ },
1178
+ }
1179
+
1180
+ func TestNegativePowerLevels (t * testing.T ) {
1181
+ // User should be able to demote the user default level
1182
+ // below their own effective level.
1183
+ eventShouldSucceed , err := NewEventFromTrustedJSON (RawJSON (`{
1184
+ "type": "m.room.message",
1185
+ "sender": "@u1:a",
1186
+ "room_id": "!r1:a",
1187
+ "event_id": "$e5:a",
1188
+ "content": {
1189
+ "stuff": "i am a message event"
1190
+ }
1191
+ }` ), false , RoomVersionV1 )
1192
+ if err != nil {
1193
+ t .Fatal (err )
1194
+ }
1195
+ if err = Allowed (eventShouldSucceed , negativePowerLevelTestRoom ); err != nil {
1196
+ t .Error ("TestNegativePowerLevels should have succeeded but it didn't:" , err )
1197
+ }
1198
+ }
0 commit comments