WIP: Create buy embed generate helper function
Some checks failed
Test / build (push) Failing after 35s
Some checks failed
Test / build (push) Failing after 35s
This commit is contained in:
parent
904842ae32
commit
b2807adf4d
6 changed files with 95 additions and 18 deletions
|
@ -11,7 +11,7 @@ export default async function List(interaction: ButtonInteraction) {
|
|||
return;
|
||||
}
|
||||
|
||||
const result = await EffectHelper.GenerateEffectEmbed(interaction.user.id, page);
|
||||
const result = await EffectHelper.GenerateEffectListEmbed(interaction.user.id, page);
|
||||
|
||||
await interaction.update({
|
||||
embeds: [ result.embed ],
|
||||
|
|
|
@ -6,7 +6,7 @@ export default async function List(interaction: CommandInteraction) {
|
|||
|
||||
const page = !isNaN(Number(pageOption?.value)) ? Number(pageOption?.value) : 1;
|
||||
|
||||
const result = await EffectHelper.GenerateEffectEmbed(interaction.user.id, page);
|
||||
const result = await EffectHelper.GenerateEffectListEmbed(interaction.user.id, page);
|
||||
|
||||
await interaction.reply({
|
||||
embeds: [ result.embed ],
|
||||
|
|
|
@ -2,6 +2,9 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "disc
|
|||
import UserEffect from "../database/entities/app/UserEffect";
|
||||
import EmbedColours from "../constants/EmbedColours";
|
||||
import { EffectDetails } from "../constants/EffectDetails";
|
||||
import User from "../database/entities/app/User";
|
||||
import CardConstants from "../constants/CardConstants";
|
||||
import AppLogger from "../client/appLogger";
|
||||
|
||||
export default class EffectHelper {
|
||||
public static async AddEffectToUserInventory(userId: string, name: string, quantity: number = 1) {
|
||||
|
@ -66,7 +69,7 @@ export default class EffectHelper {
|
|||
return true;
|
||||
}
|
||||
|
||||
public static async GenerateEffectEmbed(userId: string, page: number): Promise<{
|
||||
public static async GenerateEffectListEmbed(userId: string, page: number): Promise<{
|
||||
embed: EmbedBuilder,
|
||||
row: ActionRowBuilder<ButtonBuilder>,
|
||||
}> {
|
||||
|
@ -126,4 +129,66 @@ export default class EffectHelper {
|
|||
row,
|
||||
};
|
||||
}
|
||||
|
||||
public static async GenerateEffectBuyEmbed(userId: string, id: string, quantity: number, disabled: boolean): Promise<{
|
||||
embed: EmbedBuilder,
|
||||
row: ActionRowBuilder<ButtonBuilder>,
|
||||
} | string> {
|
||||
const effectDetail = EffectDetails.get(id);
|
||||
|
||||
if (!effectDetail) {
|
||||
return "Effect detail not found!";
|
||||
}
|
||||
|
||||
const totalCost = effectDetail.cost * quantity;
|
||||
|
||||
let user = await User.FetchOneById(User, userId);
|
||||
|
||||
if (!user) {
|
||||
user = new User(userId, CardConstants.StartingCurrency);
|
||||
await user.Save(User, user);
|
||||
|
||||
AppLogger.LogInfo("EffectHelper", `Created initial user entity for : ${userId}`);
|
||||
}
|
||||
|
||||
if (user.Currency < totalCost) {
|
||||
return `You don't have enough currency to buy this! You have \`${user.Currency} Currency\` and need \`${totalCost} Currency\`!`;
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Buy Effect")
|
||||
.setDescription(effectDetail.friendlyName)
|
||||
.setColor(EmbedColours.Ok)
|
||||
.addFields([
|
||||
{
|
||||
name: "Cost",
|
||||
value: `${totalCost}`,
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: "Quantity",
|
||||
value: `${quantity}`,
|
||||
inline: true,
|
||||
},
|
||||
]);
|
||||
|
||||
const row = new ActionRowBuilder<ButtonBuilder>()
|
||||
.addComponents([
|
||||
new ButtonBuilder()
|
||||
.setCustomId(`effects buy confirm ${id} ${quantity}`)
|
||||
.setLabel("Confirm")
|
||||
.setStyle(ButtonStyle.Success)
|
||||
.setDisabled(disabled),
|
||||
new ButtonBuilder()
|
||||
.setCustomId(`effects buy cancel ${id} ${quantity}`)
|
||||
.setLabel("Cancel")
|
||||
.setStyle(ButtonStyle.Danger)
|
||||
.setDisabled(disabled),
|
||||
]);
|
||||
|
||||
return {
|
||||
embed,
|
||||
row,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ let interaction: ReturnType<typeof mock<ButtonInteraction>>;
|
|||
beforeEach(() => {
|
||||
jest.resetAllMocks();
|
||||
|
||||
(EffectHelper.GenerateEffectEmbed as jest.Mock).mockResolvedValue({
|
||||
(EffectHelper.GenerateEffectListEmbed as jest.Mock).mockResolvedValue({
|
||||
embed: mock<EmbedBuilder>(),
|
||||
row: mock<ActionRowBuilder<ButtonBuilder>>(),
|
||||
});
|
||||
|
@ -31,7 +31,7 @@ test("GIVEN pageOption is NOT a number, EXPECT error", async () => {
|
|||
expect(interaction.reply).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.reply).toHaveBeenCalledWith("Page option is not a valid number")
|
||||
|
||||
expect(EffectHelper.GenerateEffectEmbed).not.toHaveBeenCalled();
|
||||
expect(EffectHelper.GenerateEffectListEmbed).not.toHaveBeenCalled();
|
||||
expect(interaction.update).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
|
@ -43,8 +43,8 @@ test("GIVEN pageOption is a number, EXPECT interaction updated", async () => {
|
|||
await List(interaction);
|
||||
|
||||
// Assert
|
||||
expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledTimes(1);
|
||||
expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledWith("userId", 1);
|
||||
expect(EffectHelper.GenerateEffectListEmbed).toHaveBeenCalledTimes(1);
|
||||
expect(EffectHelper.GenerateEffectListEmbed).toHaveBeenCalledWith("userId", 1);
|
||||
|
||||
expect(interaction.update).toHaveBeenCalledTimes(1);
|
||||
});
|
|
@ -3,7 +3,7 @@ import UserEffect from "../../src/database/entities/app/UserEffect";
|
|||
|
||||
jest.mock("../../src/database/entities/app/UserEffect");
|
||||
|
||||
describe("GenerateEffectEmbed", () => {
|
||||
describe("GenerateEffectListEmbed", () => {
|
||||
test("GIVEN user has an effect, EXPECT detailed embed to be returned", async () => {
|
||||
// Arrange
|
||||
(UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
|
||||
|
@ -17,7 +17,7 @@ describe("GenerateEffectEmbed", () => {
|
|||
]);
|
||||
|
||||
// Act
|
||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
||||
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||
|
||||
// Assert
|
||||
expect(result).toMatchSnapshot();
|
||||
|
@ -43,7 +43,7 @@ describe("GenerateEffectEmbed", () => {
|
|||
]);
|
||||
|
||||
// Act
|
||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
||||
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||
|
||||
// Assert
|
||||
expect(result).toMatchSnapshot();
|
||||
|
@ -69,7 +69,7 @@ describe("GenerateEffectEmbed", () => {
|
|||
]);
|
||||
|
||||
// Act
|
||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 2);
|
||||
const result = await EffectHelper.GenerateEffectListEmbed("userId", 2);
|
||||
|
||||
// Assert
|
||||
expect(result).toMatchSnapshot();
|
||||
|
@ -83,7 +83,7 @@ describe("GenerateEffectEmbed", () => {
|
|||
]);
|
||||
|
||||
// Act
|
||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
||||
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||
|
||||
// Assert
|
||||
expect(result).toMatchSnapshot();
|
||||
|
@ -107,9 +107,21 @@ describe("GenerateEffectEmbed", () => {
|
|||
});
|
||||
|
||||
// Act
|
||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
||||
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||
|
||||
// Assert
|
||||
expect(result).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
|
||||
describe("GenerateEffectBuyEmbed", () => {
|
||||
test.todo("GIVEN Effect Details are not found, EXPECT error");
|
||||
|
||||
test.todo("GIVEN user is not in database, EXPECT blank user created");
|
||||
|
||||
test.todo("GIVEN user does not have enough currency, EXPECT error");
|
||||
|
||||
test.todo("GIVEN user does have enough currency, EXPECT embed returned");
|
||||
|
||||
test.todo("GIVEN disabled boolean is true, EXPECT buttons to be disabled");
|
||||
});
|
|
@ -1,6 +1,6 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`GenerateEffectEmbed GIVEN there is an active effect, EXPECT field added 1`] = `
|
||||
exports[`GenerateEffectListEmbed GIVEN there is an active effect, EXPECT field added 1`] = `
|
||||
{
|
||||
"embed": {
|
||||
"color": 3166394,
|
||||
|
@ -47,7 +47,7 @@ exports[`GenerateEffectEmbed GIVEN there is an active effect, EXPECT field added
|
|||
}
|
||||
`;
|
||||
|
||||
exports[`GenerateEffectEmbed GIVEN user does NOT have an effect, EXPECT empty embed to be returned 1`] = `
|
||||
exports[`GenerateEffectListEmbed GIVEN user does NOT have an effect, EXPECT empty embed to be returned 1`] = `
|
||||
{
|
||||
"embed": {
|
||||
"color": 3166394,
|
||||
|
@ -82,7 +82,7 @@ exports[`GenerateEffectEmbed GIVEN user does NOT have an effect, EXPECT empty em
|
|||
}
|
||||
`;
|
||||
|
||||
exports[`GenerateEffectEmbed GIVEN user has an effect, EXPECT detailed embed to be returned 1`] = `
|
||||
exports[`GenerateEffectListEmbed GIVEN user has an effect, EXPECT detailed embed to be returned 1`] = `
|
||||
{
|
||||
"embed": {
|
||||
"color": 3166394,
|
||||
|
@ -117,7 +117,7 @@ exports[`GenerateEffectEmbed GIVEN user has an effect, EXPECT detailed embed to
|
|||
}
|
||||
`;
|
||||
|
||||
exports[`GenerateEffectEmbed GIVEN user has more than 1 page of effects, EXPECT pagination enabled 1`] = `
|
||||
exports[`GenerateEffectListEmbed GIVEN user has more than 1 page of effects, EXPECT pagination enabled 1`] = `
|
||||
{
|
||||
"embed": {
|
||||
"color": 3166394,
|
||||
|
@ -166,7 +166,7 @@ Unclaimed Chance Up x1",
|
|||
}
|
||||
`;
|
||||
|
||||
exports[`GenerateEffectEmbed GIVEN user is on a page other than 1, EXPECT pagination enabled 1`] = `
|
||||
exports[`GenerateEffectListEmbed GIVEN user is on a page other than 1, EXPECT pagination enabled 1`] = `
|
||||
{
|
||||
"embed": {
|
||||
"color": 3166394,
|
||||
|
|
Loading…
Reference in a new issue