From 5302d57a899872ad1a2e2feb9d56a0bd67c77bf4 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Mon, 2 Dec 2024 18:40:19 +0000 Subject: [PATCH] Add effects command tests --- tests/commands/effects.test.ts | 112 +++++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 6 deletions(-) diff --git a/tests/commands/effects.test.ts b/tests/commands/effects.test.ts index 0ab6eab..8819209 100644 --- a/tests/commands/effects.test.ts +++ b/tests/commands/effects.test.ts @@ -1,4 +1,5 @@ import Effects from "../../src/commands/effects"; +import EffectHelper from "../../src/helpers/EffectHelper"; describe("constructor", () => { let effects: Effects; @@ -25,7 +26,8 @@ describe("execute", () => { const effects = new Effects(); - listSpy = jest.spyOn(effects as any, "List"); + listSpy = jest.spyOn(effects as any, "List") + .mockImplementation(); await effects.execute(interaction); }); @@ -40,24 +42,122 @@ describe("execute", () => { }); describe("GIVEN subcommand is list", () => { - test.todo("EXPECT list function to be called"); + let interaction: any; + + let listSpy: any; + + beforeEach(async () => { + interaction = { + isChatInputCommand: jest.fn().mockReturnValue(true), + options: { + getSubcommand: jest.fn().mockReturnValue("list"), + }, + }; + + const effects = new Effects(); + + listSpy = jest.spyOn(effects as any, "List") + .mockImplementation(); + + await effects.execute(interaction); + }); + + test("EXPECT subcommand function to be called", () => { + expect(interaction.options.getSubcommand).toHaveBeenCalledTimes(1); + }); + + test("EXPECT list function to be called", () => { + expect(listSpy).toHaveBeenCalledTimes(1); + expect(listSpy).toHaveBeenCalledWith(interaction); + }); }); }); describe("List", () => { + let effects: Effects = new Effects(); + let interaction: any; + + const embed = { + name: "embed", + }; + + const row = { + name: "row", + }; + + beforeEach(async () => { + interaction = { + isChatInputCommand: jest.fn().mockReturnValue(true), + options: { + getSubcommand: jest.fn().mockReturnValue("list"), + }, + reply: jest.fn(), + user: { + id: "userId", + }, + }; + + const effects = new Effects(); + + EffectHelper.GenerateEffectEmbed = jest.fn().mockReturnValue({ + embed, + row, + }); + + jest.spyOn(effects as any, "List") + .mockImplementation(); + }); + describe("GIVEN page option is supplied", () => { describe("AND page is a valid number", () => { - test.todo("EXPECT EffectHelper.GenerateEffectEmbed to have been called with page"); + beforeEach(async () => { + interaction.options.get = jest.fn().mockReturnValueOnce({ + value: "2", + }); - test.todo("EXPECT interaction to have been replied"); + await effects.execute(interaction); + }); + + test("EXPECT EffectHelper.GenerateEffectEmbed to have been called with page", () => { + expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledTimes(1); + expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledWith("userId", 2); + }); + + test("EXPECT interaction to have been replied", () => { + expect(interaction.reply).toHaveBeenCalledTimes(1); + expect(interaction.reply).toHaveBeenCalledWith({ + embeds: [ embed ], + components: [ row ], + }); + }); }); describe("AND page is not a valid number", () => { - test.todo("EXPECT EffectHelper.GenerateEffectEmbed to have been called with page of 1"); + beforeEach(async () => { + interaction.options.get = jest.fn().mockReturnValueOnce({ + value: "test", + }); + + await effects.execute(interaction); + }); + + test("EXPECT EffectHelper.GenerateEffectEmbed to have been called with page of 1", () => { + expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledTimes(1); + expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledWith("userId", 1); + }); }); }); describe("GIVEN page option is not supplied", () => { - test.todo("EXPECT EffectHelper.GenerateEffectEmbed to have been called with a page of 1"); + beforeEach(async () => { + interaction.options.get = jest.fn().mockReturnValueOnce(undefined); + + await effects.execute(interaction); + }); + + test("EXPECT EffectHelper.GenerateEffectEmbed to have been called with page of 1", () => { + expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledTimes(1); + expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledWith("userId", 1); + }); }); });