hookshot/spec/e2ee.spec.ts
Will Hunt 052d42fca8
Stabilize E2EE support (#989)
* Deprecate legacy sled store

* Add e2ee test

* Add support for e2ee testing in e2e environment

* Tidy up redis support

* Attempt to get test working

* cleanup test

* opportunistic lint

* tiny bit of cleanup

* remove ref

* tweak to homerunner

* switch to nightly images for Synapse (to test E2EE)

* use nightly

* newsfile.

* Update bot sdk to support authenticated media (now that Synapse requires it)

* fix typings

* MatrixError

* one more

* Graduate the encryption property to stable.

* update test config

* Update encryption docs.

* fix some old config bits
2024-11-26 16:04:56 +00:00

67 lines
2.9 KiB
TypeScript

import { MessageEventContent } from "matrix-bot-sdk";
import { E2ESetupTestTimeout, E2ETestEnv } from "./util/e2e-test";
import { describe, it, beforeEach, afterEach } from "@jest/globals";
const CryptoRoomState = [{
content: {
"algorithm": "m.megolm.v1.aes-sha2"
},
state_key: "",
type: "m.room.encryption"
}];
describe('End-2-End Encryption support', () => {
let testEnv: E2ETestEnv;
beforeEach(async () => {
testEnv = await E2ETestEnv.createTestEnv({ matrixLocalparts: ['user'], enableE2EE: true });
await testEnv.setUp();
}, E2ESetupTestTimeout);
afterEach(() => {
return testEnv?.tearDown();
});
it('should be able to send the help command', async () => {
const user = testEnv.getUser('user');
const testRoomId = await user.createRoom({ name: 'Test room', invite:[testEnv.botMxid], initial_state: CryptoRoomState});
await user.setUserPowerLevel(testEnv.botMxid, testRoomId, 50);
await user.waitForRoomJoin({sender: testEnv.botMxid, roomId: testRoomId });
await user.sendText(testRoomId, "!hookshot help");
await user.waitForRoomEvent<MessageEventContent>({
eventType: 'm.room.message', sender: testEnv.botMxid, roomId: testRoomId,
});
});
it('should send notices in an encrypted format', async () => {
const user = testEnv.getUser('user');
const testRoomId = await user.createRoom({ name: 'Test room', invite:[testEnv.botMxid], initial_state: CryptoRoomState});
await user.setUserPowerLevel(testEnv.botMxid, testRoomId, 50);
await user.waitForRoomJoin({sender: testEnv.botMxid, roomId: testRoomId });
await user.sendText(testRoomId, "!hookshot webhook test-webhook");
const inviteResponse = await user.waitForRoomInvite({sender: testEnv.botMxid});
await user.waitForEncryptedEvent<MessageEventContent>({
eventType: 'm.room.message', sender: testEnv.botMxid, roomId: testRoomId,
body: 'Room configured to bridge webhooks. See admin room for secret url.'
});
const webhookUrlMessage = user.waitForEncryptedEvent<MessageEventContent>({
eventType: 'm.room.message', sender: testEnv.botMxid, roomId: inviteResponse.roomId
});
await user.joinRoom(inviteResponse.roomId);
const msgData = (await webhookUrlMessage).data.content.body;
const webhookUrl = msgData.split('\n')[2];
const webhookNotice = user.waitForEncryptedEvent<MessageEventContent>({
eventType: 'm.room.message', sender: testEnv.botMxid, roomId: testRoomId, body: 'Hello world!'
});
// Send a webhook
await fetch(webhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({text: 'Hello world!'})
});
// And await the notice.
await webhookNotice;
});
});