diff --git a/test/integration/policyConsumptionTest.ts b/test/integration/policyConsumptionTest.ts index 3b3028e..b05980c 100644 --- a/test/integration/policyConsumptionTest.ts +++ b/test/integration/policyConsumptionTest.ts @@ -2,7 +2,7 @@ import { strict as assert } from "assert"; import { newTestUser } from "./clientHelper"; import { Mjolnir } from "../../src/Mjolnir"; -import config from "../../src/config"; +import { read as configRead } from "../../src/config"; import { getRequestFn, LogService, MatrixClient } from "matrix-bot-sdk"; import { createBanList, getFirstReaction } from "./commands/commandUtils"; @@ -10,16 +10,17 @@ import { createBanList, getFirstReaction } from "./commands/commandUtils"; * Get a copy of the rules from the ruleserver. */ async function currentRules(mjolnir: Mjolnir): Promise<{ start: object, stop: object, since: string }> { - return await new Promise((resolve, reject) => getRequestFn()({ - uri: `http://${mjolnir.config.web.address}:${mjolnir.config.web.port}/api/1/ruleserver/updates/`, - method: "GET" - }, (error, response, body) => { + return await new Promise((resolve, reject) => { + return getRequestFn()({ + uri: `http://${mjolnir.config.web.address}:${mjolnir.config.web.port}/api/1/ruleserver/updates/`, + method: "GET" + }, (error, _response, body) => { if (error) { reject(error) } else { resolve(JSON.parse(body)) } - })); + })}); } /** @@ -51,30 +52,25 @@ describe("Test: that policy lists are consumed by the associated synapse module" if(this.config.web.ruleServer.enabled) { this.timeout(5000) LogService.debug('policyConsumptionTest', `Rules at end of test ${JSON.stringify(await currentRules(this.mjolnir), null, 2)}`); - const mjolnir = config.RUNTIME.client!; // Clear any state associated with the account. - await mjolnir.setAccountData('org.matrix.mjolnir.watched_lists', { + await this.mjolnir.client.setAccountData('org.matrix.mjolnir.watched_lists', { references: [], }); } }) this.beforeAll(async function() { - if (!this.config.web.ruleServer.enabled) { + let config = configRead(); + if (!config?.web?.ruleServer?.enabled) { LogService.warn("policyConsumptionTest", "Skipping policy consumption test because the ruleServer is not enabled") this.skip(); } }) - this.beforeEach(async function () { - this.timeout(1000); - const mjolnir = this.config.RUNTIME.client!; - }) it('blocks users in antispam when they are banned from sending messages and invites serverwide.', async function() { this.timeout(20000); // Create a few users and a room. let badUser = await newTestUser(this.config.homeserverUrl, { name: { contains: "spammer" }}); let badUserId = await badUser.getUserId(); - const mjolnir = config.RUNTIME.client! - let mjolnirUserId = await mjolnir.getUserId(); + let mjolnirUserId = await this.mjolnir.client.getUserId(); let moderator = await newTestUser(this.config.homeserverUrl, { name: { contains: "moderator" }}); this.moderator = moderator; await moderator.joinRoom(this.mjolnir.managementRoomId); @@ -82,11 +78,11 @@ describe("Test: that policy lists are consumed by the associated synapse module" // We do this so the moderator can send invites, no other reason. await badUser.setUserPowerLevel(await moderator.getUserId(), unprotectedRoom, 100); await moderator.joinRoom(unprotectedRoom); - const banList = await createBanList(this.mjolnir.managementRoomId, mjolnir, moderator); + const banList = await createBanList(this.mjolnir.managementRoomId, this.mjolnir.client, moderator); await badUser.sendMessage(unprotectedRoom, {msgtype: 'm.text', body: 'Something bad and mean'}); - await waitForRuleChange(this.config.web.address, this.mjolnir.config.web.port, async () => { - await getFirstReaction(mjolnir, this.mjolnir.managementRoomId, '✅', async () => { + await waitForRuleChange(this.mjolnir, async () => { + await getFirstReaction(this.mjolnir.client, this.mjolnir.managementRoomId, '✅', async () => { return await moderator.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir ban ${banList} ${badUserId}` }); }); }); @@ -96,8 +92,8 @@ describe("Test: that policy lists are consumed by the associated synapse module" assert.ok(await moderator.sendMessage(unprotectedRoom, { msgtype: 'm.text', body: 'test'}), 'They should be able to send messages still too.'); // Test we can remove the rules. - await waitForRuleChange(this.config.web.address, this.mjolnir.config.web.port, async () => { - await getFirstReaction(mjolnir, this.mjolnir.managementRoomId, '✅', async () => { + await waitForRuleChange(this.mjolnir, async () => { + await getFirstReaction(this.mjolnir.client, this.mjolnir.managementRoomId, '✅', async () => { return await moderator.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir unban ${banList} ${badUserId}` }); }); }); @@ -107,15 +103,14 @@ describe("Test: that policy lists are consumed by the associated synapse module" it('Test: Cannot send message to a room that is listed in a policy list and cannot invite a user to the room either', async function () { this.timeout(20000); let badUser = await newTestUser(this.config.homeserverUrl, { name: { contains: "spammer" }}); - const mjolnir = config.RUNTIME.client! let moderator = await newTestUser(this.config.homeserverUrl, { name: { contains: "moderator" }}); await moderator.joinRoom(this.mjolnir.managementRoomId); - const banList = await createBanList(this.mjolnir.managementRoomId, mjolnir, moderator); + const banList = await createBanList(this.mjolnir.managementRoomId, this.mjolnir.client, moderator); let badRoom = await badUser.createRoom(); let unrelatedRoom = await badUser.createRoom(); await badUser.sendMessage(badRoom, {msgtype: 'm.text', body: "Very Bad Stuff in this room"}); - await waitForRuleChange(this.config.web.address, this.mjolnir.config.web.port, async () => { - await getFirstReaction(mjolnir, this.mjolnir.managementRoomId, '✅', async () => { + await waitForRuleChange(this.mjolnir, async () => { + await getFirstReaction(this.mjolnir.client, this.mjolnir.managementRoomId, '✅', async () => { return await moderator.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir ban ${banList} ${badRoom}` }); }); }); @@ -124,8 +119,8 @@ describe("Test: that policy lists are consumed by the associated synapse module" assert.ok(await badUser.sendMessage(unrelatedRoom, { msgtype: 'm.text.', body: 'hey'}), 'should be able to send messages to unrelated room'); assert.ok(await badUser.inviteUser(await moderator.getUserId(), unrelatedRoom), 'They should still be able to invite to other rooms though'); // Test we can remove these rules. - await waitForRuleChange(this.config.web.address, this.mjolnir.config.web.port, async () => { - await getFirstReaction(mjolnir, this.mjolnir.managementRoomId, '✅', async () => { + await waitForRuleChange(this.mjolnir, async () => { + await getFirstReaction(this.mjolnir.client, this.mjolnir.managementRoomId, '✅', async () => { return await moderator.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir unban ${banList} ${badRoom}` }); }); }); @@ -135,21 +130,20 @@ describe("Test: that policy lists are consumed by the associated synapse module" }) it('Test: When a list becomes unwatched, the associated policies are stopped.', async function () { this.timeout(20000); - const mjolnir = config.RUNTIME.client! let moderator = await newTestUser(this.config.homeserverUrl, { name: { contains: "moderator" }}); await moderator.joinRoom(this.mjolnir.managementRoomId); - const banList = await createBanList(this.mjolnir.managementRoomId, mjolnir, moderator); + const banList = await createBanList(this.mjolnir.managementRoomId, this.mjolnir.client, moderator); let targetRoom = await moderator.createRoom(); await moderator.sendMessage(targetRoom, {msgtype: 'm.text', body: "Fluffy Foxes."}); - await waitForRuleChange(this.config.web.address, this.mjolnir.config.web.port, async () => { - await getFirstReaction(mjolnir, this.mjolnir.managementRoomId, '✅', async () => { + await waitForRuleChange(this.mjolnir, async () => { + await getFirstReaction(this.mjolnir.client, this.mjolnir.managementRoomId, '✅', async () => { return await moderator.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir ban ${banList} ${targetRoom}` }); }); }); await assert.rejects(moderator.sendMessage(targetRoom, { msgtype: 'm.text', body: 'test'}), 'should not be able to send messages to a room which is listed.'); - await waitForRuleChange(this.config.web.address, this.mjolnir.config.web.port, async () => { - await getFirstReaction(mjolnir, this.mjolnir.managementRoomId, '✅', async () => { + await waitForRuleChange(this.mjolnir, async () => { + await getFirstReaction(this.mjolnir.client, this.mjolnir.managementRoomId, '✅', async () => { return await moderator.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir unwatch #${banList}:localhost:9999` }); }); });