From 220d14a9c7e595156a90d0897309ae14d121e30a Mon Sep 17 00:00:00 2001 From: Will Hunt <will@half-shot.uk> Date: Mon, 2 Nov 2020 22:49:51 +0000 Subject: [PATCH] More test code --- src/discordmessageprocessor.ts | 2 +- src/presencehandler.ts | 26 ++++---- src/store.ts | 4 +- test/mocks/channel.ts | 2 +- test/mocks/collection.ts | 18 ++++- test/mocks/discordclient.ts | 10 +-- test/mocks/guild.ts | 18 ++--- test/mocks/member.ts | 4 +- test/mocks/presence.ts | 16 +++++ test/mocks/user.ts | 6 +- test/test_discordbot.ts | 1 - test/test_discordmessageprocessor.ts | 8 +-- test/test_matrixmessageprocessor.ts | 16 ++--- test/test_matrixroomhandler.ts | 2 +- test/test_presencehandler.ts | 98 ++++++++++------------------ test/test_usersyncroniser.ts | 8 +-- 16 files changed, 123 insertions(+), 116 deletions(-) create mode 100644 test/mocks/presence.ts diff --git a/src/discordmessageprocessor.ts b/src/discordmessageprocessor.ts index 13ed3d8..1add526 100644 --- a/src/discordmessageprocessor.ts +++ b/src/discordmessageprocessor.ts @@ -77,7 +77,7 @@ export class DiscordMessageProcessor { return null; }, getUser: async (id: string) => { - const member = await msg.guild?.members.fetch(id); + const member = await msg.guild?.members.resolve(id); const mxid = `@_discord_${id}:${this.domain}`; const name = member ? member.displayName : mxid; return { diff --git a/src/presencehandler.ts b/src/presencehandler.ts index 7901880..9108314 100644 --- a/src/presencehandler.ts +++ b/src/presencehandler.ts @@ -63,11 +63,18 @@ export class PresenceHandler { } public EnqueueUser(presence: Presence) { - if (presence.userID !== this.bot.GetBotId() && this.presenceQueue.find((u) => u.userID === presence.userID) === undefined) { - log.verbose(`Adding ${presence.userID} (${presence.user?.username}) to the presence queue`); - this.presenceQueue.push(presence); - MetricPeg.get.setPresenceCount(this.presenceQueue.length); + if (presence.userID === this.bot.GetBotId()) { + return; } + + // Delete stale presence + const indexOfPresence = this.presenceQueue.findIndex((u) => u.userID === presence.userID); + if (indexOfPresence !== -1) { + this.presenceQueue.splice(indexOfPresence, 1); + } + log.verbose(`Adding ${presence.userID} (${presence.user?.username}) to the presence queue`); + this.presenceQueue.push(presence); + MetricPeg.get.setPresenceCount(this.presenceQueue.length); } public DequeueUser(user: User) { @@ -86,6 +93,7 @@ export class PresenceHandler { public async ProcessUser(presence: Presence): Promise<boolean> { if (!presence.user) { + console.log("No user in presence!"); return true; } const status = this.getUserPresence(presence); @@ -110,8 +118,8 @@ export class PresenceHandler { const status = new PresenceHandlerStatus(); // How do we show multiple activities? - if (presence.activities[0]) { - const activity = presence.activities[0]; + const activity = presence.activities[0]; + if (activity) { const type = activity.type[0] + activity.type.substring(1).toLowerCase(); // STREAMING -> Streaming; status.StatusMsg = `${type} ${activity.name}`; if (activity.url) { @@ -123,7 +131,7 @@ export class PresenceHandler { status.Presence = "online"; } else if (presence.status === "dnd") { status.Presence = "online"; - status.StatusMsg = status.StatusMsg ? "Do not disturb | " + status.StatusMsg : "Do not disturb"; + status.StatusMsg = status.StatusMsg ? `Do not disturb | ${status.StatusMsg}` : "Do not disturb"; } else if (presence.status === "offline") { status.Presence = "offline"; status.ShouldDrop = true; // Drop until we recieve an update. @@ -135,10 +143,6 @@ export class PresenceHandler { private async setMatrixPresence(user: User, status: PresenceHandlerStatus) { const intent = this.bot.GetIntentFromDiscordMember(user); - const statusObj: IMatrixPresence = {presence: status.Presence}; - if (status.StatusMsg) { - statusObj.status_msg = status.StatusMsg; - } try { await intent.ensureRegistered(); await intent.underlyingClient.setPresenceStatus(status.Presence, status.StatusMsg); diff --git a/src/store.ts b/src/store.ts index 9a637ee..c7574cb 100644 --- a/src/store.ts +++ b/src/store.ts @@ -69,7 +69,7 @@ export class DiscordStore implements IAppserviceStorageProvider { } const BACKUP_NAME = this.config.filename + ".backup"; - return new Promise((resolve, reject) => { + return new Promise((resolve) => { // Check to see if a backup file already exists. fs.access(BACKUP_NAME, (err) => { return resolve(err === null); @@ -103,7 +103,7 @@ export class DiscordStore implements IAppserviceStorageProvider { log.info(`Database schema version is ${version}, latest version is ${targetSchema}`); while (version < targetSchema) { version++; - const schemaClass = require(`./db/schema/v${version}.js`).Schema; + const schemaClass = require(`./db/schema/v${version}`).Schema; let schema: IDbSchema; schema = (new schemaClass() as IDbSchema); log.info(`Updating database to v${version}, "${schema.description}"`); diff --git a/test/mocks/channel.ts b/test/mocks/channel.ts index f209cc2..02a5422 100644 --- a/test/mocks/channel.ts +++ b/test/mocks/channel.ts @@ -15,7 +15,7 @@ limitations under the License. */ import {MockMember} from "./member"; -import {MockCollection} from "./collection"; +import {MockCollection, MockCollectionManager} from "./collection"; import {Permissions, PermissionResolvable, TextChannel} from "better-discord.js" import { MockGuild } from "./guild"; diff --git a/test/mocks/collection.ts b/test/mocks/collection.ts index d83bfe3..4c6cba2 100644 --- a/test/mocks/collection.ts +++ b/test/mocks/collection.ts @@ -16,9 +16,6 @@ limitations under the License. import { Collection } from "better-discord.js" -// we are a test file and thus need those -/* tslint:disable:no-unused-expression max-file-line-count no-any */ - export class MockCollection<T1, T2> extends Collection<T1, T2> { public array(): T2[] { return [...this.values()]; @@ -28,3 +25,18 @@ export class MockCollection<T1, T2> extends Collection<T1, T2> { return [...this.keys()]; } } + +export class MockCollectionManager<T1, T2> { + private innerCache = new MockCollection<T1, T2>(); + public get cache() { + return this.innerCache; + } + + public updateCache(c: MockCollection<T1, T2>) { + this.innerCache = c; + } + + public resolve(id: T1) { + return this.innerCache.get(id); + } +} diff --git a/test/mocks/discordclient.ts b/test/mocks/discordclient.ts index 44624d5..212f719 100644 --- a/test/mocks/discordclient.ts +++ b/test/mocks/discordclient.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {MockCollection} from "./collection"; +import {MockCollectionManager} from "./collection"; import {MockGuild} from "./guild"; import {MockUser} from "./user"; @@ -22,7 +22,7 @@ import {MockUser} from "./user"; /* tslint:disable:no-unused-expression max-file-line-count no-any */ export class MockDiscordClient { - public guilds = new MockCollection<string, MockGuild>(); + public guilds = new MockCollectionManager<string, MockGuild>(); public user: MockUser; private testLoggedIn: boolean = false; private testCallbacks: Map<string, (...data: any[]) => void> = new Map(); @@ -45,9 +45,9 @@ export class MockDiscordClient { type: "text", }, ]; - this.guilds.set("123", new MockGuild("MyGuild", channels)); - this.guilds.set("456", new MockGuild("My Spaces Gui", channels)); - this.guilds.set("789", new MockGuild("My Dash-Guild", channels)); + this.guilds.cache.set("123", new MockGuild("MyGuild", channels)); + this.guilds.cache.set("456", new MockGuild("My Spaces Gui", channels)); + this.guilds.cache.set("789", new MockGuild("My Dash-Guild", channels)); this.user = new MockUser("12345"); } diff --git a/test/mocks/guild.ts b/test/mocks/guild.ts index 9f1c394..5cc7ac1 100644 --- a/test/mocks/guild.ts +++ b/test/mocks/guild.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {MockCollection} from "./collection"; +import {MockCollectionManager} from "./collection"; import {MockMember} from "./member"; import {MockEmoji} from "./emoji"; import {Channel} from "better-discord.js" @@ -24,10 +24,10 @@ import {MockRole} from "./role"; /* tslint:disable:no-unused-expression max-file-line-count no-any */ export class MockGuild { - public channels = new MockCollection<string, Channel>(); - public members = new MockCollection<string, MockMember>(); - public emojis = new MockCollection<string, MockEmoji>(); - public roles = new MockCollection<string, MockRole>(); + public channels = new MockCollectionManager<string, Channel>(); + public members = new MockCollectionManager<string, MockMember>(); + public emojis = new MockCollectionManager<string, MockEmoji>(); + public roles = new MockCollectionManager<string, MockRole>(); public id: string; public name: string; public icon: string; @@ -35,7 +35,7 @@ export class MockGuild { this.id = id; this.name = name || id; channels.forEach((item) => { - this.channels.set(item.id, item); + this.channels.cache.set(item.id, item); }); } @@ -48,13 +48,13 @@ export class MockGuild { } public async fetchMember(id: string): Promise<MockMember|Error> { - if (this.members.has(id)) { - return this.members.get(id)!; + if (this.members.cache.has(id)) { + return this.members.cache.get(id)!; } throw new Error("Member not in this guild"); } public _mockAddMember(member: MockMember) { - this.members.set(member.id, member); + this.members.cache.set(member.id, member); } } diff --git a/test/mocks/member.ts b/test/mocks/member.ts index 8e9c06c..3083a0d 100644 --- a/test/mocks/member.ts +++ b/test/mocks/member.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {MockCollection} from "./collection"; +import {MockCollectionManager} from "./collection"; import {MockUser} from "./user"; import {MockRole} from "./role"; import * as Discord from "better-discord.js" @@ -27,7 +27,7 @@ export class MockMember { public presence: Discord.Presence; public user: MockUser; public nickname: string; - public roles = new MockCollection<string, MockRole>(); + public roles = new MockCollectionManager<string, MockRole>(); constructor(id: string, username: string, public guild: any = null, public displayName: string = username) { this.id = id; this.presence = new Discord.Presence({} as any, { diff --git a/test/mocks/presence.ts b/test/mocks/presence.ts new file mode 100644 index 0000000..5759e9e --- /dev/null +++ b/test/mocks/presence.ts @@ -0,0 +1,16 @@ +import { Presence } from "better-discord.js"; +import { MockUser } from "./user"; + +export class MockPresence { + constructor(public internalUser: MockUser, guild: string, public status?: string, public activities: any = []) { + + } + + public get user() { + return this.internalUser; + } + + public get userID() { + return this.internalUser.id; + } +} \ No newline at end of file diff --git a/test/mocks/user.ts b/test/mocks/user.ts index 83c6f1f..e816697 100644 --- a/test/mocks/user.ts +++ b/test/mocks/user.ts @@ -25,11 +25,15 @@ export class MockUser { public id: string, public username: string = "", public discriminator: string = "", - public avatarURL: string | null = "", + public avatarUrl: string | null = "", public avatar: string | null = "", public bot: boolean = false, ) { } + public avatarURL() { + return this.avatarUrl; + } + public MockSetPresence(presence: Presence) { this.presence = presence; } diff --git a/test/test_discordbot.ts b/test/test_discordbot.ts index f2d21ad..d04f5f2 100644 --- a/test/test_discordbot.ts +++ b/test/test_discordbot.ts @@ -16,7 +16,6 @@ limitations under the License. import { expect } from "chai"; import * as Proxyquire from "proxyquire"; -import * as Discord from "better-discord.js" import { MockGuild } from "./mocks/guild"; import { MockMember } from "./mocks/member"; diff --git a/test/test_discordmessageprocessor.ts b/test/test_discordmessageprocessor.ts index b6e793a..8af31e2 100644 --- a/test/test_discordmessageprocessor.ts +++ b/test/test_discordmessageprocessor.ts @@ -185,7 +185,7 @@ describe("DiscordMessageProcessor", () => { "localhost", bot as DiscordBot); const guild: any = new MockGuild("123", []); const channel = new MockTextChannel(guild, {id: "456", name: "TestChannel"}); - guild.channels.set("456", channel); + guild.channels.cache.set("456", channel); const msg = new MockMessage(channel) as any; msg.embeds = []; msg.content = "Hello <:hello:3333333>"; @@ -201,7 +201,7 @@ describe("DiscordMessageProcessor", () => { "localhost", bot as DiscordBot); const guild: any = new MockGuild("123", []); const channel = new MockTextChannel(guild, {id: "456", name: "TestChannel"}); - guild.channels.set("456", channel); + guild.channels.cache.set("456", channel); const msg = new MockMessage(channel) as any; msg.embeds = []; msg.content = "Hello <#3333333>"; @@ -214,7 +214,7 @@ describe("DiscordMessageProcessor", () => { "localhost", bot as DiscordBot); const guild: any = new MockGuild("123", []); const channel = new MockTextChannel(guild, {id: "456", name: "TestChannel"}); - guild.channels.set("456", channel); + guild.channels.cache.set("456", channel); const msg = new MockMessage(channel) as any; msg.embeds = []; msg.content = "Hello <#456>"; @@ -228,7 +228,7 @@ describe("DiscordMessageProcessor", () => { "localhost", bot as DiscordBot); const guild: any = new MockGuild("123", []); const channel = new MockTextChannel(guild, {id: "678", name: "TestChannel"}); - guild.channels.set("678", channel); + guild.channels.cache.set("678", channel); const msg = new MockMessage(channel) as any; msg.embeds = []; msg.content = "Hello <#678>"; diff --git a/test/test_matrixmessageprocessor.ts b/test/test_matrixmessageprocessor.ts index 3b9b295..0c5e2b2 100644 --- a/test/test_matrixmessageprocessor.ts +++ b/test/test_matrixmessageprocessor.ts @@ -160,7 +160,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const member = new MockMember("12345", "TestUsername", guild); - guild.members.set("12345", member); + guild.members.cache.set("12345", member); const msg = getHtmlMessage("<a href=\"https://matrix.to/#/@_discord_12345:localhost\">TestUsername</a>"); const result = await mp.FormatMessage(msg, guild as any); expect(result).is.equal("<@12345>"); @@ -169,7 +169,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const member = new MockMember("12345", "TestUsername", guild); - guild.members.set("12345", member); + guild.members.cache.set("12345", member); const msg = getHtmlMessage("<a href=\"https://matrix.to/#/@_discord_789:localhost\">TestUsername</a>"); const result = await mp.FormatMessage(msg, guild as any); expect(result).is.equal("[TestUsername](https://matrix.to/#/@_discord_789:localhost)"); @@ -178,7 +178,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const channel = new MockChannel("12345", guild, "text", "SomeChannel"); - guild.channels.set("12345", channel as any); + guild.channels.cache.set("12345", channel as any); const msg = getHtmlMessage("<a href=\"https://matrix.to/#/#_discord_1234_12345:" + "localhost\">#SomeChannel</a>"); const result = await mp.FormatMessage(msg, guild as any); @@ -188,7 +188,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const channel = new MockChannel("12345", guild, "text", "SomeChannel"); - guild.channels.set("12345", channel as any); + guild.channels.cache.set("12345", channel as any); const msg = getHtmlMessage("<a href=\"https://matrix.to/#/#_discord_1234_789:localhost\">#SomeChannel</a>"); const result = await mp.FormatMessage(msg, guild as any); expect(result).is.equal("[#SomeChannel](https://matrix.to/#/#_discord_1234_789:localhost)"); @@ -250,7 +250,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const emoji = new MockEmoji("123456", "test_emoji"); - guild.emojis.set("123456", emoji); + guild.emojis.cache.set("123456", emoji); const msg = getHtmlMessage("<img alt=\"test_emoji\">"); const result = await mp.FormatMessage(msg, guild as any); expect(result).is.equal("<:test_emoji:123456>"); @@ -259,7 +259,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const emoji = new MockEmoji("123456", "test_emoji"); - guild.emojis.set("123456", emoji); + guild.emojis.cache.set("123456", emoji); const msg = getHtmlMessage("<img src=\"mxc://real_emote:localhost\">"); const result = await mp.FormatMessage(msg, guild as any); expect(result).is.equal("<:test_emoji:123456>"); @@ -268,7 +268,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const emoji = new MockEmoji("123456", "test_emoji"); - guild.emojis.set("123456", emoji); + guild.emojis.cache.set("123456", emoji); const msg = getHtmlMessage("<img alt=\"yay\" src=\"mxc://unreal_emote:localhost\">"); const result = await mp.FormatMessage(msg, guild as any); expect(result).is.equal("[yay mxc://unreal_emote:localhost ]"); @@ -277,7 +277,7 @@ describe("MatrixMessageProcessor", () => { const mp = new MatrixMessageProcessor(bot, config); const guild = new MockGuild("1234"); const emoji = new MockEmoji("123456", "test_emoji"); - guild.emojis.set("123456", emoji); + guild.emojis.cache.set("123456", emoji); const msg = getHtmlMessage("<img>"); const result = await mp.FormatMessage(msg, guild as any); expect(result).is.equal(""); diff --git a/test/test_matrixroomhandler.ts b/test/test_matrixroomhandler.ts index bcb884d..5a25d01 100644 --- a/test/test_matrixroomhandler.ts +++ b/test/test_matrixroomhandler.ts @@ -70,7 +70,7 @@ function createRH(opts: any = {}) { chan.members.set("54321", new MockMember("54321", "testuser2")); chan.members.set("bot12345", new MockMember("bot12345", "botuser")); } - guild.members = chan.members; + guild.members.updateCache(chan.members); return chan; } else { throw new Error("Roomid not found"); diff --git a/test/test_presencehandler.ts b/test/test_presencehandler.ts index f11bae3..2282bec 100644 --- a/test/test_presencehandler.ts +++ b/test/test_presencehandler.ts @@ -21,6 +21,7 @@ import { PresenceHandler } from "../src/presencehandler"; import { DiscordBot } from "../src/bot"; import { MockUser } from "./mocks/user"; import { AppserviceMock } from "./mocks/appservicemock"; +import { MockPresence } from "./mocks/presence"; // we are a test file and thus need those /* tslint:disable:no-unused-expression max-file-line-count no-any */ @@ -40,7 +41,7 @@ const bot: any = { describe("PresenceHandler", () => { describe("init", () => { it("constructor", () => { - const handler = new PresenceHandler(bot as DiscordBot); + new PresenceHandler(bot as DiscordBot); }); }); describe("Stop", () => { @@ -54,19 +55,19 @@ describe("PresenceHandler", () => { it("adds a user properly", () => { const handler = new PresenceHandler(bot as DiscordBot); const COUNT = 2; - handler.EnqueueUser(new MockUser("abc", "def") as any); - handler.EnqueueUser(new MockUser("123", "ghi") as any); + handler.EnqueueUser(new MockPresence(new MockUser("abc", "alice"), "def") as any); + handler.EnqueueUser(new MockPresence(new MockUser("123", "bob"), "ghi") as any); expect(handler.QueueCount).to.be.equal(COUNT); }); it("does not add duplicate users", () => { const handler = new PresenceHandler(bot as DiscordBot); - handler.EnqueueUser(new MockUser("abc", "def") as any); - handler.EnqueueUser(new MockUser("abc", "def") as any); + handler.EnqueueUser(new MockPresence(new MockUser("123", "alice"), "def") as any); + handler.EnqueueUser(new MockPresence(new MockUser("123", "alice"), "def") as any); expect(handler.QueueCount).to.be.equal(1); }); it("does not add the bot user", () => { const handler = new PresenceHandler(bot as DiscordBot); - handler.EnqueueUser(new MockUser("1234", "def") as any); + handler.EnqueueUser(new MockPresence(new MockUser("1234", "bob"), "ghi") as any); expect(handler.QueueCount).to.be.equal(0); }); }); @@ -74,19 +75,19 @@ describe("PresenceHandler", () => { it("removes users properly", () => { const handler = new PresenceHandler(bot as DiscordBot); const members = [ - new MockUser("abc", "def") as any, - new MockUser("def", "ghi") as any, - new MockUser("ghi", "wew") as any, + new MockPresence(new MockUser("abc", "alice"), "def") as any, + new MockPresence(new MockUser("def", "bob"), "ghi") as any, + new MockPresence(new MockUser("ghi", "foo"), "wew") as any, ]; handler.EnqueueUser(members[0]); handler.EnqueueUser(members[1]); - handler.EnqueueUser(members[members.length - 1]); + handler.EnqueueUser(members[2]); - handler.DequeueUser(members[members.length - 1]); + handler.DequeueUser(members[2].user); expect(handler.QueueCount).to.be.equal(members.length - 1); - handler.DequeueUser(members[1]); + handler.DequeueUser(members[1].user); expect(handler.QueueCount).to.be.equal(1); - handler.DequeueUser(members[0]); + handler.DequeueUser(members[0].user); expect(handler.QueueCount).to.be.equal(0); }); }); @@ -94,78 +95,49 @@ describe("PresenceHandler", () => { it("processes an online user", async () => { lastStatus = null; const handler = new PresenceHandler(bot as DiscordBot); - const member = new MockUser("abc", "def") as any; - member.MockSetPresence(new Discord.Presence({} as any, { - status: "online", - user: member, - })); - await handler.ProcessUser(member); - appservice.getIntentForSuffix(member.id) + const member = new MockPresence(new MockUser("ghi", "alice"), "def", "online"); + await handler.ProcessUser(member as any); + appservice.getIntentForSuffix(member.userID) .underlyingClient.wasCalled("setPresenceStatus", true, "online", undefined); }); it("processes an offline user", async () => { lastStatus = null; const handler = new PresenceHandler(bot as DiscordBot); - const member = new MockUser("abc", "def") as any; - member.MockSetPresence(new Discord.Presence({} as any, { - status: "offline", - user: member, - })); - await handler.ProcessUser(member); - appservice.getIntentForSuffix(member.id) + const member = new MockPresence(new MockUser("abc", "alice"), "def", "offline"); + await handler.ProcessUser(member as any); + appservice.getIntentForSuffix(member.userID) .underlyingClient.wasCalled("setPresenceStatus", true, "offline", undefined); }); it("processes an idle user", async () => { lastStatus = null; const handler = new PresenceHandler(bot as DiscordBot); - const member = new MockUser("abc", "def") as any; - member.MockSetPresence(new Discord.Presence({} as any, { - status: "idle", - user: member, - })); - await handler.ProcessUser(member); - appservice.getIntentForSuffix(member.id) + const member = new MockPresence(new MockUser("abc", "alice"), "def", "idle"); + await handler.ProcessUser(member as any); + appservice.getIntentForSuffix(member.userID) .underlyingClient.wasCalled("setPresenceStatus", true, "unavailable", undefined); }); it("processes an dnd user", async () => { lastStatus = null; const handler = new PresenceHandler(bot as DiscordBot); - const member = new MockUser("abc", "def") as any; - member.MockSetPresence(new Discord.Presence({} as any, { - status: "dnd", - user: member, - })); - await handler.ProcessUser(member); - appservice.getIntentForSuffix(member.id) + const member = new MockPresence(new MockUser("abc", "alice"), "def", "dnd"); + await handler.ProcessUser(member as any); + appservice.getIntentForSuffix(member.userID) .underlyingClient.wasCalled("setPresenceStatus", true, "online", "Do not disturb"); - member.MockSetPresence(new Discord.Presence({} as any, { - activities: ({name: "Test Game", type: 'PLAYING'}), - status: "dnd", - user: member, - })); - await handler.ProcessUser(member); - appservice.getIntentForSuffix(member.id) + const member2 = new MockPresence(new MockUser("abc", "alice"), "def", "dnd", [{name: "Test Game", type: 'PLAYING'}]); + await handler.ProcessUser(member2 as any); + appservice.getIntentForSuffix(member.userID) .underlyingClient.wasCalled("setPresenceStatus", true, "online", "Do not disturb | Playing Test Game"); }); it("processes a user playing games", async () => { lastStatus = null; const handler = new PresenceHandler(bot as DiscordBot); - const member = new MockUser("abc", "def") as any; - member.MockSetPresence(new Discord.Presence({} as any, { - activities: ({name: "Test Game", type: 'PLAYING'}), - status: "online", - user: member, - })); - await handler.ProcessUser(member); - appservice.getIntentForSuffix(member.id) + const member = new MockPresence(new MockUser("abc", "alice"), "def", "online", [{name: "Test Game", type: 'PLAYING'}]); + await handler.ProcessUser(member as any); + appservice.getIntentForSuffix(member.userID) .underlyingClient.wasCalled("setPresenceStatus", true, "online", "Playing Test Game"); - member.MockSetPresence(new Discord.Presence({} as any, { - activities: ({name: "Test Game", type: 'STREAMING'}), - status: "online", - user: member, - })); - await handler.ProcessUser(member); - appservice.getIntentForSuffix(member.id) + const member2 = new MockPresence(new MockUser("abc", "alice"), "def", "online", [{name: "Test Game", type: 'STREAMING'}]); + await handler.ProcessUser(member2 as any); + appservice.getIntentForSuffix(member.userID) .underlyingClient.wasCalled("setPresenceStatus", true, "online", "Streaming Test Game"); }); }); diff --git a/test/test_usersyncroniser.ts b/test/test_usersyncroniser.ts index 1afbfb9..b1813df 100644 --- a/test/test_usersyncroniser.ts +++ b/test/test_usersyncroniser.ts @@ -59,9 +59,9 @@ function CreateUserSync(remoteUsers: RemoteUser[] = [], ghostConfig: any = {}) { GetChannelFromRoomId: (id) => { if (id === "!found:localhost") { const guild = new MockGuild("666666"); - guild.members.set("123456", new MockMember("123456", "fella", guild)); + guild.members.cache.set("123456", new MockMember("123456", "fella", guild)); const chan = new MockChannel("543345", guild); - guild.channels.set("543345", chan as any); + guild.channels.cache.set("543345", chan as any); return chan; } throw new Error("Channel not found"); @@ -526,7 +526,7 @@ describe("UserSyncroniser", () => { const TESTROLE_COLOR = 1337; const TESTROLE_POSITION = 42; const role = new MockRole("123", TESTROLE_NAME, TESTROLE_COLOR, TESTROLE_POSITION); - member.roles.set("123", role); + member.roles.cache.set("123", role); const state = await userSync.GetUserStateForGuildMember(member as any); expect(state.roles.length).to.be.equal(1); expect(state.roles[0].name).to.be.equal(TESTROLE_NAME); @@ -607,7 +607,7 @@ describe("UserSyncroniser", () => { "username", guild, "FiddleDee"); - newMember.roles.set("1234", role); + newMember.roles.cache.set("1234", role); await userSync.OnUpdateGuildMember(newMember as any); expect(bridge.getIntentForUserId("@_discord_123456:localhost") .underlyingClient.wasCalled("sendStateEvent")).to.equal(GUILD_ROOM_IDS_WITH_ROLE.length); -- GitLab