Compare commits
No commits in common. "e557540d703783bb1626d5d844e1b75285381fad" and "056783bc44925b30cf13d543287bb563edf95205" have entirely different histories.
e557540d70
...
056783bc44
4 changed files with 231 additions and 104 deletions
|
@ -22,7 +22,7 @@ jobs:
|
||||||
- run: yarn test
|
- run: yarn test
|
||||||
|
|
||||||
- name: "Copy files over to location"
|
- name: "Copy files over to location"
|
||||||
run: rsync -rvzP . ${{ secrets.PROD_REPO_PATH }}
|
run: cp -r . ${{ secrets.PROD_REPO_PATH }}
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
environment: prod
|
environment: prod
|
||||||
|
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
- run: yarn test
|
- run: yarn test
|
||||||
|
|
||||||
- name: "Copy files over to location"
|
- name: "Copy files over to location"
|
||||||
run: rsync -rvzP . ${{ secrets.STAGE_REPO_PATH }}
|
run: cp -r . ${{ secrets.STAGE_REPO_PATH }}
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
environment: prod
|
environment: prod
|
||||||
|
|
225
3
Normal file
225
3
Normal file
|
@ -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");
|
||||||
|
});
|
||||||
|
});
|
|
@ -80,115 +80,17 @@ describe("GIVEN happy flow", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("GIVEN description is null", () => {
|
describe("GIVEN description is null", () => {
|
||||||
const interaction = {
|
test.todo("EXPECT error replied");
|
||||||
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", () => {
|
describe("GIVEN description is greater than 255 characters", () => {
|
||||||
const optionGet = jest.fn();
|
test.todo("EXPECT error replied");
|
||||||
|
|
||||||
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", () => {
|
describe("GIVEN moon count setting exists", () => {
|
||||||
const moonSetting = {
|
test.todo("EXPECT existing entity to be updated");
|
||||||
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", () => {
|
describe("GIVEN moon count setting does not exist", () => {
|
||||||
let savedSetting: UserSetting | undefined;
|
test.todo("EXPECT new entity to be created");
|
||||||
|
|
||||||
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");
|
|
||||||
});
|
|
||||||
});
|
});
|
Loading…
Add table
Reference in a new issue