From 628677fc6fd11b20fdbfb554c2e6b0d15cd3022c Mon Sep 17 00:00:00 2001 From: "Andrew Morgan andrew@amorgan.xyz" <andrew@amorgan.xyz> Date: Wed, 23 May 2018 01:55:23 +0200 Subject: [PATCH] Fixed issues and added tests --- src/matrixeventprocessor.ts | 8 +++---- test/mocks/collection.ts | 4 +++- test/mocks/emoji.ts | 3 +++ test/mocks/guild.ts | 2 ++ test/test_matrixeventprocessor.ts | 39 ++++++++++++++++++++++++++++++- 5 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 test/mocks/emoji.ts diff --git a/src/matrixeventprocessor.ts b/src/matrixeventprocessor.ts index 3d6aeea..01f7963 100644 --- a/src/matrixeventprocessor.ts +++ b/src/matrixeventprocessor.ts @@ -99,19 +99,17 @@ export class MatrixEventProcessor { } public ReplaceDiscordEmoji(content: string, guild: Discord.Guild): string { - console.log("Gonna replace") let results = DISCORD_EMOJI_REGEX.exec(content); while (results !== null) { const emojiName = results[1]; const emojiNameWithColons = results[0]; // Check if this emoji exists in the guild - if(guild.emojis[emojiName] !== null) { + const emoji = guild.emojis.find((e) => e.name === emojiName); + if (emoji) { // Replace :a: with <:a:123ID123> - const emojiID = guild.emojis.find((emoji) => { return emoji.name === emojiName }).id; - content = content.replace(emojiNameWithColons, `<${emojiNameWithColons}${emojiID}>`); + content = content.replace(emojiNameWithColons, `<${emojiNameWithColons}${emoji.id}>`); } - results = DISCORD_EMOJI_REGEX.exec(content); } return content; diff --git a/test/mocks/collection.ts b/test/mocks/collection.ts index b724841..c02d9c8 100644 --- a/test/mocks/collection.ts +++ b/test/mocks/collection.ts @@ -1,4 +1,6 @@ -export class MockCollection<T1, T2> extends Map { +import { Collection } from "discord.js"; + +export class MockCollection<T1, T2> extends Collection<T1, T2> { public array(): T2[] { return [...this.values()]; } diff --git a/test/mocks/emoji.ts b/test/mocks/emoji.ts new file mode 100644 index 0000000..06c6535 --- /dev/null +++ b/test/mocks/emoji.ts @@ -0,0 +1,3 @@ +export class MockEmoji { + constructor (public id: string = "", public name = "") { } +} diff --git a/test/mocks/guild.ts b/test/mocks/guild.ts index 670d298..2c6a565 100644 --- a/test/mocks/guild.ts +++ b/test/mocks/guild.ts @@ -1,10 +1,12 @@ import {MockCollection} from "./collection"; import {MockMember} from "./member"; +import {MockEmoji} from "./emoji"; import {Channel} from "discord.js"; export class MockGuild { public channels = new MockCollection<string, Channel>(); public members = new MockCollection<string, MockMember>(); + public emojis = new MockCollection<string, MockEmoji>(); public id: string; public name: string; constructor(id: string, channels: any[] = [], name: string = null) { diff --git a/test/test_matrixeventprocessor.ts b/test/test_matrixeventprocessor.ts index f4e032e..d2ca112 100644 --- a/test/test_matrixeventprocessor.ts +++ b/test/test_matrixeventprocessor.ts @@ -7,7 +7,9 @@ import * as Proxyquire from "proxyquire"; import { PresenceHandler } from "../src/presencehandler"; import { DiscordBot } from "../src/bot"; import { MockGuild } from "./mocks/guild"; +import { MockCollection } from "./mocks/collection"; import { MockMember } from "./mocks/member"; +import { MockEmoji } from "./mocks/emoji"; import {MatrixEventProcessor, MatrixEventProcessorOpts} from "../src/matrixeventprocessor"; import {DiscordBridgeConfig} from "../src/config"; import {MessageProcessor, MessageProcessorOpts} from "../src/messageprocessor"; @@ -204,7 +206,42 @@ describe("MatrixEventProcessor", () => { }, {avatar_url: "test"}, mockChannel as any); Chai.assert.equal(evt.description, "@ here Hello!"); }); - // TODO: Add a test for replaceDiscordEmoji + + it("Should process custom discord emojis.", () => { + const processor = createMatrixEventProcessor(false, false, true); + const mockEmoji = new MockEmoji("123", "supercake"); + const mockCollectionEmojis = new MockCollection<string, MockEmoji>(); + mockCollectionEmojis.set("123", mockEmoji); + + const mockChannelEmojis = new MockChannel("test", { + emojis: mockCollectionEmojis, + }); + const evt = processor.EventToEmbed({ + sender: "@test:localhost", + content: { + body: "I like :supercake:", + }, + }, {avatar_url: "test"}, mockChannelEmojis as any); + Chai.assert.equal(evt.description, "I like <:supercake:123>"); + }); + + it("Should not process invalid custom discord emojis.", () => { + const processor = createMatrixEventProcessor(false, false, true); + const mockEmoji = new MockEmoji("123", "supercake"); + const mockCollectionEmojis = new MockCollection<string, MockEmoji>(); + mockCollectionEmojis.set("123", mockEmoji); + + const mockChannelEmojis = new MockChannel("test", { + emojis: mockCollectionEmojis, + }); + const evt = processor.EventToEmbed({ + sender: "@test:localhost", + content: { + body: "I like :lamecake:", + }, + }, {avatar_url: "test"}, mockChannelEmojis as any); + Chai.assert.equal(evt.description, "I like :lamecake:"); + }); }); describe("FindMentionsInPlainBody", () => { it("processes mentioned username correctly", async () => { -- GitLab