Skip to content

Commit a970733

Browse files
committed
Update roomMemberTest for removal of mjolnir.protectedRooms object.
#370.
1 parent cfea765 commit a970733

File tree

1 file changed

+35
-32
lines changed

1 file changed

+35
-32
lines changed

test/integration/roomMembersTest.ts

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { strict as assert } from "assert";
22
import { randomUUID } from "crypto";
3+
import { Mjolnir } from "../../src/Mjolnir";
34
import { RoomMemberManager } from "../../src/RoomMembers";
45
import { newTestUser } from "./clientHelper";
56
import { 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

Comments
 (0)