mirror of
https://github.com/matrix-org/mjolnir.git
synced 2024-10-01 01:36:06 -04:00
66 lines
3.0 KiB
TypeScript
66 lines
3.0 KiB
TypeScript
import {newTestUser} from "./clientHelper";
|
|
|
|
import {MatrixClient} from "matrix-bot-sdk";
|
|
import {getFirstReaction} from "./commands/commandUtils";
|
|
import {strict as assert} from "assert";
|
|
import { readFileSync } from 'fs';
|
|
|
|
describe("Test: NSFW protection", function () {
|
|
let client: MatrixClient;
|
|
let room: string;
|
|
this.beforeEach(async function () {
|
|
client = await newTestUser(this.config.homeserverUrl, {name: {contains: "nsfw-protection"}});
|
|
await client.start();
|
|
const mjolnirId = await this.mjolnir.client.getUserId();
|
|
room = await client.createRoom({ invite: [mjolnirId] });
|
|
await client.joinRoom(room);
|
|
await client.joinRoom(this.config.managementRoom);
|
|
await client.setUserPowerLevel(mjolnirId, room, 100);
|
|
})
|
|
this.afterEach(async function () {
|
|
await client.stop();
|
|
})
|
|
|
|
function delay(ms: number) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|
|
|
|
|
|
it("Nsfw protection doesn't redact sfw images", async function() {
|
|
this.timeout(20000);
|
|
|
|
await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir rooms add ${room}` });
|
|
await getFirstReaction(client, this.mjolnir.managementRoomId, '✅', async () => {
|
|
return await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir enable NsfwProtection` });
|
|
});
|
|
|
|
const data = readFileSync('test_tree.jpg');
|
|
const mxc = await client.uploadContent(data, 'image/png');
|
|
let content = {"msgtype": "m.image", "body": "test.jpeg", "url": mxc};
|
|
let imageMessage = await client.sendMessage(room, content);
|
|
|
|
await delay(500);
|
|
let processedImage = await client.getEvent(room, imageMessage);
|
|
assert.equal(Object.keys(processedImage.content).length, 3, "This event should not have been redacted");
|
|
});
|
|
|
|
it("Nsfw protection redacts nsfw images", async function() {
|
|
this.timeout(20000);
|
|
// dial the sensitivity on the protection way up so that all images are flagged as NSFW
|
|
this.mjolnir.config.nsfwSensitivity = 0.0;
|
|
|
|
await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir rooms add ${room}` });
|
|
await getFirstReaction(client, this.mjolnir.managementRoomId, '✅', async () => {
|
|
return await client.sendMessage(this.mjolnir.managementRoomId, { msgtype: 'm.text', body: `!mjolnir enable NsfwProtection` });
|
|
});
|
|
|
|
const data = readFileSync('test_tree.jpg');
|
|
const mxc = await client.uploadContent(data, 'image/png');
|
|
let content = {"msgtype": "m.image", "body": "test.jpeg", "url": mxc};
|
|
let imageMessage = await client.sendMessage(room, content);
|
|
|
|
await delay(500);
|
|
let processedImage = await client.getEvent(room, imageMessage);
|
|
assert.equal(Object.keys(processedImage.content).length, 0, "This event should have been redacted");
|
|
});
|
|
}); |