Create disable command tests
This commit is contained in:
parent
bd6858daa3
commit
ac51eb7f40
2 changed files with 272 additions and 32 deletions
|
@ -48,17 +48,12 @@ export default class Disable extends Command {
|
|||
private async Add(interaction: CommandInteraction) {
|
||||
if (!interaction.guildId) return;
|
||||
|
||||
const commandName = interaction.options.get('name');
|
||||
|
||||
if (!commandName || !commandName.value) {
|
||||
await interaction.reply('Fields are required.');
|
||||
return;
|
||||
}
|
||||
const commandName = interaction.options.get('name', true);
|
||||
|
||||
const disabledCommandsString = await SettingsHelper.GetSetting("commands.disabled", interaction.guildId);
|
||||
const disabledCommands = disabledCommandsString != "" ? disabledCommandsString?.split(",") : [];
|
||||
const disabledCommands = disabledCommandsString != undefined ? disabledCommandsString?.split(",") : [];
|
||||
|
||||
disabledCommands?.push(commandName.value.toString());
|
||||
disabledCommands?.push(commandName.value!.toString());
|
||||
|
||||
await SettingsHelper.SetSetting("commands.disabled", interaction.guildId, disabledCommands!.join(","));
|
||||
|
||||
|
@ -68,23 +63,18 @@ export default class Disable extends Command {
|
|||
private async Remove(interaction: CommandInteraction) {
|
||||
if (!interaction.guildId) return;
|
||||
|
||||
const commandName = interaction.options.get('name');
|
||||
|
||||
if (!commandName || !commandName.value) {
|
||||
await interaction.reply('Fields are required.');
|
||||
return;
|
||||
}
|
||||
const commandName = interaction.options.get('name', true);
|
||||
|
||||
const disabledCommandsString = await SettingsHelper.GetSetting("commands.disabled", interaction.guildId);
|
||||
const disabledCommands = disabledCommandsString != "" ? disabledCommandsString?.split(",") : [];
|
||||
const disabledCommands = disabledCommandsString != undefined ? disabledCommandsString?.split(",") : [];
|
||||
|
||||
const disabledCommandsInstance = disabledCommands?.findIndex(x => x == commandName.value!.toString());
|
||||
|
||||
if (disabledCommandsInstance! > -1) {
|
||||
disabledCommands?.splice(disabledCommandsInstance!, 1);
|
||||
if (disabledCommandsInstance > -1) {
|
||||
disabledCommands?.splice(disabledCommandsInstance, 1);
|
||||
}
|
||||
|
||||
await SettingsHelper.SetSetting("commands.disabled", interaction.guildId, disabledCommands!.join(","));
|
||||
await SettingsHelper.SetSetting("commands.disabled", interaction.guildId, disabledCommands.join(","));
|
||||
|
||||
await interaction.reply(`Enabled command ${commandName.value}`);
|
||||
}
|
||||
|
|
|
@ -1,35 +1,285 @@
|
|||
import { ChatInputCommandInteraction, PermissionsBitField, SlashCommandBuilder, SlashCommandStringOption, SlashCommandSubcommandBuilder } from "discord.js";
|
||||
import Command from "../../src/commands/disable";
|
||||
import SettingsHelper from "../../src/helpers/SettingsHelper";
|
||||
|
||||
describe('constructor', () => {
|
||||
test.todo('EXPECT properties to be set');
|
||||
test('EXPECT properties to be set', () => {
|
||||
const command = new Command();
|
||||
|
||||
expect(command.CommandBuilder).toBeDefined();
|
||||
|
||||
const commandBuilder = command.CommandBuilder as SlashCommandBuilder;
|
||||
|
||||
expect(commandBuilder.name).toBe("disable");
|
||||
expect(commandBuilder.description).toBe("Disables a command");
|
||||
expect(commandBuilder.default_member_permissions).toBe(PermissionsBitField.Flags.Administrator.toString());
|
||||
expect(commandBuilder.options.length).toBe(2);
|
||||
|
||||
const commandBuilderAddSubcommand = commandBuilder.options[0] as SlashCommandSubcommandBuilder;
|
||||
|
||||
expect(commandBuilderAddSubcommand.name).toBe("add");
|
||||
expect(commandBuilderAddSubcommand.description).toBe("Disables a command for the server");
|
||||
expect(commandBuilderAddSubcommand.options.length).toBe(1);
|
||||
|
||||
const commandBuilderAddSubcommandNameOption = commandBuilderAddSubcommand.options[0] as SlashCommandStringOption;
|
||||
|
||||
expect(commandBuilderAddSubcommandNameOption.name).toBe("name");
|
||||
expect(commandBuilderAddSubcommandNameOption.description).toBe("The name of the command");
|
||||
expect(commandBuilderAddSubcommandNameOption.required).toBe(true);
|
||||
|
||||
const commandBuilderRemoveSubcommand = commandBuilder.options[1] as SlashCommandSubcommandBuilder;
|
||||
|
||||
expect(commandBuilderRemoveSubcommand.name).toBe("remove");
|
||||
expect(commandBuilderRemoveSubcommand.description).toBe("Enables a command for the server");
|
||||
expect(commandBuilderRemoveSubcommand.options.length).toBe(1);
|
||||
|
||||
const commandBuilderRemoveSubcommandNameOption = commandBuilderRemoveSubcommand.options[0] as SlashCommandStringOption;
|
||||
|
||||
expect(commandBuilderRemoveSubcommandNameOption.name).toBe("name");
|
||||
expect(commandBuilderRemoveSubcommandNameOption.description).toBe("The name of the command");
|
||||
expect(commandBuilderRemoveSubcommandNameOption.required).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('execute', () => {
|
||||
test.todo("GIVEN interaction is not a chat input command, EXPECT nothing to happen");
|
||||
test("GIVEN interaction is not a chat input command, EXPECT nothing to happen", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
isChatInputCommand: jest.fn().mockReturnValue(false),
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
test.todo("GIVEN subcommand is invalid, EXPECT error");
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
// Assert
|
||||
expect(interaction.isChatInputCommand).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN subcommand is invalid, EXPECT error", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("invalid"),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
// Assert
|
||||
expect(interaction.options.getSubcommand).toHaveBeenCalledTimes(1);
|
||||
|
||||
expect(interaction.reply).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.reply).toHaveBeenCalledWith("Subcommand not found.");
|
||||
});
|
||||
});
|
||||
|
||||
describe('add', () => {
|
||||
test.todo("EXPECT command to be added to disabled list");
|
||||
test("EXPECT command to be added to disabled list", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
guildId: "guildId",
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("add"),
|
||||
get: jest.fn().mockReturnValue({
|
||||
value: "testCommand",
|
||||
}),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
test.todo("GIVEN interaction.guildId is null, EXPECT nothing to happen");
|
||||
SettingsHelper.GetSetting = jest.fn().mockResolvedValue("otherCommand");
|
||||
SettingsHelper.SetSetting = jest.fn();
|
||||
|
||||
test.todo("GIVEN commandName is null, EXPECT error");
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
test.todo("GIVEN commandName.value is undefined, EXEPCT error");
|
||||
// Assert
|
||||
expect(interaction.options.get).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.options.get).toHaveBeenCalledWith("name", true);
|
||||
|
||||
test.todo("GIVEN disabledCommandsString is empty, EXPECT empty disabledCommands array to be used");
|
||||
expect(SettingsHelper.GetSetting).toHaveBeenCalledTimes(1);
|
||||
expect(SettingsHelper.GetSetting).toHaveBeenCalledWith("commands.disabled", "guildId");
|
||||
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledTimes(1);
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledWith("commands.disabled", "guildId", "otherCommand,testCommand");
|
||||
|
||||
expect(interaction.reply).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.reply).toHaveBeenCalledWith("Disabled command testCommand");
|
||||
});
|
||||
|
||||
test("GIVEN interaction.guildId is null, EXPECT nothing to happen", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
guildId: null,
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("add"),
|
||||
get: jest.fn().mockReturnValue({
|
||||
value: "testCommand",
|
||||
}),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
SettingsHelper.GetSetting = jest.fn().mockResolvedValue("otherCommand");
|
||||
SettingsHelper.SetSetting = jest.fn();
|
||||
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
// Assert
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(SettingsHelper.SetSetting).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN disabledCommandsString is undefined, EXPECT empty disabledCommands array to be used", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
guildId: "guildId",
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("add"),
|
||||
get: jest.fn().mockReturnValue({
|
||||
value: "testCommand",
|
||||
}),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
SettingsHelper.GetSetting = jest.fn().mockResolvedValue(undefined);
|
||||
SettingsHelper.SetSetting = jest.fn();
|
||||
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
// Assert
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledTimes(1);
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledWith("commands.disabled", "guildId", "testCommand");
|
||||
});
|
||||
});
|
||||
|
||||
describe("remove", () => {
|
||||
test.todo("EXPECT command to be removed from disabled list");
|
||||
test("EXPECT command to be removed from disabled list", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
guildId: "guildId",
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("remove"),
|
||||
get: jest.fn().mockReturnValue({
|
||||
value: "testCommand",
|
||||
}),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
test.todo("GIVEN interaction.guildId is null, EXPECT nothing to happen");
|
||||
SettingsHelper.GetSetting = jest.fn().mockResolvedValue("otherCommand,testCommand");
|
||||
SettingsHelper.SetSetting = jest.fn();
|
||||
|
||||
test.todo("GIVEN commandName is null, EXPECT error");
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
test.todo("GIVEN commandName.value is undefined, EXPECT error");
|
||||
// Assert
|
||||
expect(interaction.options.get).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.options.get).toHaveBeenCalledWith("name", true);
|
||||
|
||||
test.todo("GIVEN disabledCommandsString is empty, EXPECT empty disabledCommands array to be used");
|
||||
expect(SettingsHelper.GetSetting).toHaveBeenCalledTimes(1);
|
||||
expect(SettingsHelper.GetSetting).toHaveBeenCalledWith("commands.disabled", "guildId");
|
||||
|
||||
test.todo("GIVEN instance of commandName is not found in disabledCommands array, EXPECT it not to try to remove it");
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledTimes(1);
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledWith("commands.disabled", "guildId", "otherCommand");
|
||||
|
||||
expect(interaction.reply).toHaveBeenCalledTimes(1);
|
||||
expect(interaction.reply).toHaveBeenCalledWith("Enabled command testCommand");
|
||||
});
|
||||
|
||||
test("GIVEN interaction.guildId is null, EXPECT nothing to happen", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
guildId: null,
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("remove"),
|
||||
get: jest.fn().mockReturnValue({
|
||||
value: "testCommand",
|
||||
}),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
SettingsHelper.GetSetting = jest.fn().mockResolvedValue("otherCommand,testCommand");
|
||||
SettingsHelper.SetSetting = jest.fn();
|
||||
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
// Assert
|
||||
expect(interaction.reply).not.toHaveBeenCalled();
|
||||
expect(SettingsHelper.SetSetting).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("GIVEN disabledCommandsString is undefined, EXPECT empty disabledCommands array to be used", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
guildId: "guildId",
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("remove"),
|
||||
get: jest.fn().mockReturnValue({
|
||||
value: "testCommand",
|
||||
}),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
SettingsHelper.GetSetting = jest.fn().mockResolvedValue(undefined);
|
||||
SettingsHelper.SetSetting = jest.fn();
|
||||
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
// Assert
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledTimes(1);
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledWith("commands.disabled", "guildId", "");
|
||||
});
|
||||
|
||||
test("GIVEN instance of commandName is not found in disabledCommands array, EXPECT it not to try to remove it", async () => {
|
||||
// Arrange
|
||||
const interaction = {
|
||||
guildId: "guildId",
|
||||
isChatInputCommand: jest.fn().mockReturnValue(true),
|
||||
options: {
|
||||
getSubcommand: jest.fn().mockReturnValue("remove"),
|
||||
get: jest.fn().mockReturnValue({
|
||||
value: "testCommand",
|
||||
}),
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as ChatInputCommandInteraction;
|
||||
|
||||
SettingsHelper.GetSetting = jest.fn().mockResolvedValue("otherCommand");
|
||||
SettingsHelper.SetSetting = jest.fn();
|
||||
|
||||
// Act
|
||||
const command = new Command();
|
||||
await command.execute(interaction);
|
||||
|
||||
// Assert
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledTimes(1);
|
||||
expect(SettingsHelper.SetSetting).toHaveBeenCalledWith("commands.disabled", "guildId", "otherCommand");
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue