diff --git a/3 b/3 deleted file mode 100644 index fe6eb2a..0000000 --- a/3 +++ /dev/null @@ -1,225 +0,0 @@ -import {ButtonInteraction} from "discord.js"; -import List from "../../../../src/buttonEvents/304276391837302787/moons/list"; -import UserSetting from "../../../../src/database/entities/UserSetting"; -import Moon from "../../../../src/database/entities/304276391837302787/Moon"; - -describe("GIVEN interaction.guild is null", () => { - const interaction = { - guild: null, - reply: jest.fn(), - update: jest.fn(), - } as unknown as ButtonInteraction; - - UserSetting.FetchOneByKey = jest.fn(); - - beforeAll(async () => { - await List(interaction); - }); - - test("EXPECT function to return", () => { - expect(interaction.reply).not.toHaveBeenCalled(); - expect(interaction.update).not.toHaveBeenCalled(); - expect(UserSetting.FetchOneByKey).not.toHaveBeenCalled(); - }); -}); - -describe("GIVEN userId parameter is undefined", () => { - const interaction = { - guild: {}, - reply: jest.fn(), - update: jest.fn(), - customId: "moons list", - } as unknown as ButtonInteraction; - - UserSetting.FetchOneByKey = jest.fn(); - - beforeAll(async () => { - await List(interaction); - }); - - test("EXPECT function to return", () => { - expect(interaction.reply).not.toHaveBeenCalled(); - expect(interaction.update).not.toHaveBeenCalled(); - expect(UserSetting.FetchOneByKey).not.toHaveBeenCalled(); - }); -}); - -describe("GIVEN page parameter is undefined", () => { - const interaction = { - guild: {}, - reply: jest.fn(), - update: jest.fn(), - customId: "moons list userId", - } as unknown as ButtonInteraction; - - UserSetting.FetchOneByKey = jest.fn(); - - beforeAll(async () => { - await List(interaction); - }); - - test("EXPECT function to return", () => { - expect(interaction.reply).not.toHaveBeenCalled(); - expect(interaction.update).not.toHaveBeenCalled(); - expect(UserSetting.FetchOneByKey).not.toHaveBeenCalled(); - }); -}); - -describe("GIVEN no moons for the user is returned", () => { - const interaction = { - guild: { - members: { - cache: { - find: jest.fn().mockReturnValue({ - user: { - username: "username", - }, - }), - }, - }, - }, - reply: jest.fn(), - update: jest.fn(), - customId: "moons list userId 0", - } as unknown as ButtonInteraction; - - UserSetting.FetchOneByKey = jest.fn(); - Moon.FetchPaginatedMoonsByUserId = jest.fn().mockResolvedValue(undefined) - - beforeAll(async () => { - await List(interaction); - }); - - test("EXPECT moons function to be called", () => { - expect(Moon.FetchPaginatedMoonsByUserId).toHaveBeenCalledTimes(1); - }); - - test("EXPECT error replied", () => { - expect(interaction.reply).toHaveBeenCalledTimes(1); - expect(interaction.reply).toHaveBeenCalledWith("username does not have any moons or page is invalid."); - }); - - describe("GIVEN member is not in cache", () => { - const interaction = { - guild: { - members: { - cache: { - find: jest.fn().mockReturnValue(undefined), - }, - fetch: jest.fn().mockResolvedValue({ - user: { - username: "username", - }, - }), - }, - }, - reply: jest.fn(), - update: jest.fn(), - customId: "moons list userId 0", - } as unknown as ButtonInteraction; - - UserSetting.FetchOneByKey = jest.fn(); - Moon.FetchPaginatedMoonsByUserId = jest.fn().mockResolvedValue(undefined) - - beforeAll(async () => { - await List(interaction); - }); - - test("EXPECT API to be called", () => { - expect(interaction.guild?.members.fetch).toHaveBeenCalledTimes(1); - expect(interaction.guild?.members.fetch).toHaveBeenCalledWith("userId"); - }); - - test("EXPECT error replied with username", () => { - expect(interaction.reply).toHaveBeenCalledTimes(1); - expect(interaction.reply).toHaveBeenCalledWith("username does not have any moons or page is invalid."); - }); - }); - - describe("GIVEN member can not be found", () => { - const interaction = { - guild: { - members: { - cache: { - find: jest.fn().mockReturnValue(undefined), - }, - fetch: jest.fn().mockResolvedValue(undefined), - }, - }, - reply: jest.fn(), - update: jest.fn(), - customId: "moons list userId 0", - } as unknown as ButtonInteraction; - - UserSetting.FetchOneByKey = jest.fn(); - Moon.FetchPaginatedMoonsByUserId = jest.fn().mockResolvedValue(undefined) - - beforeAll(async () => { - await List(interaction); - }); - - test("EXPECT API to be called", () => { - expect(interaction.guild?.members.fetch).toHaveBeenCalledTimes(1); - expect(interaction.guild?.members.fetch).toHaveBeenCalledWith("userId"); - }); - - test("EXPECT error replied with username", () => { - expect(interaction.reply).toHaveBeenCalledTimes(1); - expect(interaction.reply).toHaveBeenCalledWith("This user does not have any moons or page is invalid."); - }); - }); -}); - -describe("GIVEN no moons on current page", () => { - const interaction = { - guild: { - members: { - cache: { - find: jest.fn().mockReturnValue({ - user: { - username: "username", - }, - }), - }, - }, - }, - reply: jest.fn(), - update: jest.fn(), - customId: "moons list userId 0", - } as unknown as ButtonInteraction; - - UserSetting.FetchOneByKey = jest.fn(); - Moon.FetchPaginatedMoonsByUserId = jest.fn().mockResolvedValue([ - [], - 0, - ]); - - beforeAll(async () => { - await List(interaction); - }); - test.todo("EXPECT description to say so"); -}); - -describe("GIVEN happy flow", () => { - test.todo("EXPECT moons to be fetched"); - - test.todo("EXPECT embed to be updated"); - - test.todo("EXPECT row to be updated"); - - describe("GIVEN it is the first page", () => { - test.todo("EXPECT Previous button to be disabled"); - }); - - describe("GIVEN it is the last page", () => { - test.todo("EXPECT Next button to be disabled"); - - describe("GIVEN there are more moons in the counter than in the database", () => { - test.todo("EXPECT untracked counter to be present"); - }); - }); - - describe("GIVEN no moons on the current page", () => { - test.todo("EXPECT Next button to be disabled"); - }); -}); \ No newline at end of file diff --git a/tests/commands/304276391837302787/moons/add.test.ts b/tests/commands/304276391837302787/moons/add.test.ts index cf31842..a66eab3 100644 --- a/tests/commands/304276391837302787/moons/add.test.ts +++ b/tests/commands/304276391837302787/moons/add.test.ts @@ -80,17 +80,115 @@ describe("GIVEN happy flow", () => { }); describe("GIVEN description is null", () => { - test.todo("EXPECT error replied"); + const interaction = { + reply: jest.fn(), + options: { + get: jest.fn().mockReturnValue({ + value: null, + }), + }, + } as unknown as CommandInteraction; + + beforeEach(async () => { + await AddMoon(interaction); + }); + + test("EXPECT error replied", () => { + expect(interaction.reply).toHaveBeenCalledTimes(1); + expect(interaction.reply).toHaveBeenCalledWith("Name must be less than 255 characters!"); + }); }); describe("GIVEN description is greater than 255 characters", () => { - test.todo("EXPECT error replied"); + const optionGet = jest.fn(); + + const interaction = { + reply: jest.fn(), + options: { + get: optionGet, + }, + } as unknown as CommandInteraction; + + beforeEach(async () => { + let longString = ""; + + for (let i = 0; i < 30; i++) { + longString += "1234567890"; + } + + optionGet.mockReturnValue({ + value: longString, + }); + + await AddMoon(interaction); + }); + + test("EXPECT error replied", () => { + expect(interaction.reply).toHaveBeenCalledTimes(1); + expect(interaction.reply).toHaveBeenCalledWith("Name must be less than 255 characters!"); + }); }); describe("GIVEN moon count setting exists", () => { - test.todo("EXPECT existing entity to be updated"); + const moonSetting = { + Value: "1", + UpdateValue: jest.fn(), + Save: jest.fn(), + }; + + const interaction = { + reply: jest.fn(), + options: { + get: jest.fn().mockReturnValue({ + value: "Test Description", + }), + }, + user: { + id: "userId", + }, + } as unknown as CommandInteraction; + + beforeEach(async () => { + UserSetting.FetchOneByKey = jest.fn().mockResolvedValue(moonSetting); + + await AddMoon(interaction); + }); + + test("EXPECT existing entity to be updated", () => { + expect(moonSetting.UpdateValue).toHaveBeenCalledTimes(1); + expect(moonSetting.UpdateValue).toHaveBeenCalledWith("2"); + }); }); describe("GIVEN moon count setting does not exist", () => { - test.todo("EXPECT new entity to be created"); + let savedSetting: UserSetting | undefined; + + const interaction = { + reply: jest.fn(), + options: { + get: jest.fn().mockReturnValue({ + value: "Test Description", + }), + }, + user: { + id: "userId", + }, + } as unknown as CommandInteraction; + + beforeEach(async () => { + UserSetting.FetchOneByKey = jest.fn().mockResolvedValue(null); + UserSetting.prototype.Save = jest.fn().mockImplementation((_, setting: UserSetting) => { + savedSetting = setting; + }); + + await AddMoon(interaction); + }); + + test("EXPECT new entity to be created", () => { + // Expect the entity to have the new entity. + // Probably the best way we can really imply a new entity + // that I can think of + expect(savedSetting).toBeDefined(); + expect(savedSetting?.Value).toBe("1"); + }); }); \ No newline at end of file