WIP: Start creating tests for confirmation button event
Some checks failed
Test / build (push) Failing after 39s

This commit is contained in:
Ethan Lane 2025-02-19 18:40:59 +00:00
parent 416e30c042
commit f745fdfbca
4 changed files with 95 additions and 5 deletions

View file

@ -1,5 +1,7 @@
import {ButtonInteraction} from "discord.js";
import AppLogger from "../../client/appLogger";
import EffectHelper from "../../helpers/EffectHelper";
import EmbedColours from "../../constants/EmbedColours";
export default class Buy {
public static async Execute(interaction: ButtonInteraction) {
@ -18,6 +20,35 @@ export default class Buy {
}
private static async Confirm(interaction: ButtonInteraction) {
const id = interaction.customId.split(" ")[3];
const quantity = interaction.customId.split(" ")[4];
if (!id || !quantity) {
AppLogger.LogError("Buy Confirm", "Not enough parameters");
return;
}
const quantityNumber = Number(quantity);
if (!quantityNumber || quantityNumber < 1) {
AppLogger.LogError("Buy Confirm", "Invalid number");
return;
}
const generatedEmbed = await EffectHelper.GenerateEffectBuyEmbed(interaction.user.id, id, quantityNumber, true);
if (typeof generatedEmbed == "string") {
await interaction.reply(generatedEmbed);
return;
}
generatedEmbed.embed.setColor(EmbedColours.Success);
generatedEmbed.embed.setFooter({ text: "Purchased" });
await interaction.update({
embeds: [ generatedEmbed.embed ],
components: [ generatedEmbed.row ],
});
}
private static async Cancel(interaction: ButtonInteraction) {

View file

@ -17,5 +17,7 @@ export default function GenerateButtonInteractionMock(): ButtonInteraction {
id: "userId",
},
customId: "customId",
update: jest.fn(),
reply: jest.fn(),
};
}

View file

@ -14,6 +14,8 @@ export type ButtonInteraction = {
id: string,
} | null,
customId: string,
update: jest.Func,
reply: jest.Func,
}
export type CommandInteraction = {

View file

@ -3,8 +3,10 @@ import Buy from "../../../src/buttonEvents/Effects/Buy";
import GenerateButtonInteractionMock from "../../__functions__/discord.js/GenerateButtonInteractionMock";
import { ButtonInteraction as ButtonInteractionType } from "../../__types__/discord.js";
import AppLogger from "../../../src/client/appLogger";
import EffectHelper from "../../../src/helpers/EffectHelper";
jest.mock("../../../src/client/appLogger");
jest.mock("../../../src/helpers/EffectHelper");
let interaction: ButtonInteractionType;
@ -21,7 +23,8 @@ describe("Execute", () => {
// Arrange
interaction.customId += " confirm";
const confirmSpy = jest.spyOn(Buy as any, "Confirm");
const confirmSpy = jest.spyOn(Buy as any, "Confirm")
.mockImplementation();
// Act
await Buy.Execute(interaction as unknown as ButtonInteraction);
@ -37,13 +40,14 @@ describe("Execute", () => {
// Arrange
interaction.customId += " cancel";
const cancelSpy = jest.spyOn(Buy as any, "Cancel");
const cancelSpy = jest.spyOn(Buy as any, "Cancel")
.mockImplementation();
// Act
await Buy.Execute(interaction as unknown as ButtonInteraction);
// Assert
expect(cancelSpy).toHaveBeenCalledTimes(1);
expect(cancelSpy).toHaveBeenCalledTimes(1)
expect(cancelSpy).toHaveBeenCalledWith(interaction);
expect(AppLogger.LogError).not.toHaveBeenCalled();
@ -53,8 +57,10 @@ describe("Execute", () => {
// Arrange
interaction.customId += " invalid";
const confirmSpy = jest.spyOn(Buy as any, "Confirm");
const cancelSpy = jest.spyOn(Buy as any, "Cancel");
const confirmSpy = jest.spyOn(Buy as any, "Confirm")
.mockImplementation();
const cancelSpy = jest.spyOn(Buy as any, "Cancel")
.mockImplementation();
// Act
await Buy.Execute(interaction as unknown as ButtonInteraction);
@ -67,3 +73,52 @@ describe("Execute", () => {
expect(cancelSpy).not.toHaveBeenCalled();
});
});
describe("Confirm", () => {
beforeEach(() => {
interaction.customId += " confirm";
});
test("EXPECT success embed generated", async () => {
// Assert
interaction.customId += " id 1";
const embed = {
id: "embed",
};
const row = {
id: "row",
};
(EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue({
embed,
row,
});
// Act
await Buy.Execute(interaction as unknown as ButtonInteraction);
// Assert
expect(interaction.update).toHaveBeenCalledTimes(1);
expect(interaction.update).toHaveBeenCalledWith({
embeds: [ embed ],
components: [ row ],
});
expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledTimes(1);
expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledWith("userId", "id", 1, true);
expect(interaction.reply).not.toHaveBeenCalled();
expect(AppLogger.LogError).not.toHaveBeenCalled();
});
test.todo("GIVEN id is not supplied, EXPECT error");
test.todo("GIVEN quantity is not supplied, EXPECT error");
test.todo("GIVEN quantity is not a number, EXPECT error");
test.todo("GIVEN quantity is 0, EXPECT error");
test.todo("GIVEN GenerateEffectBuyEmbed returns with a string, EXPECT error replied");
});