11import { strict as assert } from "assert" ;
22import { randomUUID } from "crypto" ;
3+ import { Mjolnir } from "../../src/Mjolnir" ;
34import { RoomMemberManager } from "../../src/RoomMembers" ;
45import { newTestUser } from "./clientHelper" ;
56import { getFirstReply , getNthReply } from "./commands/commandUtils" ;
@@ -255,11 +256,12 @@ describe("Test: Testing RoomMemberManager", function() {
255256 it ( "RoomMemberManager counts correctly when we actually join/leave/get banned from the room" , async function ( ) {
256257 this . timeout ( 60000 ) ;
257258 const start = new Date ( Date . now ( ) - 10_000 ) ;
259+ const mjolnir : Mjolnir = this . mjolnir ! ;
258260
259261 // Setup a moderator.
260262 this . moderator = await newTestUser ( this . config . homeserverUrl , { name : { contains : "moderator" } } ) ;
261- await this . mjolnir . client . inviteUser ( await this . moderator . getUserId ( ) , this . mjolnir . managementRoomId )
262- await this . moderator . joinRoom ( this . mjolnir . managementRoomId ) ;
263+ await mjolnir . client . inviteUser ( await this . moderator . getUserId ( ) , mjolnir . managementRoomId )
264+ await this . moderator . joinRoom ( mjolnir . managementRoomId ) ;
263265
264266 // Create a few users and two rooms.
265267 this . users = [ ] ;
@@ -282,15 +284,15 @@ describe("Test: Testing RoomMemberManager", function() {
282284 const roomIds = [ roomId1 , roomId2 ] ;
283285
284286 for ( let roomId of roomIds ) {
285- await this . moderator . sendMessage ( this . mjolnir . managementRoomId , { msgtype : 'm.text' , body : `!mjolnir rooms add ${ roomId } ` } ) ;
287+ await this . moderator . sendMessage ( mjolnir . managementRoomId , { msgtype : 'm.text' , body : `!mjolnir rooms add ${ roomId } ` } ) ;
286288 }
287289
288290 let protectedRoomsUpdated = false ;
289291 do {
290- let protectedRooms = this . mjolnir . protectedRooms ;
292+ let protectedRooms = mjolnir . protectedRoomsTracker . getProtectedRooms ( ) ;
291293 protectedRoomsUpdated = true ;
292294 for ( let roomId of roomIds ) {
293- if ( ! ( roomId in protectedRooms ) ) {
295+ if ( ! protectedRooms . includes ( roomId ) ) {
294296 protectedRoomsUpdated = false ;
295297 await new Promise ( resolve => setTimeout ( resolve , 1_000 ) ) ;
296298 }
@@ -299,18 +301,18 @@ describe("Test: Testing RoomMemberManager", function() {
299301
300302
301303 // Initially, we shouldn't know about any user in these rooms... except Mjölnir itself.
302- const manager : RoomMemberManager = this . mjolnir . roomJoins ;
304+ const manager : RoomMemberManager = mjolnir . roomJoins ;
303305 for ( let roomId of roomIds ) {
304306 const joined = manager . getUsersInRoom ( roomId , start , 100 ) ;
305307 assert . equal ( joined . length , 1 , "Initially, we shouldn't know about any other user in these rooms" ) ;
306- assert . equal ( joined [ 0 ] . userId , await this . mjolnir . client . getUserId ( ) , "Initially, Mjölnir should be the only known user in these rooms" ) ;
308+ assert . equal ( joined [ 0 ] . userId , await mjolnir . client . getUserId ( ) , "Initially, Mjölnir should be the only known user in these rooms" ) ;
307309 }
308310
309311 // Initially, the command should show that same result.
310312 for ( let roomId of roomIds ) {
311- const reply = await getFirstReply ( this . mjolnir . client , this . mjolnir . managementRoomId , ( ) => {
313+ const reply = await getFirstReply ( mjolnir . client , mjolnir . managementRoomId , ( ) => {
312314 const command = `!mjolnir status joins ${ roomId } ` ;
313- return this . moderator . sendMessage ( this . mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
315+ return this . moderator . sendMessage ( mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
314316 } ) ;
315317 const body = reply [ "content" ] ?. [ "body" ] as string ;
316318 assert . ok ( body . includes ( "\n1 recent joins" ) , "Initially the command should respond with 1 user" ) ;
@@ -326,9 +328,9 @@ describe("Test: Testing RoomMemberManager", function() {
326328 const roomId = roomIds [ i ] ;
327329 const joined = manager . getUsersInRoom ( roomId , start , 100 ) ;
328330 assert . equal ( joined . length , SAMPLE_SIZE / 2 /* half of the users */ + 1 /* mjolnir */ , "We should now see all joined users in the room" ) ;
329- const reply = await getFirstReply ( this . mjolnir . client , this . mjolnir . managementRoomId , ( ) => {
331+ const reply = await getFirstReply ( mjolnir . client , mjolnir . managementRoomId , ( ) => {
330332 const command = `!mjolnir status joins ${ roomId } ` ;
331- return this . moderator . sendMessage ( this . mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
333+ return this . moderator . sendMessage ( mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
332334 } ) ;
333335 const body = reply [ "content" ] ?. [ "body" ] as string ;
334336 assert . ok ( body . includes ( `\n${ joined . length } recent joins` ) , `After joins, the command should respond with ${ joined . length } users` ) ;
@@ -359,9 +361,9 @@ describe("Test: Testing RoomMemberManager", function() {
359361
360362 for ( let i = 0 ; i < roomIds . length ; ++ i ) {
361363 const roomId = roomIds [ i ] ;
362- const reply = await getFirstReply ( this . mjolnir . client , this . mjolnir . managementRoomId , ( ) => {
364+ const reply = await getFirstReply ( mjolnir . client , mjolnir . managementRoomId , ( ) => {
363365 const command = `!mjolnir status joins ${ roomId } ` ;
364- return this . moderator . sendMessage ( this . mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
366+ return this . moderator . sendMessage ( mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
365367 } ) ;
366368 const body = reply [ "content" ] ?. [ "body" ] as string ;
367369 for ( let j = 0 ; j < userIds . length ; ++ j ) {
@@ -378,10 +380,11 @@ describe("Test: Testing RoomMemberManager", function() {
378380 it ( "!mjolnir since kicks the correct users" , async function ( ) {
379381 this . timeout ( 600_000 ) ;
380382 const start = new Date ( Date . now ( ) - 10_000 ) ;
383+ const mjolnir : Mjolnir = this . mjolnir ! ;
381384
382385 // Setup a moderator.
383386 this . moderator = await newTestUser ( this . config . homeserverUrl , { name : { contains : "moderator" } } ) ;
384- await this . moderator . joinRoom ( this . mjolnir . managementRoomId ) ;
387+ await this . moderator . joinRoom ( mjolnir . managementRoomId ) ;
385388
386389 // Create a few users.
387390 this . goodUsers = [ ] ;
@@ -418,7 +421,7 @@ describe("Test: Testing RoomMemberManager", function() {
418421 const NUMBER_OF_ROOMS = 18 ;
419422 const allRoomIds : string [ ] = [ ] ;
420423 const allRoomAliases : string [ ] = [ ] ;
421- const mjolnirUserId = await this . mjolnir . client . getUserId ( ) ;
424+ const mjolnirUserId = await mjolnir . client . getUserId ( ) ;
422425 for ( let i = 0 ; i < NUMBER_OF_ROOMS ; ++ i ) {
423426 const roomId = await this . moderator . createRoom ( {
424427 invite : [ mjolnirUserId , ...goodUserIds , ...badUserIds ] ,
@@ -432,18 +435,18 @@ describe("Test: Testing RoomMemberManager", function() {
432435 for ( let i = 1 ; i < allRoomIds . length ; ++ i ) {
433436 // Protect all rooms except allRoomIds[0], as control.
434437 const roomId = allRoomIds [ i ] ;
435- await this . mjolnir . client . joinRoom ( roomId ) ;
438+ await mjolnir . client . joinRoom ( roomId ) ;
436439 await this . moderator . setUserPowerLevel ( mjolnirUserId , roomId , 100 ) ;
437- await this . moderator . sendMessage ( this . mjolnir . managementRoomId , { msgtype : 'm.text' , body : `!mjolnir rooms add ${ roomId } ` } ) ;
440+ await this . moderator . sendMessage ( mjolnir . managementRoomId , { msgtype : 'm.text' , body : `!mjolnir rooms add ${ roomId } ` } ) ;
438441 }
439442
440443 let protectedRoomsUpdated = false ;
441444 do {
442- let protectedRooms = this . mjolnir . protectedRooms ;
445+ let protectedRooms = mjolnir . protectedRoomsTracker . getProtectedRooms ( ) ;
443446 protectedRoomsUpdated = true ;
444447 for ( let i = 1 ; i < allRoomIds . length ; ++ i ) {
445448 const roomId = allRoomIds [ i ] ;
446- if ( ! ( roomId in protectedRooms ) ) {
449+ if ( ! protectedRooms . includes ( roomId ) ) {
447450 protectedRoomsUpdated = false ;
448451 await new Promise ( resolve => setTimeout ( resolve , 1_000 ) ) ;
449452 }
@@ -659,8 +662,8 @@ describe("Test: Testing RoomMemberManager", function() {
659662
660663 // Just-in-case health check, before starting.
661664 {
662- const usersInUnprotectedControlProtected = await this . mjolnir . client . getJoinedRoomMembers ( CONTROL_UNPROTECTED_ROOM_ID ) ;
663- const usersInControlProtected = await this . mjolnir . client . getJoinedRoomMembers ( CONTROL_PROTECTED_ID ) ;
665+ const usersInUnprotectedControlProtected = await mjolnir . client . getJoinedRoomMembers ( CONTROL_UNPROTECTED_ROOM_ID ) ;
666+ const usersInControlProtected = await mjolnir . client . getJoinedRoomMembers ( CONTROL_PROTECTED_ID ) ;
664667 for ( let userId of goodUserIds ) {
665668 assert . ok ( usersInUnprotectedControlProtected . includes ( userId ) , `Initially, good user ${ userId } should be in the unprotected control room` ) ;
666669 assert . ok ( usersInControlProtected . includes ( userId ) , `Initially, good user ${ userId } should be in the control room` ) ;
@@ -676,50 +679,50 @@ describe("Test: Testing RoomMemberManager", function() {
676679 const index = experiment . roomIndex ! ;
677680 const roomId = roomIds [ index ] ;
678681 const roomAlias = roomAliases [ index ] ;
679- const joined = this . mjolnir . roomJoins . getUsersInRoom ( roomId , start , 100 ) ;
682+ const joined = mjolnir . roomJoins . getUsersInRoom ( roomId , start , 100 ) ;
680683 console . debug ( `Running experiment ${ i } "${ experiment . name } " in room index ${ index } (${ roomId } / ${ roomAlias } ): \`${ experiment . command ( roomId , roomAlias ) } \`` ) ;
681684 assert . ok ( joined . length >= 2 * SAMPLE_SIZE , `In experiment ${ experiment . name } , we should have seen ${ 2 * SAMPLE_SIZE } users, saw ${ joined . length } ` ) ;
682685
683686 // Run experiment.
684- await getNthReply ( this . mjolnir . client , this . mjolnir . managementRoomId , experiment . n , async ( ) => {
687+ await getNthReply ( mjolnir . client , mjolnir . managementRoomId , experiment . n , async ( ) => {
685688 const command = experiment . command ( roomId , roomAlias ) ;
686- let result = await this . moderator . sendMessage ( this . mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
689+ let result = await this . moderator . sendMessage ( mjolnir . managementRoomId , { msgtype : 'm.text' , body : command } ) ;
687690 return result ;
688691 } ) ;
689692
690693 // Check post-conditions.
691- const usersInRoom = await this . mjolnir . client . getJoinedRoomMembers ( roomId ) ;
692- const usersInUnprotectedControlProtected = await this . mjolnir . client . getJoinedRoomMembers ( CONTROL_UNPROTECTED_ROOM_ID ) ;
693- const usersInControlProtected = await this . mjolnir . client . getJoinedRoomMembers ( CONTROL_PROTECTED_ID ) ;
694+ const usersInRoom = await mjolnir . client . getJoinedRoomMembers ( roomId ) ;
695+ const usersInUnprotectedControlProtected = await mjolnir . client . getJoinedRoomMembers ( CONTROL_UNPROTECTED_ROOM_ID ) ;
696+ const usersInControlProtected = await mjolnir . client . getJoinedRoomMembers ( CONTROL_PROTECTED_ID ) ;
694697 for ( let userId of goodUserIds ) {
695698 assert . ok ( usersInRoom . includes ( userId ) , `After a ${ experiment . name } , good user ${ userId } should still be in affected room` ) ;
696699 assert . ok ( usersInControlProtected . includes ( userId ) , `After a ${ experiment . name } , good user ${ userId } should still be in control room (${ CONTROL_PROTECTED_ID } )` ) ;
697700 assert . ok ( usersInUnprotectedControlProtected . includes ( userId ) , `After a ${ experiment . name } , good user ${ userId } should still be in unprotected control room (${ CONTROL_UNPROTECTED_ROOM_ID } )` ) ;
698701 }
699702 if ( experiment . method === Method . mute ) {
700703 for ( let userId of goodUserIds ) {
701- let canSpeak = await this . mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
704+ let canSpeak = await mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
702705 assert . ok ( canSpeak , `After a ${ experiment . name } , good user ${ userId } should still be allowed to speak in the room` ) ;
703706 }
704707 for ( let userId of badUserIds ) {
705- let canSpeak = await this . mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
708+ let canSpeak = await mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
706709 assert . ok ( ! canSpeak , `After a ${ experiment . name } , bad user ${ userId } should NOT be allowed to speak in the room` ) ;
707710 }
708711 } else if ( experiment . method === Method . unmute ) {
709712 for ( let userId of goodUserIds ) {
710- let canSpeak = await this . mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
713+ let canSpeak = await mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
711714 assert . ok ( canSpeak , `After a ${ experiment . name } , good user ${ userId } should still be allowed to speak in the room` ) ;
712715 }
713716 for ( let userId of badUserIds ) {
714- let canSpeak = await this . mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
717+ let canSpeak = await mjolnir . client . userHasPowerLevelFor ( userId , roomId , "m.message" , false ) ;
715718 assert . ok ( canSpeak , `After a ${ experiment . name } , bad user ${ userId } should AGAIN be allowed to speak in the room` ) ;
716719 }
717720 } else {
718721 for ( let userId of badUserIds ) {
719722 assert . ok ( ! usersInRoom . includes ( userId ) , `After a ${ experiment . name } , bad user ${ userId } should NOT be in affected room` ) ;
720723 assert . equal ( usersInControlProtected . includes ( userId ) , ! experiment . shouldAffectControlProtected , `After a ${ experiment . name } , bad user ${ userId } should ${ experiment . shouldAffectControlProtected ? "NOT" : "still" } be in control room` ) ;
721724 assert . ok ( usersInUnprotectedControlProtected . includes ( userId ) , `After a ${ experiment . name } , bad user ${ userId } should still be in unprotected control room` ) ;
722- const leaveEvent = await this . mjolnir . client . getRoomStateEvent ( roomId , "m.room.member" , userId ) ;
725+ const leaveEvent = await mjolnir . client . getRoomStateEvent ( roomId , "m.room.member" , userId ) ;
723726 switch ( experiment . method ) {
724727 case Method . kick :
725728 assert . equal ( leaveEvent . membership , "leave" ) ;
0 commit comments