Compare commits

...

2 commits

Author SHA1 Message Date
d4c75845e5 WIP: Start creating buy subactions
Some checks failed
Test / build (push) Failing after 38s
2025-02-09 19:11:03 +00:00
38b0b8b301 Implement buy subcommand 2025-02-09 18:56:15 +00:00
6 changed files with 69 additions and 1 deletions

View file

@ -3,6 +3,7 @@ import { ButtonEvent } from "../type/buttonEvent";
import List from "./Effects/List";
import Use from "./Effects/Use";
import AppLogger from "../client/appLogger";
import Buy from "./Effects/Buy";
export default class Effects extends ButtonEvent {
public override async execute(interaction: ButtonInteraction) {
@ -15,6 +16,9 @@ export default class Effects extends ButtonEvent {
case "use":
await Use.Execute(interaction);
break;
case "buy":
await Buy.Execute(interaction);
break;
default:
AppLogger.LogError("Buttons/Effects", `Unknown action, ${action}`);
}

View file

@ -0,0 +1,25 @@
import {ButtonInteraction} from "discord.js";
import AppLogger from "../../client/appLogger";
export default class Buy {
public static async Execute(interaction: ButtonInteraction) {
const subaction = interaction.customId.split(" ")[2];
switch (subaction) {
case "confirm":
await this.Confirm(interaction);
break;
case "cancel":
await this.Cancel(interaction);
break;
default:
AppLogger.LogError("Buy", `Unknown subaction, effects ${subaction}`);
}
}
private static async Confirm(interaction: ButtonInteraction) {
}
private static async Cancel(interaction: ButtonInteraction) {
}
}

View file

@ -1,4 +1,22 @@
import { CommandInteraction } from "discord.js";
import EffectHelper from "../../helpers/EffectHelper";
export default async function Buy(interaction: CommandInteraction) {
const id = interaction.options.get("id", true).value!;
const quantity = interaction.options.get("quantity")?.value ?? 1;
const idValue = id.toString();
const quantityValue = Number(quantity);
const result = await EffectHelper.GenerateEffectBuyEmbed(interaction.user.id, idValue, quantityValue, false);
if (typeof result == "string") {
await interaction.reply(result);
return;
}
await interaction.reply({
embeds: [ result.embed ],
components: [ result.row ],
});
}

View file

@ -49,6 +49,8 @@ test("GIVEN action is use, EXPECT use function to be called", async () => {
expect(List).not.toHaveBeenCalled();
});
test.todo("GIVEN action is buy, EXPECT buy function to be called");
test("GIVEN action is invalid, EXPECT nothing to be called", async () => {
// Arrange
interaction.customId = "effects invalid";
@ -63,4 +65,4 @@ test("GIVEN action is invalid, EXPECT nothing to be called", async () => {
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
expect(AppLogger.LogError).toHaveBeenCalledWith("Buttons/Effects", "Unknown action, invalid");
});
});

View file

@ -0,0 +1,7 @@
describe("Execute", () => {
test.todo("GIVEN subaction is confirm, EXPECT confirm function executed");
test.todo("GIVEN subaction is cancel, EXPECT cancel function executed");
test.todo("GIVEN subaction is invalid, EXPECT error logged");
});

View file

@ -0,0 +1,12 @@
import Buy from "../../../src/commands/effects/Buy";
import EffectHelper from "../../../src/helpers/EffectHelper";
jest.mock("../../../src/helpers/EffectHelper");
describe("Buy", () => {
test.todo("GIVEN result returns a string, EXPECT interaction replied with string");
test.todo("GIVEN result returns an embed, EXPECT interaction replied with embed and row");
test.todo("GIVEN quantity option is not supplied, EXPECT quantity to default to 1");
});