Compare commits
No commits in common. "bc98d6ba752f669e52987abbe794277686f05029" and "1f5a19f10169c4610374a54009a4c395d8bdd9d4" have entirely different histories.
bc98d6ba75
...
1f5a19f101
2 changed files with 56 additions and 220 deletions
|
@ -80,41 +80,5 @@ export default class Buy {
|
|||
}
|
||||
|
||||
private static async Cancel(interaction: ButtonInteraction) {
|
||||
const id = interaction.customId.split(" ")[3];
|
||||
const quantity = interaction.customId.split(" ")[4];
|
||||
|
||||
if (!id || !quantity) {
|
||||
AppLogger.LogError("Buy Cancel", "Not enough parameters");
|
||||
return;
|
||||
}
|
||||
|
||||
const effectDetail = EffectDetails.get(id);
|
||||
|
||||
if (!effectDetail) {
|
||||
AppLogger.LogError("Buy Cancel", "Effect detail not found!");
|
||||
return;
|
||||
}
|
||||
|
||||
const quantityNumber = Number(quantity);
|
||||
|
||||
if (!quantityNumber || quantityNumber < 1) {
|
||||
AppLogger.LogError("Buy Cancel", "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.Error);
|
||||
generatedEmbed.embed.setFooter({ text: "Cancelled" });
|
||||
|
||||
await interaction.update({
|
||||
embeds: [ generatedEmbed.embed ],
|
||||
components: [ generatedEmbed.row ],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,11 +5,9 @@ import { ButtonInteraction as ButtonInteractionType } from "../../__types__/disc
|
|||
import AppLogger from "../../../src/client/appLogger";
|
||||
import EffectHelper from "../../../src/helpers/EffectHelper";
|
||||
import EmbedColours from "../../../src/constants/EmbedColours";
|
||||
import User from "../../../src/database/entities/app/User";
|
||||
|
||||
jest.mock("../../../src/client/appLogger");
|
||||
jest.mock("../../../src/helpers/EffectHelper");
|
||||
jest.mock("../../../src/database/entities/app/User");
|
||||
|
||||
let interaction: ButtonInteractionType;
|
||||
|
||||
|
@ -83,23 +81,13 @@ describe("Execute", () => {
|
|||
});
|
||||
|
||||
describe("Confirm", () => {
|
||||
let user: User;
|
||||
|
||||
beforeEach(() => {
|
||||
interaction.customId += " confirm";
|
||||
|
||||
user = {
|
||||
Currency: 1000,
|
||||
Save: jest.fn(),
|
||||
RemoveCurrency: jest.fn(),
|
||||
} as unknown as User;
|
||||
|
||||
(User.FetchOneById as jest.Mock).mockResolvedValue(user);
|
||||
});
|
||||
|
||||
test("EXPECT success embed generated", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 1";
|
||||
interaction.customId += " id 1";
|
||||
|
||||
const embed = {
|
||||
id: "embed",
|
||||
|
@ -126,7 +114,7 @@ describe("Confirm", () => {
|
|||
});
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledTimes(1);
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledWith("userId", "unclaimed", 1, true);
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledWith("userId", "id", 1, true);
|
||||
|
||||
expect(embed.setColor).toHaveBeenCalledTimes(1);
|
||||
expect(embed.setColor).toHaveBeenCalledWith(EmbedColours.Success);
|
||||
|
@ -136,21 +124,24 @@ describe("Confirm", () => {
|
|||
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(AppLogger.LogError).not.toHaveBeenCalled();
|
||||
|
||||
expect(User.FetchOneById).toHaveBeenCalledTimes(1);
|
||||
expect(User.FetchOneById).toHaveBeenCalledWith(User, "userId");
|
||||
|
||||
expect(user.RemoveCurrency).toHaveBeenCalledTimes(1);
|
||||
expect(user.RemoveCurrency).toHaveBeenCalledWith(100);
|
||||
|
||||
expect(user.Save).toHaveBeenCalledTimes(1);
|
||||
expect(user.Save).toHaveBeenCalledWith(User, user);
|
||||
|
||||
expect(EffectHelper.AddEffectToUserInventory).toHaveBeenCalledTimes(1);
|
||||
expect(EffectHelper.AddEffectToUserInventory).toHaveBeenCalledWith("userId", "unclaimed", 1);
|
||||
});
|
||||
|
||||
test("GIVEN id is not supplied, EXPECT error", async () => {
|
||||
// Assert
|
||||
const embed = {
|
||||
id: "embed",
|
||||
setColor: jest.fn(),
|
||||
setFooter: jest.fn(),
|
||||
};
|
||||
const row = {
|
||||
id: "row",
|
||||
};
|
||||
|
||||
(EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue({
|
||||
embed,
|
||||
row,
|
||||
});
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
|
@ -165,119 +156,7 @@ describe("Confirm", () => {
|
|||
|
||||
test("GIVEN quantity is not supplied, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed";
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Not enough parameters");
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN quantity is not a number, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed invalid";
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Invalid number");
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN quantity is 0, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 0";
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Invalid number");
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN user is not found, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 1";
|
||||
|
||||
(User.FetchOneById as jest.Mock).mockResolvedValue(undefined);
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Unable to find user");
|
||||
|
||||
expect(EffectHelper.AddEffectToUserInventory).not.toHaveBeenCalled();
|
||||
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN user does not have enough currency, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 1";
|
||||
|
||||
user.Currency = 0;
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(interaction.reply).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.reply).toHaveBeenCalledWith("You don't have enough currency to buy this! You have `0 Currency` and need `100 Currency`!");
|
||||
|
||||
expect(EffectHelper.AddEffectToUserInventory).not.toHaveBeenCalled();
|
||||
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
|
||||
expect(AppLogger.LogError).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN GenerateEffectBuyEmbed returns with a string, EXPECT error replied", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 1";
|
||||
|
||||
(EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue("Test error");
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(interaction.reply).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.reply).toHaveBeenCalledWith("Test error");
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).toHaveBeenCalledTimes(1);
|
||||
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
expect(AppLogger.LogError).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("Cancel", () => {
|
||||
beforeEach(() => {
|
||||
interaction.customId += " cancel";
|
||||
});
|
||||
|
||||
test("EXPECT embed generated", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 1";
|
||||
interaction.customId += " id";
|
||||
|
||||
const embed = {
|
||||
id: "embed",
|
||||
|
@ -296,48 +175,9 @@ describe("Cancel", () => {
|
|||
// 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", "unclaimed", 1, true);
|
||||
|
||||
expect(embed.setColor).toHaveBeenCalledTimes(1);
|
||||
expect(embed.setColor).toHaveBeenCalledWith(EmbedColours.Error);
|
||||
|
||||
expect(embed.setFooter).toHaveBeenCalledTimes(1);
|
||||
expect(embed.setFooter).toHaveBeenCalledWith({ text: "Cancelled" });
|
||||
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(AppLogger.LogError).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN id is not supplied, EXPECT error", async () => {
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Not enough parameters");
|
||||
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN quantity is not supplied, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed";
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Not enough parameters");
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Not enough parameters");
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
|
@ -346,14 +186,28 @@ describe("Cancel", () => {
|
|||
|
||||
test("GIVEN quantity is not a number, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed invalid";
|
||||
interaction.customId += " id invalid";
|
||||
|
||||
const embed = {
|
||||
id: "embed",
|
||||
setColor: jest.fn(),
|
||||
setFooter: jest.fn(),
|
||||
};
|
||||
const row = {
|
||||
id: "row",
|
||||
};
|
||||
|
||||
(EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue({
|
||||
embed,
|
||||
row,
|
||||
});
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Invalid number");
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Invalid number");
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
|
@ -362,23 +216,41 @@ describe("Cancel", () => {
|
|||
|
||||
test("GIVEN quantity is 0, EXPECT error", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 0";
|
||||
interaction.customId += " id 0";
|
||||
|
||||
const embed = {
|
||||
id: "embed",
|
||||
setColor: jest.fn(),
|
||||
setFooter: jest.fn(),
|
||||
};
|
||||
const row = {
|
||||
id: "row",
|
||||
};
|
||||
|
||||
(EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue({
|
||||
embed,
|
||||
row,
|
||||
});
|
||||
|
||||
// Act
|
||||
await Buy.Execute(interaction as unknown as ButtonInteraction);
|
||||
|
||||
// Assert
|
||||
expect(AppLogger.LogError).toHaveBeenCalledTimes(1);
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Cancel", "Invalid number");
|
||||
expect(AppLogger.LogError).toHaveBeenCalledWith("Buy Confirm", "Invalid number");
|
||||
|
||||
expect(EffectHelper.GenerateEffectBuyEmbed).not.toHaveBeenCalled();
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test.todo("GIVEN user is not found, EXPECT error");
|
||||
|
||||
test.todo("GIVEN user does not have enough currency, EXPECT error");
|
||||
|
||||
test("GIVEN GenerateEffectBuyEmbed returns with a string, EXPECT error replied", async () => {
|
||||
// Assert
|
||||
interaction.customId += " unclaimed 1";
|
||||
interaction.customId += " id 1";
|
||||
|
||||
(EffectHelper.GenerateEffectBuyEmbed as jest.Mock).mockResolvedValue("Test error");
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue