Create use effect command #419
2 changed files with 135 additions and 6 deletions
17
tests/__types__/discord.js.ts
Normal file
17
tests/__types__/discord.js.ts
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
export type ButtonInteraction = {
|
||||||
|
guild: {} | null,
|
||||||
|
guildId: string | null,
|
||||||
|
channel: {
|
||||||
|
isSendable: jest.Func,
|
||||||
|
send: jest.Func,
|
||||||
|
} | null,
|
||||||
|
deferUpdate: jest.Func,
|
||||||
|
editReply: jest.Func,
|
||||||
|
message: {
|
||||||
|
createdAt: Date,
|
||||||
|
} | null,
|
||||||
|
user: {
|
||||||
|
id: string,
|
||||||
|
} | null,
|
||||||
|
customId: string,
|
||||||
|
}
|
|
@ -1,14 +1,126 @@
|
||||||
test.todo("GIVEN interaction.guild is null, EXPECT nothing to happen");
|
import { ButtonInteraction, TextChannel } from "discord.js";
|
||||||
|
import Claim from "../../src/buttonEvents/Claim";
|
||||||
|
import { ButtonInteraction as ButtonInteractionType } from "../__types__/discord.js";
|
||||||
|
import User from "../../src/database/entities/app/User";
|
||||||
|
|
||||||
test.todo("GIVEN interaction.guildId is null, EXPECT nothing to happen");
|
jest.mock("../../src/client/appLogger");
|
||||||
|
|
||||||
test.todo("GIVEN interaction.channel is null, EXPECT nothing to happen");
|
let interaction: ButtonInteractionType;
|
||||||
|
|
||||||
test.todo("GIVEN channel is not sendable, EXPECT nothing to happen");
|
beforeEach(() => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
jest.setSystemTime(1000 * 60 * 30);
|
||||||
|
|
||||||
test.todo("GIVEN interaction.message was created more than 5 minutes ago, EXPECT error");
|
interaction = {
|
||||||
|
guild: {},
|
||||||
|
guildId: "guildId",
|
||||||
|
channel: {
|
||||||
|
isSendable: jest.fn().mockReturnValue(true),
|
||||||
|
send: jest.fn(),
|
||||||
|
},
|
||||||
|
deferUpdate: jest.fn(),
|
||||||
|
editReply: jest.fn(),
|
||||||
|
message: {
|
||||||
|
createdAt: new Date(1000 * 60 * 27),
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
id: "userId",
|
||||||
|
},
|
||||||
|
customId: "claim cardNumber claimId droppedBy userId",
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
test.todo("GIVEN user.RemoveCurrency fails, EXPECT error");
|
afterAll(() => {
|
||||||
|
jest.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("GIVEN interaction.guild is null, EXPECT nothing to happen", async () => {
|
||||||
|
// Arrange
|
||||||
|
interaction.guild = null;
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const claim = new Claim();
|
||||||
|
await claim.execute(interaction as unknown as ButtonInteraction);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(interaction.deferUpdate).not.toHaveBeenCalled();
|
||||||
|
expect(interaction.editReply).not.toHaveBeenCalled();
|
||||||
|
expect((interaction.channel as TextChannel).send).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("GIVEN interaction.guildId is null, EXPECT nothing to happen", async () => {
|
||||||
|
// Arrange
|
||||||
|
interaction.guildId = null;
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const claim = new Claim();
|
||||||
|
await claim.execute(interaction as unknown as ButtonInteraction);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(interaction.deferUpdate).not.toHaveBeenCalled();
|
||||||
|
expect(interaction.editReply).not.toHaveBeenCalled();
|
||||||
|
expect((interaction.channel as TextChannel).send).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("GIVEN interaction.channel is null, EXPECT nothing to happen", async () => {
|
||||||
|
// Arrange
|
||||||
|
interaction.channel = null;
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const claim = new Claim();
|
||||||
|
await claim.execute(interaction as unknown as ButtonInteraction);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(interaction.deferUpdate).not.toHaveBeenCalled();
|
||||||
|
expect(interaction.editReply).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("GIVEN channel is not sendable, EXPECT nothing to happen", async () => {
|
||||||
|
// Arrange
|
||||||
|
interaction.channel!.isSendable = jest.fn().mockReturnValue(false);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const claim = new Claim();
|
||||||
|
await claim.execute(interaction as unknown as ButtonInteraction);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(interaction.deferUpdate).not.toHaveBeenCalled();
|
||||||
|
expect(interaction.editReply).not.toHaveBeenCalled();
|
||||||
|
expect((interaction.channel as TextChannel).send).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("GIVEN interaction.message was created more than 5 minutes ago, EXPECT error", async () => {
|
||||||
|
// Arrange
|
||||||
|
interaction.message!.createdAt = new Date(0);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const claim = new Claim();
|
||||||
|
await claim.execute(interaction as unknown as ButtonInteraction);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(interaction.channel!.send).toHaveBeenCalledTimes(1);
|
||||||
|
expect(interaction.channel!.send).toHaveBeenCalledWith("[object Object], Cards can only be claimed within 5 minutes of it being dropped!");
|
||||||
|
|
||||||
|
expect(interaction.editReply).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("GIVEN user.RemoveCurrency fails, EXPECT error", async () => {
|
||||||
|
// Arrange
|
||||||
|
User.FetchOneById = jest.fn().mockResolvedValue({
|
||||||
|
RemoveCurrency: jest.fn().mockReturnValue(false),
|
||||||
|
Currency: 5,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const claim = new Claim();
|
||||||
|
await claim.execute(interaction as unknown as ButtonInteraction);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(interaction.channel!.send).toHaveBeenCalledTimes(1);
|
||||||
|
expect(interaction.channel!.send).toHaveBeenCalledWith("[object Object], Not enough currency! You need 10 currency, you have 5!");
|
||||||
|
|
||||||
|
expect(interaction.editReply).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
test.todo("GIVEN the card has already been claimed, EXPECT error");
|
test.todo("GIVEN the card has already been claimed, EXPECT error");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue