From 897bb896550a37a7d78db15548123c7e95b05594 Mon Sep 17 00:00:00 2001 From: Ting Chien Meng Date: Fri, 14 Feb 2025 17:23:25 +0800 Subject: [PATCH 1/2] enhance test --- .../plugin-discord/__tests__/message.test.ts | 8 +-- .../plugin-discord/__tests__/util.test.ts | 53 +++++++++++++++++++ packages/plugin-discord/src/test-suite.ts | 12 +++-- 3 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 packages/plugin-discord/__tests__/util.test.ts diff --git a/packages/plugin-discord/__tests__/message.test.ts b/packages/plugin-discord/__tests__/message.test.ts index b2b498b70de..fc62b1a6cb6 100644 --- a/packages/plugin-discord/__tests__/message.test.ts +++ b/packages/plugin-discord/__tests__/message.test.ts @@ -125,7 +125,7 @@ describe("Discord MessageManager", () => { }); it("should initialize MessageManager", () => { - expect(messageManager).toBeDefined(); + expect(messageManager).toBeInstanceOf(MessageManager); }); it("should process user messages", async () => { @@ -179,7 +179,7 @@ describe("Discord MessageManager", () => { Promise.resolve({ processedContent: "", attachments: [] }) ); - const myVariable = new Collection([ + const mockAttachments = new Collection([ [ "mock-attachment-id", { @@ -190,7 +190,7 @@ describe("Discord MessageManager", () => { ], ]); - mockMessage.attachments = myVariable; + mockMessage.attachments = mockAttachments; const processAttachmentsMock = vi.fn().mockResolvedValue([]); @@ -206,6 +206,6 @@ describe("Discord MessageManager", () => { await messageManager.handleMessage(mockMessage); - expect(processAttachmentsMock).toHaveBeenCalled(); + expect(processAttachmentsMock).toHaveBeenCalledWith(mockAttachments); }); }); diff --git a/packages/plugin-discord/__tests__/util.test.ts b/packages/plugin-discord/__tests__/util.test.ts new file mode 100644 index 00000000000..caf342021f8 --- /dev/null +++ b/packages/plugin-discord/__tests__/util.test.ts @@ -0,0 +1,53 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import { + getWavHeader, + generateSummary, + sendMessageInChunks, + canSendMessage +} from "../src/utils.ts"; +import { ChannelType, PermissionsBitField, Client, TextChannel, ThreadChannel } from "discord.js"; + +// Mock runtime for generateSummary +const mockRuntime = { + getService: vi.fn(), +}; + + +vi.mock("@elizaos/core", () => ({ + trimTokens: vi.fn((text) => Promise.resolve(text)), + parseJSONObjectFromText: vi.fn((text) => JSON.parse(text)), + ModelClass: { TEXT_SMALL: "TEXT_SMALL" }, + logger: { + error: vi.fn(), + }, +})); + +describe("Utility Functions", () => { + describe("getWavHeader", () => { + it("should generate a valid WAV header", () => { + const header = getWavHeader(1000, 44100, 2, 16); + expect(header).toBeInstanceOf(Buffer); + expect(header.length).toBe(44); + expect(header.toString("utf8", 0, 4)).toBe("RIFF"); + expect(header.toString("utf8", 8, 12)).toBe("WAVE"); + }); + }); + + + describe("sendMessageInChunks", () => { + let mockChannel; + beforeEach(() => { + mockChannel = { + send: vi.fn().mockResolvedValue({ id: "message-id" }), + } as unknown as TextChannel; + }); + + it("should split and send messages in chunks", async () => { + const longMessage = "A".repeat(4000); + const messages = await sendMessageInChunks(mockChannel, longMessage, "reply-id", []); + + expect(messages.length).toBeGreaterThan(1); + expect(mockChannel.send).toHaveBeenCalledTimes(messages.length); + }); + }); +}); diff --git a/packages/plugin-discord/src/test-suite.ts b/packages/plugin-discord/src/test-suite.ts index fe4e404fe64..57b12c28f3a 100644 --- a/packages/plugin-discord/src/test-suite.ts +++ b/packages/plugin-discord/src/test-suite.ts @@ -35,7 +35,7 @@ export class DiscordTestSuite implements TestSuite { fn: this.testTextToSpeechPlayback.bind(this), }, { - name: "test sending message", + name: "test sending message with files", fn: this.testSendingTextMessage.bind(this), }, { @@ -193,7 +193,11 @@ export class DiscordTestSuite implements TestSuite { const channel = await this.getTextChannel(); if (!channel) return; - await this.sendMessageToChannel(channel, "Testing sending message"); + await this.sendMessageToChannel( + channel, + "Testing Message", + ["https://github.com/elizaOS/awesome-eliza/blob/main/assets/eliza-logo.jpg"] + ); } catch (error) { logger.error("Error in sending text message:", error); } @@ -271,7 +275,7 @@ export class DiscordTestSuite implements TestSuite { } - async sendMessageToChannel(channel: TextChannel, messageContent: string) { + async sendMessageToChannel(channel: TextChannel, messageContent: string, files: any[]) { try { if (!channel || !channel.isTextBased()) { logger.error("Channel is not a text-based channel or does not exist."); @@ -282,7 +286,7 @@ export class DiscordTestSuite implements TestSuite { channel as TextChannel, messageContent, null, - null + files ); } catch (error) { logger.error("Error sending message:", error); From 0dc5cbfce700d272a7f657003574ba9e1c62268b Mon Sep 17 00:00:00 2001 From: Ting Chien Meng Date: Fri, 14 Feb 2025 17:24:50 +0800 Subject: [PATCH 2/2] clean code --- packages/plugin-discord/__tests__/util.test.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/plugin-discord/__tests__/util.test.ts b/packages/plugin-discord/__tests__/util.test.ts index caf342021f8..9c3f5f16d5e 100644 --- a/packages/plugin-discord/__tests__/util.test.ts +++ b/packages/plugin-discord/__tests__/util.test.ts @@ -1,17 +1,9 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; import { getWavHeader, - generateSummary, sendMessageInChunks, - canSendMessage } from "../src/utils.ts"; -import { ChannelType, PermissionsBitField, Client, TextChannel, ThreadChannel } from "discord.js"; - -// Mock runtime for generateSummary -const mockRuntime = { - getService: vi.fn(), -}; - +import { TextChannel } from "discord.js"; vi.mock("@elizaos/core", () => ({ trimTokens: vi.fn((text) => Promise.resolve(text)),