From 8ba2ce4cab2443f361388ecc6e50fba02c98473b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20H=C3=BCttemann?= Date: Fri, 23 Jun 2023 15:43:31 +0200 Subject: [PATCH] Edit mapping types to use constants --- src/Entities.ts | 27 +++++++++++++++++++++++++ src/app.ts | 39 +++++++------------------------------ src/handlers/rooms.test.ts | 22 +++++++++++++++------ src/handlers/rooms.ts | 3 ++- src/handlers/users.test.ts | 3 ++- src/handlers/users.ts | 3 ++- src/helpers/storage.test.ts | 7 ++++--- src/helpers/storage.ts | 10 ++++++---- 8 files changed, 66 insertions(+), 48 deletions(-) create mode 100644 src/Entities.ts diff --git a/src/Entities.ts b/src/Entities.ts new file mode 100644 index 0000000..331b44e --- /dev/null +++ b/src/Entities.ts @@ -0,0 +1,27 @@ +export const enum Entity { + Users = 'users', + Rooms = 'rooms', + Messages = 'messages', +} + +type EntityConfig = { + filename: string + mappingType: number +} + +export const entities: { + [key in Entity]: EntityConfig +} = { + users: { + filename: 'users.json', + mappingType: 0, + }, + rooms: { + filename: 'rocketchat_room.json', + mappingType: 1, + }, + messages: { + filename: 'rocketchat_message.json', + mappingType: 2, + }, +} as const diff --git a/src/app.ts b/src/app.ts index c71c06c..2661191 100644 --- a/src/app.ts +++ b/src/app.ts @@ -7,51 +7,26 @@ import { handle as handleUser } from './handlers/users' import log from './helpers/logger' import { initStorage } from './helpers/storage' import { whoami } from './helpers/synapse' +import { Entity, entities } from './Entities' log.info('rocketchat2matrix starts.') -const enum Entities { - Users = 'users', - Rooms = 'rooms', - Messages = 'messages', -} - -type EntityConfig = { - filename: string - mappingType: number -} - -const entities: { [key in Entities]: EntityConfig } = { - users: { - filename: 'users.json', - mappingType: 0, - }, - rooms: { - filename: 'rocketchat_room.json', - mappingType: 1, - }, - messages: { - filename: 'rocketchat_message.json', - mappingType: 2, - }, -} - -async function loadRcExport(entity: Entities) { +async function loadRcExport(entity: Entity) { const rl = new lineByLine(`./inputs/${entities[entity].filename}`) let line: false | Buffer while ((line = rl.next())) { const item = JSON.parse(line.toString()) switch (entity) { - case Entities.Users: + case Entity.Users: await handleUser(item) break - case Entities.Rooms: + case Entity.Rooms: await handleRoom(item) break - case Entities.Messages: + case Entity.Messages: log.debug(`Message: ${item.name}`) break @@ -66,9 +41,9 @@ async function main() { await whoami() await initStorage() log.info('Parsing users') - await loadRcExport(Entities.Users) + await loadRcExport(Entity.Users) log.info('Parsing rooms') - await loadRcExport(Entities.Rooms) + await loadRcExport(Entity.Rooms) log.info('Done.') } catch (error) { log.error(`Encountered an error while booting up: ${error}`, error) diff --git a/src/handlers/rooms.test.ts b/src/handlers/rooms.test.ts index 6a7008f..d2f3fc6 100644 --- a/src/handlers/rooms.test.ts +++ b/src/handlers/rooms.test.ts @@ -17,6 +17,7 @@ import { createDirectChatMemberships, registerRoom, } from './rooms' +import { Entity, entities } from '../Entities' jest.mock('axios') const mockedAxios = axios as jest.Mocked @@ -177,7 +178,7 @@ test('accepting invitation by joining the room', async () => { rcId: 'whatever', matrixId: 'Neo', accessToken: 'secretAuthToken', - type: 0, + type: entities[Entity.Users].mappingType, }, room_id ) @@ -202,7 +203,7 @@ test('filtering members', async () => { return { rcId, matrixId: `@${rcId}:matrix`, - type: type || 0, + type: type || entities[Entity.Users].mappingType, accessToken: 'accessToken', } } @@ -215,9 +216,18 @@ test('filtering members', async () => { mockMapping('existingUser'), mockMapping('otherExistingUser'), ]) - expect(mockedStorage.getMapping).toBeCalledWith('existingUser', 0) - expect(mockedStorage.getMapping).toBeCalledWith('otherExistingUser', 0) - expect(mockedStorage.getMapping).toBeCalledWith('excludedUser', 0) + expect(mockedStorage.getMapping).toBeCalledWith( + 'existingUser', + entities[Entity.Users].mappingType + ) + expect(mockedStorage.getMapping).toBeCalledWith( + 'otherExistingUser', + entities[Entity.Users].mappingType + ) + expect(mockedStorage.getMapping).toBeCalledWith( + 'excludedUser', + entities[Entity.Users].mappingType + ) }) test('creating mapping', async () => { @@ -227,7 +237,7 @@ test('creating mapping', async () => { expect(mockedStorage.save).toHaveBeenCalledWith({ rcId: rcPublicRoom._id, matrixId: room_id, - type: 1, + type: entities[Entity.Rooms].mappingType, accessToken: undefined, } as IdMapping) }) diff --git a/src/handlers/rooms.ts b/src/handlers/rooms.ts index 4c1f980..9568372 100644 --- a/src/handlers/rooms.ts +++ b/src/handlers/rooms.ts @@ -1,3 +1,4 @@ +import { Entity, entities } from '../Entities' import { IdMapping } from '../entity/IdMapping' import log from '../helpers/logger' import { @@ -193,7 +194,7 @@ export async function createMapping( const roomMapping = new IdMapping() roomMapping.rcId = rcId roomMapping.matrixId = matrixRoom.room_id - roomMapping.type = 1 + roomMapping.type = entities[Entity.Rooms].mappingType await save(roomMapping) log.debug('Mapping added:', roomMapping) diff --git a/src/handlers/users.test.ts b/src/handlers/users.test.ts index c53995b..612aad2 100644 --- a/src/handlers/users.test.ts +++ b/src/handlers/users.test.ts @@ -13,6 +13,7 @@ import { userIsExcluded, } from '../handlers/users' import { IdMapping } from '../entity/IdMapping' +import { Entity, entities } from '../Entities' jest.mock('axios') const mockedAxios = axios as jest.Mocked @@ -104,7 +105,7 @@ test('creating mapping', async () => { expect(mockedStorage.save).toHaveBeenCalledWith({ rcId: rcUser._id, matrixId: matrixUser.user_id, - type: 0, + type: entities[Entity.Users].mappingType, accessToken: matrixUser.access_token, } as IdMapping) }) diff --git a/src/handlers/users.ts b/src/handlers/users.ts index ac4a9d2..9c3ae1c 100644 --- a/src/handlers/users.ts +++ b/src/handlers/users.ts @@ -3,6 +3,7 @@ import log from '../helpers/logger' import { axios } from '../helpers/synapse' import { createMembership, getUserId, save } from '../helpers/storage' import { IdMapping } from '../entity/IdMapping' +import { Entity, entities } from '../Entities' export type RcUser = { _id: string @@ -99,7 +100,7 @@ export async function createMapping( const mapping = new IdMapping() mapping.rcId = rcId mapping.matrixId = matrixUser.user_id - mapping.type = 0 + mapping.type = entities[Entity.Users].mappingType mapping.accessToken = matrixUser.access_token await save(mapping) diff --git a/src/helpers/storage.test.ts b/src/helpers/storage.test.ts index d579979..b4de1cf 100644 --- a/src/helpers/storage.test.ts +++ b/src/helpers/storage.test.ts @@ -13,11 +13,12 @@ import { } from './storage' import { IdMapping } from '../entity/IdMapping' import { Membership } from '../entity/Membership' +import { Entity, entities } from '../Entities' const mapping = new IdMapping() mapping.rcId = 'rcId' mapping.matrixId = 'matrixId' -mapping.type = 0 +mapping.type = entities[Entity.Users].mappingType mapping.accessToken = 'accessToken' const membership = new Membership() @@ -73,7 +74,7 @@ test('get room by id', async () => { const room = new IdMapping() room.rcId = 'rcRoom' room.matrixId = 'matrixRoom' - room.type = 1 + room.type = entities[Entity.Rooms].mappingType await save(room) await expect(getRoomId(room.rcId)).resolves.toBe(room.matrixId) @@ -84,7 +85,7 @@ test('get message by id', async () => { const message = new IdMapping() message.rcId = 'rcMessage' message.matrixId = 'matrixMessage' - message.type = 2 + message.type = entities[Entity.Messages].mappingType await save(message) await expect(getMessageId(message.rcId)).resolves.toBe(message.matrixId) diff --git a/src/helpers/storage.ts b/src/helpers/storage.ts index 182a739..df99642 100644 --- a/src/helpers/storage.ts +++ b/src/helpers/storage.ts @@ -1,6 +1,7 @@ import { DataSource } from 'typeorm' import { IdMapping } from '../entity/IdMapping' import { Membership } from '../entity/Membership' +import { Entity, entities } from '../Entities' const AppDataSource = new DataSource({ type: 'sqlite', @@ -29,7 +30,7 @@ export async function save(entity: IdMapping | Membership): Promise { } export async function getAccessToken(id: string): Promise { - return (await getMapping(id, 0))?.accessToken + return (await getMapping(id, entities[Entity.Users].mappingType))?.accessToken } export async function createMembership( @@ -57,13 +58,14 @@ export async function getMemberships(rcRoomId: string): Promise { } export async function getUserId(rcId: string): Promise { - return (await getMapping(rcId, 0))?.matrixId + return (await getMapping(rcId, entities[Entity.Users].mappingType))?.matrixId } export async function getRoomId(rcId: string): Promise { - return (await getMapping(rcId, 1))?.matrixId + return (await getMapping(rcId, entities[Entity.Rooms].mappingType))?.matrixId } export async function getMessageId(rcId: string): Promise { - return (await getMapping(rcId, 2))?.matrixId + return (await getMapping(rcId, entities[Entity.Messages].mappingType)) + ?.matrixId }