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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await EffectHelper.GenerateEffectEmbed(interaction.user.id, page);
|
const result = await EffectHelper.GenerateEffectListEmbed(interaction.user.id, page);
|
||||||
|
|
||||||
await interaction.update({
|
await interaction.update({
|
||||||
embeds: [ result.embed ],
|
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 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({
|
await interaction.reply({
|
||||||
embeds: [ result.embed ],
|
embeds: [ result.embed ],
|
||||||
|
|
|
@ -2,6 +2,9 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "disc
|
||||||
import UserEffect from "../database/entities/app/UserEffect";
|
import UserEffect from "../database/entities/app/UserEffect";
|
||||||
import EmbedColours from "../constants/EmbedColours";
|
import EmbedColours from "../constants/EmbedColours";
|
||||||
import { EffectDetails } from "../constants/EffectDetails";
|
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 {
|
export default class EffectHelper {
|
||||||
public static async AddEffectToUserInventory(userId: string, name: string, quantity: number = 1) {
|
public static async AddEffectToUserInventory(userId: string, name: string, quantity: number = 1) {
|
||||||
|
@ -66,7 +69,7 @@ export default class EffectHelper {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async GenerateEffectEmbed(userId: string, page: number): Promise<{
|
public static async GenerateEffectListEmbed(userId: string, page: number): Promise<{
|
||||||
embed: EmbedBuilder,
|
embed: EmbedBuilder,
|
||||||
row: ActionRowBuilder<ButtonBuilder>,
|
row: ActionRowBuilder<ButtonBuilder>,
|
||||||
}> {
|
}> {
|
||||||
|
@ -126,4 +129,66 @@ export default class EffectHelper {
|
||||||
row,
|
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(() => {
|
beforeEach(() => {
|
||||||
jest.resetAllMocks();
|
jest.resetAllMocks();
|
||||||
|
|
||||||
(EffectHelper.GenerateEffectEmbed as jest.Mock).mockResolvedValue({
|
(EffectHelper.GenerateEffectListEmbed as jest.Mock).mockResolvedValue({
|
||||||
embed: mock<EmbedBuilder>(),
|
embed: mock<EmbedBuilder>(),
|
||||||
row: mock<ActionRowBuilder<ButtonBuilder>>(),
|
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).toHaveBeenCalledTimes(1);
|
||||||
expect(interaction.reply).toHaveBeenCalledWith("Page option is not a valid number")
|
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();
|
expect(interaction.update).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -43,8 +43,8 @@ test("GIVEN pageOption is a number, EXPECT interaction updated", async () => {
|
||||||
await List(interaction);
|
await List(interaction);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledTimes(1);
|
expect(EffectHelper.GenerateEffectListEmbed).toHaveBeenCalledTimes(1);
|
||||||
expect(EffectHelper.GenerateEffectEmbed).toHaveBeenCalledWith("userId", 1);
|
expect(EffectHelper.GenerateEffectListEmbed).toHaveBeenCalledWith("userId", 1);
|
||||||
|
|
||||||
expect(interaction.update).toHaveBeenCalledTimes(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");
|
jest.mock("../../src/database/entities/app/UserEffect");
|
||||||
|
|
||||||
describe("GenerateEffectEmbed", () => {
|
describe("GenerateEffectListEmbed", () => {
|
||||||
test("GIVEN user has an effect, EXPECT detailed embed to be returned", async () => {
|
test("GIVEN user has an effect, EXPECT detailed embed to be returned", async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
(UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
|
(UserEffect.FetchAllByUserIdPaginated as jest.Mock).mockResolvedValue([
|
||||||
|
@ -17,7 +17,7 @@ describe("GenerateEffectEmbed", () => {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(result).toMatchSnapshot();
|
expect(result).toMatchSnapshot();
|
||||||
|
@ -43,7 +43,7 @@ describe("GenerateEffectEmbed", () => {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(result).toMatchSnapshot();
|
expect(result).toMatchSnapshot();
|
||||||
|
@ -69,7 +69,7 @@ describe("GenerateEffectEmbed", () => {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 2);
|
const result = await EffectHelper.GenerateEffectListEmbed("userId", 2);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(result).toMatchSnapshot();
|
expect(result).toMatchSnapshot();
|
||||||
|
@ -83,7 +83,7 @@ describe("GenerateEffectEmbed", () => {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(result).toMatchSnapshot();
|
expect(result).toMatchSnapshot();
|
||||||
|
@ -107,9 +107,21 @@ describe("GenerateEffectEmbed", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const result = await EffectHelper.GenerateEffectEmbed("userId", 1);
|
const result = await EffectHelper.GenerateEffectListEmbed("userId", 1);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
expect(result).toMatchSnapshot();
|
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
|
// 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": {
|
"embed": {
|
||||||
"color": 3166394,
|
"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": {
|
"embed": {
|
||||||
"color": 3166394,
|
"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": {
|
"embed": {
|
||||||
"color": 3166394,
|
"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": {
|
"embed": {
|
||||||
"color": 3166394,
|
"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": {
|
"embed": {
|
||||||
"color": 3166394,
|
"color": 3166394,
|
||||||
|
|
Loading…
Reference in a new issue