mirror of
https://github.com/the-draupnir-project/Draupnir.git
synced 2026-06-03 22:31:17 +00:00
6272da337b
https://github.com/the-draupnir-project/planning/issues/80 Lifetimes make it impossible to forget to link up various destructor/finalizer methods, and makes it impossible to forget to run them. It's a good structural solution to the problem we keep having. We haven't updated protections to use them properly yet, ie allocate things against the lifetime, but for now the protections themeselves are allocated against the lifetime.
86 lines
2.6 KiB
TypeScript
86 lines
2.6 KiB
TypeScript
// Copyright 2022 - 2024 Gnuxie <Gnuxie@protonmail.com>
|
|
// Copyright 2021, 2022 Marco Cirillo
|
|
//
|
|
// SPDX-License-Identifier: AFL-3.0 AND Apache-2.0
|
|
//
|
|
// SPDX-FileAttributionText: <text>
|
|
// This modified file incorporates work from mjolnir
|
|
// https://github.com/matrix-org/mjolnir
|
|
// </text>
|
|
|
|
import { strict as assert } from "assert";
|
|
import { newTestUser } from "../clientHelper";
|
|
import { getFirstReaction } from "./commandUtils";
|
|
import { DraupnirTestContext, draupnirSafeEmitter } from "../mjolnirSetupUtils";
|
|
|
|
// Breaks with this test.
|
|
describe("Test: The make admin command", function () {
|
|
it("Draupnir make the bot self room administrator", async function (
|
|
this: DraupnirTestContext
|
|
) {
|
|
this.timeout(90000);
|
|
if (!this.config.admin?.enableMakeRoomAdminCommand) {
|
|
this.done();
|
|
}
|
|
const draupnir = this.draupnir;
|
|
if (draupnir === undefined) {
|
|
throw new TypeError(`Test didn't setup correctly`);
|
|
}
|
|
const moderator = await newTestUser(this.config.homeserverUrl, {
|
|
name: { contains: "moderator" },
|
|
});
|
|
const userA = await newTestUser(this.config.homeserverUrl, {
|
|
name: { contains: "a" },
|
|
});
|
|
const userAId = await userA.getUserId();
|
|
|
|
await moderator.joinRoom(draupnir.managementRoomID);
|
|
const targetRoom = await moderator.createRoom({
|
|
invite: [draupnir.clientUserID],
|
|
preset: "public_chat",
|
|
});
|
|
await moderator.sendMessage(draupnir.managementRoomID, {
|
|
msgtype: "m.text.",
|
|
body: `!draupnir rooms add ${targetRoom}`,
|
|
});
|
|
await userA.joinRoom(targetRoom);
|
|
const powerLevelsBefore = await moderator.getRoomStateEvent(
|
|
targetRoom,
|
|
"m.room.power_levels",
|
|
""
|
|
);
|
|
assert.notEqual(
|
|
powerLevelsBefore["users"][draupnir.clientUserID],
|
|
100,
|
|
`Bot should not yet be an admin of ${targetRoom}`
|
|
);
|
|
await getFirstReaction(
|
|
draupnirSafeEmitter(),
|
|
draupnir.managementRoomID,
|
|
"✅",
|
|
async () => {
|
|
return await moderator.sendMessage(draupnir.managementRoomID, {
|
|
msgtype: "m.text",
|
|
body: `!draupnir hijack room ${targetRoom} ${draupnir.clientUserID}`,
|
|
});
|
|
}
|
|
);
|
|
|
|
const powerLevelsAfter = await moderator.getRoomStateEvent(
|
|
targetRoom,
|
|
"m.room.power_levels",
|
|
""
|
|
);
|
|
assert.equal(
|
|
powerLevelsAfter["users"][draupnir.clientUserID],
|
|
100,
|
|
"Bot should be a room admin."
|
|
);
|
|
assert.equal(
|
|
powerLevelsAfter["users"][userAId],
|
|
undefined,
|
|
"User A is not supposed to be a room admin."
|
|
);
|
|
} as unknown as Mocha.AsyncFunc);
|
|
});
|