From d711b81f2324d8d29b17ef3509a2fb7c08f38e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20H=C3=BCttemann?= Date: Thu, 31 Aug 2023 17:43:45 +0200 Subject: [PATCH] Add tests for Messages --- src/handlers/messages.test.ts | 86 +++++++++++++++++++++++++++++++++++ src/handlers/messages.ts | 4 +- 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/handlers/messages.test.ts diff --git a/src/handlers/messages.test.ts b/src/handlers/messages.test.ts new file mode 100644 index 0000000..ff96d69 --- /dev/null +++ b/src/handlers/messages.test.ts @@ -0,0 +1,86 @@ +process.env.AS_TOKEN = 'ApplicationSecretToken' +process.env.EXCLUDED_USERS = 'excludedUser1,excludedUser2' +import { expect, jest, test } from '@jest/globals' +import axios from 'axios' +import * as storage from '../helpers/storage' +import { + MatrixMessage, + RcMessage, + createMessage, + handle, + mapMessage, +} from './messages' + +jest.mock('axios') +const mockedAxios = axios as jest.Mocked + +jest.mock('../helpers/storage') +const mockedStorage = storage as jest.Mocked + +const rcMessage: RcMessage = { + _id: 'testMessage', + rid: 'testRoom', + msg: 'Test', + u: { + _id: 'testUser', + }, + ts: { + $date: '1970-01-02T06:51:51.0Z', // UNIX-TS: 111111000 + }, +} + +const matrixMessage: MatrixMessage = { + body: 'Test', + msgtype: 'm.text', + type: 'm.room.message', +} + +test('mapping messages', () => { + expect(mapMessage(rcMessage)).toStrictEqual(matrixMessage) +}) + +test('creating messages', async () => { + mockedAxios.put.mockResolvedValue({ data: { event_id: 'message@matrix' } }) + + await expect( + createMessage(matrixMessage, 'roomID', 'userID', 42, 'transactionId') + ).resolves.toBe('message@matrix') + + expect(mockedAxios.put).toHaveBeenCalledWith( + '/_matrix/client/v3/rooms/roomID/send/m.room.message/transactionId?user_id=userID&ts=42', + matrixMessage, + { headers: { Authorization: 'Bearer ApplicationSecretToken' } } + ) + mockedAxios.put.mockClear() +}) + +test('handling messages', async () => { + mockedAxios.put.mockResolvedValue({ data: { event_id: 'test@matrix' } }) + mockedStorage.getRoomId.mockResolvedValue('testMatrixRoom') + mockedStorage.getUserId.mockResolvedValue('testMatrixUser') + mockedStorage.getMessageId.mockResolvedValue('testMatrixMessage') + + await expect(handle({ ...rcMessage, tmid: 'threadId' })).resolves.toBe( + undefined + ) + + expect(mockedAxios.put).toHaveBeenLastCalledWith( + '/_matrix/client/v3/rooms/testMatrixRoom/send/m.room.message/testMessage?user_id=testMatrixUser&ts=111111000', + { + ...matrixMessage, + 'm.relates_to': { + rel_type: 'm.thread', + event_id: 'testMatrixMessage', + is_falling_back: true, + 'm.in_reply_to': { + event_id: 'testMatrixMessage', + }, + }, + }, + { headers: { Authorization: 'Bearer ApplicationSecretToken' } } + ) + expect(mockedStorage.getRoomId).toHaveBeenLastCalledWith('testRoom') + expect(mockedStorage.getUserId).toHaveBeenLastCalledWith('testUser') + expect(mockedStorage.getMessageId).toHaveBeenLastCalledWith('threadId') + mockedAxios.put.mockClear() +}) diff --git a/src/handlers/messages.ts b/src/handlers/messages.ts index f6e99d6..683a976 100644 --- a/src/handlers/messages.ts +++ b/src/handlers/messages.ts @@ -25,10 +25,10 @@ export type RcMessage = { username?: string name?: string } - md?: any // The message's content in a markdown format. + // md?: any // The message's content in a markdown format. pinned?: boolean drid?: string // The direct room id (if belongs to a direct room). - attachments?: any[] // An array of attachment objects, available only when the message has at least one attachment. + // attachments?: any[] // An array of attachment objects, available only when the message has at least one attachment. reactions?: object // Object containing reaction information associated with the message. }