card-drop/tests/buttonEvents/Effects/Buy.test.ts

125 lines
3.8 KiB
TypeScript
Raw Normal View History

2025-02-19 18:17:16 +00:00
import {ButtonInteraction} from "discord.js";
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";
2025-02-19 18:17:16 +00:00
jest.mock("../../../src/client/appLogger");
jest.mock("../../../src/helpers/EffectHelper");
2025-02-19 18:17:16 +00:00
let interaction: ButtonInteractionType;
beforeEach(() => {
jest.resetAllMocks();
interaction = GenerateButtonInteractionMock();
interaction.customId = "effects buy";
});
2025-02-09 19:11:03 +00:00
describe("Execute", () => {
2025-02-19 18:17:16 +00:00
test("GIVEN subaction is confirm, EXPECT confirm function executed", async () => {
// Arrange
interaction.customId += " confirm";
const confirmSpy = jest.spyOn(Buy as any, "Confirm")
.mockImplementation();
2025-02-19 18:17:16 +00:00
// Act
await Buy.Execute(interaction as unknown as ButtonInteraction);
// Assert
expect(confirmSpy).toHaveBeenCalledTimes(1);
expect(confirmSpy).toHaveBeenCalledWith(interaction);
expect(AppLogger.LogError).not.toHaveBeenCalled();
});
test("GIVEN subaction is cancel, EXPECT cancel function executed", async () => {
// Arrange
interaction.customId += " cancel";
const cancelSpy = jest.spyOn(Buy as any, "Cancel")
.mockImplementation();
2025-02-19 18:17:16 +00:00
// Act
await Buy.Execute(interaction as unknown as ButtonInteraction);
// Assert
expect(cancelSpy).toHaveBeenCalledTimes(1)
2025-02-19 18:17:16 +00:00
expect(cancelSpy).toHaveBeenCalledWith(interaction);
expect(AppLogger.LogError).not.toHaveBeenCalled();
});
test("GIVEN subaction is invalid, EXPECT error logged", async () => {
// Arrange
interaction.customId += " invalid";
const confirmSpy = jest.spyOn(Buy as any, "Confirm")
.mockImplementation();
const cancelSpy = jest.spyOn(Buy as any, "Cancel")
.mockImplementation();
2025-02-19 18:17:16 +00:00
// Act
await Buy.Execute(interaction as unknown as ButtonInteraction);
2025-02-09 19:11:03 +00:00
2025-02-19 18:17:16 +00:00
// Assert
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy", "Unknown subaction, effects invalid");
2025-02-09 19:11:03 +00:00
2025-02-19 18:17:16 +00:00
expect(confirmSpy).not.toHaveBeenCalled();
expect(cancelSpy).not.toHaveBeenCalled();
});
2025-02-09 19:11:03 +00:00
});
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");
});