Compare commits

..

7 commits

Author SHA1 Message Date
e557540d70 Create add moon command tests
All checks were successful
Test / build (push) Successful in 24s
2024-12-11 18:41:59 +00:00
f0a7d68adf Merge branch 'develop' into feature/300-moon-set 2024-12-11 18:16:39 +00:00
b275f60f94 Merge branch 'main' into develop
All checks were successful
Deploy To Stage / build (push) Successful in 21s
Deploy To Stage / deploy (push) Successful in 15s
2024-12-10 10:37:04 +00:00
e081ff7802 Revert "Use password secret"
All checks were successful
Deploy To Production / build (push) Successful in 52s
Deploy To Production / deploy (push) Successful in 14s
This reverts commit 725f3ee869.
2024-12-10 10:21:03 +00:00
725f3ee869 Use password secret 2024-12-10 10:19:40 +00:00
0cc4356793 Use rsync -rvzP 2024-12-10 10:10:13 +00:00
665fc293b5 Use rsync 2024-12-10 10:07:23 +00:00
4 changed files with 104 additions and 231 deletions

View file

@ -22,7 +22,7 @@ jobs:
- run: yarn test
- name: "Copy files over to location"
run: cp -r . ${{ secrets.PROD_REPO_PATH }}
run: rsync -rvzP . ${{ secrets.PROD_REPO_PATH }}
deploy:
environment: prod

View file

@ -22,7 +22,7 @@ jobs:
- run: yarn test
- name: "Copy files over to location"
run: cp -r . ${{ secrets.STAGE_REPO_PATH }}
run: rsync -rvzP . ${{ secrets.STAGE_REPO_PATH }}
deploy:
environment: prod

225
3
View file

@ -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");
});
});

View file

@ -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");
});
});