Command to allow the user to buy more effects (#424)
# Description - Create a command to generate an embed for the user to be able to buy more effects - This embed will contain the details about the effect as well as 2 buttons; Confirm and Cancel - The confirm button will call the button event to: - Remove the currency from the user - Give the user the effect to their inventory - The cancel button will just disable the buttons, so the user can't accidentally use it if they don't want to. #381 ## Type of change Please delete options that are not relevant. - [x] New feature (non-breaking change which adds functionality) # How Has This Been Tested? - Have created unit tests and tested locally # Checklist - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that provde my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules Reviewed-on: #424 Reviewed-by: VylpesTester <tester@vylpes.com> Co-authored-by: Ethan Lane <ethan@vylpes.com> Co-committed-by: Ethan Lane <ethan@vylpes.com>
This commit is contained in:
parent
c6b458199c
commit
5089ad6ab6
20 changed files with 942 additions and 97 deletions
105
tests/commands/effects.test.ts
Normal file
105
tests/commands/effects.test.ts
Normal file
|
@ -0,0 +1,105 @@
|
|||
import Effects from "../../src/commands/effects";
|
||||
import List from "../../src/commands/effects/List";
|
||||
import Use from "../../src/commands/effects/Use";
|
||||
import Buy from "../../src/commands/effects/Buy";
|
||||
import AppLogger from "../../src/client/appLogger";
|
||||
import GenerateCommandInteractionMock from "../__functions__/discord.js/GenerateCommandInteractionMock";
|
||||
import { CommandInteraction } from "discord.js";
|
||||
|
||||
jest.mock("../../src/commands/effects/List");
|
||||
jest.mock("../../src/commands/effects/Use");
|
||||
jest.mock("../../src/commands/effects/Buy");
|
||||
jest.mock("../../src/client/appLogger");
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetAllMocks();
|
||||
});
|
||||
|
||||
test("EXPECT CommandBuilder to be defined", async () => {
|
||||
// Act
|
||||
const effects = new Effects();
|
||||
|
||||
// Assert
|
||||
expect(effects.CommandBuilder).toMatchSnapshot();
|
||||
});
|
||||
|
||||
describe("execute", () => {
|
||||
test("GIVEN interaction subcommand is list, EXPECT buy function called", async () => {
|
||||
// Arrange
|
||||
const interaction = GenerateCommandInteractionMock({
|
||||
subcommand: "list",
|
||||
});
|
||||
|
||||
// Act
|
||||
const effects = new Effects();
|
||||
await effects.execute(interaction as unknown as CommandInteraction);
|
||||
|
||||
// Assert
|
||||
expect(List).toHaveBeenCalledTimes(1);
|
||||
expect(List).toHaveBeenCalledWith(interaction);
|
||||
|
||||
expect(Use).not.toHaveBeenCalled();
|
||||
expect(Buy).not.toHaveBeenCalled();
|
||||
|
||||
expect(AppLogger.LogError).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN interaction subcommand is use, EXPECT buy function called", async () => {
|
||||
// Arrange
|
||||
const interaction = GenerateCommandInteractionMock({
|
||||
subcommand: "use",
|
||||
});
|
||||
|
||||
// Act
|
||||
const effects = new Effects();
|
||||
await effects.execute(interaction as unknown as CommandInteraction);
|
||||
|
||||
// Assert
|
||||
expect(Use).toHaveBeenCalledTimes(1);
|
||||
expect(Use).toHaveBeenCalledWith(interaction);
|
||||
|
||||
expect(List).not.toHaveBeenCalled();
|
||||
expect(Buy).not.toHaveBeenCalled();
|
||||
|
||||
expect(AppLogger.LogError).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN interaction subcommand is buy, EXPECT buy function called", async () => {
|
||||
// Arrange
|
||||
const interaction = GenerateCommandInteractionMock({
|
||||
subcommand: "buy",
|
||||
});
|
||||
|
||||
// Act
|
||||
const effects = new Effects();
|
||||
await effects.execute(interaction as unknown as CommandInteraction);
|
||||
|
||||
// Assert
|
||||
expect(Buy).toHaveBeenCalledTimes(1);
|
||||
expect(Buy).toHaveBeenCalledWith(interaction);
|
||||
|
||||
expect(List).not.toHaveBeenCalled();
|
||||
expect(Use).not.toHaveBeenCalled();
|
||||
|
||||
expect(AppLogger.LogError).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN interaction subcommand is invalid, EXPECT error logged", async () => {
|
||||
// Arrange
|
||||
const interaction = GenerateCommandInteractionMock({
|
||||
subcommand: "invalid",
|
||||
});
|
||||
|
||||
// Act
|
||||
const effects = new Effects();
|
||||
await effects.execute(interaction as unknown as CommandInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Commands/Effects", "Invalid subcommand: invalid");
|
||||
|
||||
expect(List).not.toHaveBeenCalled();
|
||||
expect(Use).not.toHaveBeenCalled();
|
||||
expect(Buy).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue