@@ -5288,19 +5288,26 @@ async def check_event_for_spam(event: str) -> str:
52885288 self .assertEqual (len (matched ), len (rm2_originals ))
52895289
52905290 def test_admin_redact_works_if_user_kicked_or_banned (self ) -> None :
5291- originals = []
5291+ originals1 = []
5292+ originals2 = []
52925293 for rm in [self .rm1 , self .rm2 , self .rm3 ]:
52935294 join = self .helper .join (rm , self .bad_user , tok = self .bad_user_tok )
5294- originals .append (join ["event_id" ])
5295+ if rm in [self .rm1 , self .rm3 ]:
5296+ originals1 .append (join ["event_id" ])
5297+ else :
5298+ originals2 .append (join ["event_id" ])
52955299 for i in range (5 ):
52965300 event = {"body" : f"hello{ i } " , "msgtype" : "m.text" }
52975301 res = self .helper .send_event (
52985302 rm , "m.room.message" , event , tok = self .bad_user_tok
52995303 )
5300- originals .append (res ["event_id" ])
5304+ if rm in [self .rm1 , self .rm3 ]:
5305+ originals1 .append (res ["event_id" ])
5306+ else :
5307+ originals2 .append (res ["event_id" ])
53015308
53025309 # kick user from rooms 1 and 3
5303- for r in [self .rm1 , self .rm2 ]:
5310+ for r in [self .rm1 , self .rm3 ]:
53045311 channel = self .make_request (
53055312 "POST" ,
53065313 f"/_matrix/client/r0/rooms/{ r } /kick" ,
@@ -5330,32 +5337,70 @@ def test_admin_redact_works_if_user_kicked_or_banned(self) -> None:
53305337 failed_redactions = channel2 .json_body .get ("failed_redactions" )
53315338 self .assertEqual (failed_redactions , {})
53325339
5333- # ban user
5334- channel3 = self .make_request (
5340+ # double check
5341+ for rm in [self .rm1 , self .rm3 ]:
5342+ filter = json .dumps ({"types" : [EventTypes .Redaction ]})
5343+ channel3 = self .make_request (
5344+ "GET" ,
5345+ f"rooms/{ rm } /messages?filter={ filter } &limit=50" ,
5346+ access_token = self .admin_tok ,
5347+ )
5348+ self .assertEqual (channel3 .code , 200 )
5349+
5350+ matches = []
5351+ for event in channel3 .json_body ["chunk" ]:
5352+ for event_id in originals1 :
5353+ if (
5354+ event ["type" ] == "m.room.redaction"
5355+ and event ["redacts" ] == event_id
5356+ ):
5357+ matches .append ((event_id , event ))
5358+ # we redacted 6 messages
5359+ self .assertEqual (len (matches ), 6 )
5360+
5361+ # ban user from room 2
5362+ channel4 = self .make_request (
53355363 "POST" ,
53365364 f"/_matrix/client/r0/rooms/{ self .rm2 } /ban" ,
53375365 content = {"reason" : "being a bummer" , "user_id" : self .bad_user },
53385366 access_token = self .admin_tok ,
53395367 )
5340- self .assertEqual (channel3 .code , HTTPStatus .OK , channel3 .result )
5368+ self .assertEqual (channel4 .code , HTTPStatus .OK , channel4 .result )
53415369
5342- # redact messages in room 2
5343- channel4 = self .make_request (
5370+ # make a request to ban all user's messages
5371+ channel5 = self .make_request (
53445372 "POST" ,
53455373 f"/_synapse/admin/v1/user/{ self .bad_user } /redact" ,
5346- content = {"rooms" : [self . rm2 ]},
5374+ content = {"rooms" : []},
53475375 access_token = self .admin_tok ,
53485376 )
5349- self .assertEqual (channel4 .code , 200 )
5350- id2 = channel1 .json_body .get ("redact_id" )
5377+ self .assertEqual (channel5 .code , 200 )
5378+ id2 = channel5 .json_body .get ("redact_id" )
53515379
53525380 # check that there were no failed redactions in room 2
5353- channel5 = self .make_request (
5381+ channel6 = self .make_request (
53545382 "GET" ,
53555383 f"/_synapse/admin/v1/user/redact_status/{ id2 } " ,
53565384 access_token = self .admin_tok ,
53575385 )
5358- self .assertEqual (channel5 .code , 200 )
5359- self .assertEqual (channel5 .json_body .get ("status" ), "complete" )
5360- failed_redactions = channel5 .json_body .get ("failed_redactions" )
5386+ self .assertEqual (channel6 .code , 200 )
5387+ self .assertEqual (channel6 .json_body .get ("status" ), "complete" )
5388+ failed_redactions = channel6 .json_body .get ("failed_redactions" )
53615389 self .assertEqual (failed_redactions , {})
5390+
5391+ # double check messages in room 2 were redacted
5392+ filter = json .dumps ({"types" : [EventTypes .Redaction ]})
5393+ channel7 = self .make_request (
5394+ "GET" ,
5395+ f"rooms/{ self .rm2 } /messages?filter={ filter } &limit=50" ,
5396+ access_token = self .admin_tok ,
5397+ )
5398+ self .assertEqual (channel7 .code , 200 )
5399+
5400+ matches = []
5401+ for event in channel7 .json_body ["chunk" ]:
5402+ for event_id in originals2 :
5403+ if event ["type" ] == "m.room.redaction" and event ["redacts" ] == event_id :
5404+ matches .append ((event_id , event ))
5405+ # we redacted 6 messages
5406+ self .assertEqual (len (matches ), 6 )
0 commit comments