From f90384720415910a57ac00795c618b5952483246 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Sun, 4 May 2025 10:57:18 +0100 Subject: [PATCH] Update tests --- tests/commands/drop.test.ts | 62 ++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/tests/commands/drop.test.ts b/tests/commands/drop.test.ts index 3dc4e96..e97511c 100644 --- a/tests/commands/drop.test.ts +++ b/tests/commands/drop.test.ts @@ -9,6 +9,7 @@ import GetCardsHelper from "../../src/helpers/DropHelpers/GetCardsHelper"; import Inventory from "../../src/database/entities/app/Inventory"; import DropEmbedHelper from "../../src/helpers/DropHelpers/DropEmbedHelper"; import CardConstants from "../../src/constants/CardConstants"; +import * as uuid from "uuid"; jest.mock("../../src/database/entities/app/Config"); jest.mock("../../src/database/entities/app/User"); @@ -16,6 +17,8 @@ jest.mock("../../src/helpers/DropHelpers/GetCardsHelper"); jest.mock("../../src/database/entities/app/Inventory"); jest.mock("../../src/helpers/DropHelpers/DropEmbedHelper"); +jest.mock("uuid"); + beforeEach(() => { (Config.GetValue as jest.Mock).mockResolvedValue("false"); }); @@ -24,6 +27,12 @@ describe("execute", () => { describe("GIVEN user is in the database", () => { let interaction: CommandInteractionMock; let user: User; + let randomCard = { + card: { + id: "cardId", + path: "https://google.com/", + } + }; beforeAll(async () => { // Arrange @@ -32,26 +41,25 @@ describe("execute", () => { interaction = GenerateCommandInteractionMock(); user = { + Currency: 500, RemoveCurrency: jest.fn().mockReturnValue(true), Save: jest.fn(), } as unknown as User; (User.FetchOneById as jest.Mock).mockResolvedValue(user); - (GetCardsHelper.FetchCard as jest.Mock).mockResolvedValue({ - card: { - path: "https://google.com/", - } - }); + (GetCardsHelper.FetchCard as jest.Mock).mockResolvedValue(randomCard); (Inventory.FetchOneByCardNumberAndUserId as jest.Mock).mockResolvedValue({ Quantity: 1, }); - (DropEmbedHelper.GenerateDropEmbed as jest.Mock).mockResolvedValue({ + (DropEmbedHelper.GenerateDropEmbed as jest.Mock).mockReturnValue({ type: "Embed", }); - (DropEmbedHelper.GenerateDropButtons as jest.Mock).mockResolvedValue({ + (DropEmbedHelper.GenerateDropButtons as jest.Mock).mockReturnValue({ type: "Button", }); - + + (uuid.v4 as jest.Mock).mockReturnValue("uuid"); + // Act const drop = new Drop(); await drop.execute(interaction as unknown as CommandInteraction); @@ -67,19 +75,43 @@ describe("execute", () => { expect(user.RemoveCurrency).toHaveBeenCalledWith(CardConstants.ClaimCost); }); - test.todo("EXPECT user to be saved"); + test("EXPECT user to be saved", () => { + expect(user.Save).toHaveBeenCalledTimes(1); + expect(user.Save).toHaveBeenCalledWith(User, user); + }); - test.todo("EXPECT random card to be fetched"); + test("EXPECT random card to be fetched", () => { + expect(GetCardsHelper.FetchCard).toHaveBeenCalledTimes(1); + expect(GetCardsHelper.FetchCard).toHaveBeenCalledWith("userId"); + }); - test.todo("EXPECT interaction to be deferred"); + test("EXPECT interaction to be deferred", () => { + expect(interaction.deferReply).toHaveBeenCalledTimes(1); + }); - test.todo("EXPECT Inventory.FetchOneByCardNumberAndUserId to be called"); + test("EXPECT Inventory.FetchOneByCardNumberAndUserId to be called", () => { + expect(Inventory.FetchOneByCardNumberAndUserId).toHaveBeenCalledTimes(1); + expect(Inventory.FetchOneByCardNumberAndUserId).toHaveBeenCalledWith("userId", "cardId"); + }); - test.todo("EXPECT DropEmbedHelper.GenerateDropEmbed to be called"); + test("EXPECT DropEmbedHelper.GenerateDropEmbed to be called", () => { + expect(DropEmbedHelper.GenerateDropEmbed).toHaveBeenCalledTimes(1); + expect(DropEmbedHelper.GenerateDropEmbed).toHaveBeenCalledWith(randomCard, 1, "", undefined, 500); + }); - test.todo("EXPECT DropEmbedHelper.GenerateDropButtons to be called"); + test("EXPECT DropEmbedHelper.GenerateDropButtons to be called", () => { + expect(DropEmbedHelper.GenerateDropButtons).toHaveBeenCalledTimes(1); + expect(DropEmbedHelper.GenerateDropButtons).toHaveBeenCalledWith(randomCard, "uuid", "userId"); + }); - test.todo("EXPECT interaction to be edited"); + test("EXPECT interaction to be edited", () => { + expect(interaction.editReply).toHaveBeenCalledTimes(1); + expect(interaction.editReply).toHaveBeenCalledWith({ + embeds: [ { type: "Embed" } ], + files: [], + components: [ { type: "Button" } ], + }); + }); describe("AND randomCard path is not a url", () => { test.todo("EXPECT image read from file system");