diff --git a/.forgejo/workflows/production.yml b/.forgejo/workflows/production.yml index 9d8422f..0c28974 100644 --- a/.forgejo/workflows/production.yml +++ b/.forgejo/workflows/production.yml @@ -22,7 +22,7 @@ jobs: - run: yarn test - name: "Copy files over to location" - run: rsync -rvzP . ${{ secrets.PROD_REPO_PATH }} + run: cp -r . ${{ secrets.PROD_REPO_PATH }} deploy: environment: prod diff --git a/.forgejo/workflows/stage.yml b/.forgejo/workflows/stage.yml index 6cdfadb..4d8d024 100644 --- a/.forgejo/workflows/stage.yml +++ b/.forgejo/workflows/stage.yml @@ -22,7 +22,7 @@ jobs: - run: yarn test - name: "Copy files over to location" - run: rsync -rvzP . ${{ secrets.STAGE_REPO_PATH }} + run: cp -r . ${{ secrets.STAGE_REPO_PATH }} deploy: environment: prod diff --git a/3 b/3 new file mode 100644 index 0000000..fe6eb2a --- /dev/null +++ b/3 @@ -0,0 +1,225 @@ +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 a66eab3..cf31842 100644 --- a/tests/commands/304276391837302787/moons/add.test.ts +++ b/tests/commands/304276391837302787/moons/add.test.ts @@ -80,115 +80,17 @@ describe("GIVEN happy flow", () => { }); describe("GIVEN description is null", () => { - 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!"); - }); + test.todo("EXPECT error replied"); }); describe("GIVEN description is greater than 255 characters", () => { - 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!"); - }); + test.todo("EXPECT error replied"); }); describe("GIVEN moon count setting exists", () => { - 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"); - }); + test.todo("EXPECT existing entity to be updated"); }); describe("GIVEN moon count setting does not exist", () => { - 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"); - }); + test.todo("EXPECT new entity to be created"); }); \ No newline at end of file