Create /effects buy subcommand
Some checks failed
Test / build (push) Failing after 36s

This commit is contained in:
Ethan Lane 2025-02-06 19:33:54 +00:00
parent c6b458199c
commit 904842ae32
9 changed files with 340 additions and 79 deletions

View file

@ -0,0 +1,106 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`EXPECT CommandBuilder to be defined 1`] = `
{
"contexts": undefined,
"default_member_permissions": undefined,
"default_permission": undefined,
"description": "Effects",
"description_localizations": undefined,
"dm_permission": undefined,
"integration_types": undefined,
"name": "effects",
"name_localizations": undefined,
"nsfw": undefined,
"options": [
{
"description": "List all effects I have",
"description_localizations": undefined,
"name": "list",
"name_localizations": undefined,
"options": [
{
"autocomplete": undefined,
"choices": undefined,
"description": "The page number",
"description_localizations": undefined,
"max_value": undefined,
"min_value": 1,
"name": "page",
"name_localizations": undefined,
"required": false,
"type": 10,
},
],
"type": 1,
},
{
"description": "Use an effect in your inventory",
"description_localizations": undefined,
"name": "use",
"name_localizations": undefined,
"options": [
{
"autocomplete": undefined,
"choices": [
{
"name": "Unclaimed Chance Up",
"name_localizations": undefined,
"value": "unclaimed",
},
],
"description": "The effect id to use",
"description_localizations": undefined,
"max_length": undefined,
"min_length": undefined,
"name": "id",
"name_localizations": undefined,
"required": true,
"type": 3,
},
],
"type": 1,
},
{
"description": "Buy more effects",
"description_localizations": undefined,
"name": "buy",
"name_localizations": undefined,
"options": [
{
"autocomplete": undefined,
"choices": [
{
"name": "Unclaimed Chance Up",
"name_localizations": undefined,
"value": "unclaimed",
},
],
"description": "The effect id to buy",
"description_localizations": undefined,
"max_length": undefined,
"min_length": undefined,
"name": "id",
"name_localizations": undefined,
"required": true,
"type": 3,
},
{
"autocomplete": undefined,
"choices": undefined,
"description": "The amount to buy",
"description_localizations": undefined,
"max_value": undefined,
"min_value": 1,
"name": "quantity",
"name_localizations": undefined,
"required": false,
"type": 10,
},
],
"type": 1,
},
],
"type": 1,
}
`;

View 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();
});
});