diff --git a/src/commands/rules.ts b/src/commands/rules.ts index 8578405..c41f381 100644 --- a/src/commands/rules.ts +++ b/src/commands/rules.ts @@ -1,5 +1,6 @@ import { existsSync, readFileSync } from "fs"; import { ICommandContext } from "../contracts/ICommandContext"; +import ICommandReturnContext from "../contracts/ICommandReturnContext"; import ErrorEmbed from "../helpers/embeds/ErrorEmbed"; import PublicEmbed from "../helpers/embeds/PublicEmbed"; import { Command } from "../type/command"; @@ -21,11 +22,15 @@ export default class Rules extends Command { ]; } - public override execute(context: ICommandContext) { - if (!existsSync(process.env.COMMANDS_RULES_FILE!)) { + public override execute(context: ICommandContext): ICommandReturnContext { + if (!existsSync(`${process.cwd()}/${process.env.COMMANDS_RULES_FILE!}`)) { const errorEmbed = new ErrorEmbed(context, "Rules file doesn't exist"); errorEmbed.SendToCurrentChannel(); - return; + + return { + commandContext: context, + embeds: [errorEmbed] + }; } const rulesFile = readFileSync(`${process.cwd()}/${process.env.COMMANDS_RULES_FILE}`).toString(); @@ -43,5 +48,10 @@ export default class Rules extends Command { }); embeds.forEach(x => x.SendToCurrentChannel()); + + return { + commandContext: context, + embeds: embeds + }; } } \ No newline at end of file diff --git a/tests/_mocks/rules/rules.json b/tests/_mocks/rules/rules.json new file mode 100644 index 0000000..bcc28b9 --- /dev/null +++ b/tests/_mocks/rules/rules.json @@ -0,0 +1,13 @@ +[ + { + "image": "IMAGEURL" + }, + { + "title": "TITLE 1", + "description": [ + "DESCRIPTION 1A", + "DESCRIPTION 1B" + ], + "footer": "FOOTER 1" + } +] \ No newline at end of file diff --git a/tests/commands/rules.test.ts b/tests/commands/rules.test.ts new file mode 100644 index 0000000..4c390a5 --- /dev/null +++ b/tests/commands/rules.test.ts @@ -0,0 +1,106 @@ +import { Message } from "discord.js"; +import Rules from "../../src/commands/rules"; +import { ICommandContext } from "../../src/contracts/ICommandContext"; + +const oldCwd = process.cwd(); + +beforeEach(() => { + process.env = {}; +}); + +describe('Constructor', () => { + test('Expect properties to be set', () => { + process.env = { + ROLES_MODERATOR: "Moderator" + }; + + const rules = new Rules(); + + expect(rules._category).toBe("Admin"); + expect(rules._roles.length).toBe(1); + expect(rules._roles[0]).toBe("Moderator"); + }); +}); + +describe('Execute', () => { + test('Given rules exist, expect rules to be sent to current channel', () => { + process.env = { + COMMANDS_RULES_FILE: 'rules/rules.json' + }; + + process.cwd = jest.fn() + .mockReturnValue(`${oldCwd}/tests/_mocks`); + + const messageChannelSend = jest.fn(); + + const message = { + channel: { + send: messageChannelSend + } + } as unknown as Message; + + const context: ICommandContext = { + name: 'rules', + args: [], + message: message + }; + + const rules = new Rules(); + + const result = rules.execute(context); + + expect(messageChannelSend).toBeCalledTimes(2); + expect(result.embeds.length).toBe(2); + + // Header Embed + const embedHeader = result.embeds[0]; + + expect(embedHeader.title).toBe(""); + expect(embedHeader.description).toBe(""); + expect(embedHeader.image?.url).toBe("IMAGEURL"); + expect(embedHeader.footer?.text).toBe(""); + + // Main Embed + const embedMain = result.embeds[1]; + + expect(embedMain.title).toBe("TITLE 1"); + expect(embedMain.description).toBe("DESCRIPTION 1A\nDESCRIPTION 1B"); + expect(embedMain.image?.url).toBe(""); + expect(embedMain.footer?.text).toBe("FOOTER 1"); + }); + + test('Given rules file does not exist, expect does not exist error', () => { + process.env = { + COMMANDS_RULES_FILE: 'rules/none.json' + }; + + process.cwd = jest.fn() + .mockReturnValue(`${oldCwd}/tests/_mocks`); + + const messageChannelSend = jest.fn(); + + const message = { + channel: { + send: messageChannelSend + } + } as unknown as Message; + + const context: ICommandContext = { + name: 'rules', + args: [], + message: message + }; + + const rules = new Rules(); + + const result = rules.execute(context); + + expect(messageChannelSend).toBeCalledTimes(1); + expect(result.embeds.length).toBe(1); + + // Error Embed + const errorEmbed = result.embeds[0]; + + expect(errorEmbed.description).toBe("Rules file doesn't exist"); + }); +}); \ No newline at end of file