This commit is contained in:
parent
ea6bac2af1
commit
69ef94dbb5
84 changed files with 993 additions and 7394 deletions
|
@ -1,153 +1,23 @@
|
|||
import { mock } from "jest-mock-extended";
|
||||
|
||||
const connectionMock = mock<Connection>();
|
||||
const qbuilderMock = mock<SelectQueryBuilder<any>>();
|
||||
|
||||
let repositoryMock = mock<Repository<any>>();
|
||||
let settingMock = mock<Setting>();
|
||||
|
||||
jest.mock('typeorm', () => {
|
||||
qbuilderMock.where.mockReturnThis();
|
||||
qbuilderMock.select.mockReturnThis();
|
||||
repositoryMock.createQueryBuilder.mockReturnValue(qbuilderMock);
|
||||
repositoryMock.findOne.mockImplementation(async () => {
|
||||
return settingMock;
|
||||
});
|
||||
connectionMock.getRepository.mockReturnValue(repositoryMock);
|
||||
|
||||
return {
|
||||
getConnection: () => connectionMock,
|
||||
createConnection: () => connectionMock,
|
||||
|
||||
BaseEntity: class Mock {},
|
||||
ObjectType: () => {},
|
||||
Entity: () => {},
|
||||
InputType: () => {},
|
||||
Index: () => {},
|
||||
PrimaryColumn: () => {},
|
||||
Column: () => {},
|
||||
CreateDateColumn: () => {},
|
||||
UpdateDateColumn: () => {},
|
||||
OneToMany: () => {},
|
||||
ManyToOne: () => {},
|
||||
}
|
||||
describe('constructor', () => {
|
||||
test.todo("EXPECT properties to be set");
|
||||
});
|
||||
|
||||
jest.mock("discord.js");
|
||||
jest.mock("dotenv");
|
||||
jest.mock("../../src/client/events");
|
||||
jest.mock("../../src/client/util");
|
||||
jest.mock("../../src/constants/DefaultValues");
|
||||
describe('start', () => {
|
||||
test.todo("EXPECT bot to start");
|
||||
|
||||
import { CoreClient } from "../../src/client/client";
|
||||
test.todo("GIVEN BOT_TOKEN is not in env var, EXPECT error");
|
||||
|
||||
import { Client } from "discord.js";
|
||||
import * as dotenv from "dotenv";
|
||||
import { Events } from "../../src/client/events";
|
||||
import { Util } from "../../src/client/util";
|
||||
import { Command } from "../../src/type/command";
|
||||
import { Event } from "../../src/type/event";
|
||||
import DefaultValues from "../../src/constants/DefaultValues";
|
||||
import { Connection, Repository, SelectQueryBuilder } from "typeorm";
|
||||
import Setting from "../../src/entity/Setting";
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetAllMocks();
|
||||
jest.resetModules();
|
||||
})
|
||||
|
||||
describe('Constructor', () => {
|
||||
test('Expect Successful Initialisation', () => {
|
||||
const coreClient = new CoreClient();
|
||||
|
||||
expect(coreClient).toBeInstanceOf(Client);
|
||||
expect(dotenv.config).toBeCalledTimes(1);
|
||||
expect(Events).toBeCalledTimes(1);
|
||||
expect(Util).toBeCalledTimes(1);
|
||||
expect(DefaultValues.useDevPrefix).toBe(false);
|
||||
});
|
||||
|
||||
test('Given devmode parameter is true, Expect devmode prefix to be true', () => {
|
||||
const coreClient = new CoreClient(true);
|
||||
|
||||
expect(coreClient).toBeInstanceOf(Client);
|
||||
expect(dotenv.config).toBeCalledTimes(1);
|
||||
expect(Events).toBeCalledTimes(1);
|
||||
expect(Util).toBeCalledTimes(1);
|
||||
expect(DefaultValues.useDevPrefix).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Start', () => {
|
||||
test('Given Env Is Valid, Expect Successful Start', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: "TOKEN",
|
||||
};
|
||||
|
||||
const coreClient = new CoreClient();
|
||||
|
||||
await coreClient.start();
|
||||
|
||||
expect(coreClient.on).toBeCalledWith("message", expect.any(Function));
|
||||
expect(coreClient.on).toBeCalledWith("ready", expect.any(Function));
|
||||
});
|
||||
|
||||
test('Given BOT_TOKEN Is Null, Expect Failure', async () => {
|
||||
process.env = {};
|
||||
|
||||
const consoleError = jest.fn();
|
||||
|
||||
console.error = consoleError;
|
||||
|
||||
const coreClient = new CoreClient();
|
||||
|
||||
await coreClient.start();
|
||||
|
||||
expect(consoleError).toBeCalledWith("BOT_TOKEN is not defined in .env");
|
||||
expect(coreClient.on).not.toBeCalled();
|
||||
expect(coreClient.login).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given BOT_TOKEN Is Empty, Expect Failure', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: '',
|
||||
}
|
||||
|
||||
const consoleError = jest.fn();
|
||||
|
||||
console.error = consoleError;
|
||||
|
||||
const coreClient = new CoreClient();
|
||||
|
||||
await coreClient.start();
|
||||
|
||||
expect(consoleError).toBeCalledWith("BOT_TOKEN is not defined in .env");
|
||||
expect(coreClient.on).not.toBeCalled();
|
||||
expect(coreClient.login).not.toBeCalled();
|
||||
});
|
||||
test.todo("GIVEN database connection can not be initialised, EXPECT error");
|
||||
});
|
||||
|
||||
describe('RegisterCommand', () => {
|
||||
test('Expect command added to register', () => {
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const client = new CoreClient();
|
||||
client.RegisterCommand("test", cmd);
|
||||
|
||||
expect(client.commandItems.length).toBe(1);
|
||||
expect(client.commandItems[0].Name).toBe("test");
|
||||
expect(client.commandItems[0].Command).toBe(cmd);
|
||||
});
|
||||
test.todo("EXPECT command to be added to list");
|
||||
});
|
||||
|
||||
describe('RegisterEvent', () => {
|
||||
test('Expect event added to register', () => {
|
||||
const evt = mock<Event>();
|
||||
|
||||
const client = new CoreClient();
|
||||
client.RegisterEvent(evt);
|
||||
describe("RegisterEvent", () => {
|
||||
test.todo("EXPECT event to be added to list");
|
||||
});
|
||||
|
||||
expect(client.eventItems.length).toBe(1);
|
||||
expect(client.eventItems[0].Event).toBe(evt);
|
||||
});
|
||||
describe("RegisterButtonEvent", () => {
|
||||
test.todo("EXPECT button event to be added to list");
|
||||
});
|
|
@ -1,241 +1,11 @@
|
|||
import { Events } from "../../src/client/events";
|
||||
import { Message } from "discord.js";
|
||||
import { Util } from "../../src/client/util";
|
||||
import ICommandItem from "../../src/contracts/ICommandItem";
|
||||
import { Command } from "../../src/type/command";
|
||||
import { mock } from "jest-mock-extended";
|
||||
describe('onInteractionCreate', () => {
|
||||
test.todo("GIVEN the interaction is a chat input command, EXPECT chat input command handler to be executed");
|
||||
|
||||
jest.mock("../../src/client/util");
|
||||
test.todo("GIVEN the interaction is a button, EXPECT button handler to be executed");
|
||||
|
||||
beforeEach(() => {
|
||||
Util.prototype.loadCommand = jest.fn();
|
||||
test.todo("GIVEN interaction.guildId is null, EXPECT nothing to happen");
|
||||
});
|
||||
|
||||
describe('OnMessage', () => {
|
||||
test('Given Message Is Valid Expect Message Sent', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
};
|
||||
|
||||
Util.prototype.loadCommand = jest.fn().mockReturnValue({ valid: true });
|
||||
|
||||
const message = {
|
||||
guild: {},
|
||||
author: {
|
||||
bot: false,
|
||||
},
|
||||
content: "!test first",
|
||||
} as unknown as Message;
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const events = new Events();
|
||||
|
||||
const result = await events.onMessage(message, commands);
|
||||
|
||||
expect(result.valid).toBeTruthy();
|
||||
|
||||
expect(result.context?.prefix).toBe('!');
|
||||
expect(result.context?.name).toBe('test');
|
||||
expect(result.context?.args.length).toBe(1);
|
||||
expect(result.context?.args[0]).toBe('first');
|
||||
expect(result.context?.message).toBe(message);
|
||||
});
|
||||
|
||||
test('Given Guild Is Null, Expect Failed Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
Util.prototype.loadCommand = jest.fn().mockReturnValue({ valid: true });
|
||||
|
||||
const message = {
|
||||
guild: null,
|
||||
author: {
|
||||
bot: false,
|
||||
},
|
||||
content: "!test first",
|
||||
} as unknown as Message;
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const events = new Events();
|
||||
|
||||
const result = await events.onMessage(message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Message was not sent in a guild, ignoring.");
|
||||
});
|
||||
|
||||
test('Given Author Is A Bot, Expect Failed Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
Util.prototype.loadCommand = jest.fn().mockReturnValue({ valid: true });
|
||||
|
||||
const message = {
|
||||
guild: {},
|
||||
author: {
|
||||
bot: true,
|
||||
},
|
||||
content: "!test first",
|
||||
} as unknown as Message;
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const events = new Events();
|
||||
|
||||
const result = await events.onMessage(message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Message was sent by a bot, ignoring.");
|
||||
});
|
||||
|
||||
test('Given Message Content Was Not A Command, Expect Failed Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
Util.prototype.loadCommand = jest.fn().mockReturnValue({ valid: true });
|
||||
|
||||
const message = {
|
||||
guild: {},
|
||||
author: {
|
||||
bot: false,
|
||||
},
|
||||
content: "This is a standard message",
|
||||
} as unknown as Message;
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const events = new Events();
|
||||
|
||||
const result = await events.onMessage(message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Message was not a command, ignoring.");
|
||||
});
|
||||
|
||||
test('Given Message Had No Command Name, Expect Failed Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
Util.prototype.loadCommand = jest.fn().mockReturnValue({ valid: true });
|
||||
|
||||
const message = {
|
||||
guild: {},
|
||||
author: {
|
||||
bot: false,
|
||||
},
|
||||
content: "!",
|
||||
} as unknown as Message;
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const events = new Events();
|
||||
|
||||
const result = await events.onMessage(message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Command name was not found");
|
||||
});
|
||||
|
||||
test('Given Command Failed To Execute, Expect Failed Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
Util.prototype.loadCommand = jest.fn().mockReturnValue({ valid: false, message: "Command failed" });
|
||||
|
||||
const message = {
|
||||
guild: {},
|
||||
author: {
|
||||
bot: false,
|
||||
},
|
||||
content: "!test first",
|
||||
} as unknown as Message;
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const events = new Events();
|
||||
|
||||
const result = await events.onMessage(message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Command failed");
|
||||
});
|
||||
});
|
||||
|
||||
describe('OnReady', () => {
|
||||
test('Expect Console Log', () => {
|
||||
console.log = jest.fn();
|
||||
|
||||
const events = new Events();
|
||||
|
||||
events.onReady();
|
||||
|
||||
expect(console.log).toBeCalledWith("Ready");
|
||||
});
|
||||
});
|
||||
describe("onReady", () => {
|
||||
test.todo("EXPECT console to be logged");
|
||||
});
|
7
tests/client/interactionCreate/button.test.ts
Normal file
7
tests/client/interactionCreate/button.test.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
describe('onButtonClicked', () => {
|
||||
test.todo("EXPECT button event to be executed");
|
||||
|
||||
test.todo("GIVEN interaction is not a button, EXEPCT nothing to happen");
|
||||
|
||||
test.todo("GIVEN button event is not registered, EXPECT error");
|
||||
});
|
9
tests/client/interactionCreate/chatInputCommand.test.ts
Normal file
9
tests/client/interactionCreate/chatInputCommand.test.ts
Normal file
|
@ -0,0 +1,9 @@
|
|||
describe('onChatInput', () => {
|
||||
test.todo("GIVEN command is registered globally AND command is found, execute the global command");
|
||||
|
||||
test.todo("GIVEN command is registered to a single server, execute the server command");
|
||||
|
||||
test.todo("GIVEN interaction is not a chat input command, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN command is registered globally AND command is not found, EXPECT error");
|
||||
});
|
|
@ -1,370 +1,31 @@
|
|||
import { Util } from "../../src/client/util";
|
||||
describe("loadSlashCommands", () => {
|
||||
test.todo("EXPECT slash commands to be loaded to the discord API");
|
||||
|
||||
import { Client, Message } from "discord.js";
|
||||
import fs from "fs";
|
||||
import { mock } from "jest-mock-extended";
|
||||
import { Command } from "../../src/type/command";
|
||||
import ICommandItem from "../../src/contracts/ICommandItem";
|
||||
import IEventItem from "../../src/contracts/IEventItem";
|
||||
import { Event } from "../../src/type/event";
|
||||
|
||||
jest.mock("fs");
|
||||
|
||||
beforeEach(() => {
|
||||
fs.existsSync = jest.fn();
|
||||
test.todo("GIVEN bot is not in a guild for a server command, EXPECT this to be ignored");
|
||||
});
|
||||
|
||||
describe('LoadCommand', () => {
|
||||
test('Given Successful Exection, Expect Successful Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: {
|
||||
roles: {
|
||||
cache: {
|
||||
find: jest.fn().mockReturnValue(true),
|
||||
}
|
||||
},
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as Message;
|
||||
describe("loadEvents", () => {
|
||||
test.todo("GIVEN event type is channelCreate, EXPECT event function to be executed");
|
||||
|
||||
const cmd = mock<Command>();
|
||||
test.todo("GIVEN event type is channelDelete, EXPECT event function to be executed");
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
test.todo("GIVEN event type is channelUpdate, EXPECT event function to be executed");
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeTruthy();
|
||||
expect(cmd.execute).toBeCalled();
|
||||
});
|
||||
|
||||
test('Given Member Is Null, Expect Failed Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: null
|
||||
} as unknown as Message;
|
||||
test.todo("GIVEN event type is guildBanAdd, EXPECT event function to be executed");
|
||||
|
||||
const cmd = mock<Command>();
|
||||
test.todo("GIVEN event type is guildBanRemove, EXPECT event function to be executed");
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
test.todo("GIVEN event type is guildCreate, EXPECT event function to be executed");
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Member is not part of message");
|
||||
expect(cmd.execute).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given User Does Have Role, Expect Successful Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: {
|
||||
roles: {
|
||||
cache: {
|
||||
find: jest.fn().mockReturnValue(true),
|
||||
}
|
||||
},
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as Message;
|
||||
test.todo("GIVEN event type is guildMemberAdd, EXPECT event function to be executed");
|
||||
|
||||
const cmd = mock<Command>();
|
||||
test.todo("GIVEN event type is guildMemberRemove, EXPECT event function to be executed");
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
test.todo("GIVEN event type is messageCreate, EXPECT event function to be executed");
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeTruthy();
|
||||
expect(cmd.execute).toBeCalled();
|
||||
});
|
||||
|
||||
test('Given User Does Not Have Role, Expect Failed Result', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: {
|
||||
roles: {
|
||||
cache: {
|
||||
find: jest.fn().mockReturnValue(false),
|
||||
}
|
||||
},
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as Message;
|
||||
test.todo("GIVEN event type is messageDelete, EXPECT event function to be executed");
|
||||
|
||||
const cmd = mock<Command>();
|
||||
cmd._roles = [ "Moderator" ];
|
||||
test.todo("GIVEN event type is messageUpdate, EXPECT event function to be executed");
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("You require the `Moderator` role to run this command");
|
||||
expect(cmd.execute).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given command is set to disabled, Expect command to not fire', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
COMMANDS_DISABLED: 'test',
|
||||
COMMANDS_DISABLED_MESSAGE: 'disabled',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: {
|
||||
roles: {
|
||||
cache: {
|
||||
find: jest.fn().mockReturnValue(true),
|
||||
}
|
||||
},
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as Message;
|
||||
|
||||
const messageReply = jest.spyOn(message, 'reply');
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Command is disabled");
|
||||
expect(messageReply).toBeCalledWith("disabled");
|
||||
expect(cmd.execute).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given command COMMANDS_DISABLED_MESSAGE is empty, Expect default message sent', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
COMMANDS_DISABLED: 'test',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: {
|
||||
roles: {
|
||||
cache: {
|
||||
find: jest.fn().mockReturnValue(true),
|
||||
}
|
||||
},
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as Message;
|
||||
|
||||
const messageReply = jest.spyOn(message, 'reply');
|
||||
|
||||
const cmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe("Command is disabled");
|
||||
expect(messageReply).toBeCalledWith("This command is disabled.");
|
||||
expect(cmd.execute).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given a different command is disabled, Expect command to still fire', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
COMMANDS_DISABLED: 'other',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: {
|
||||
roles: {
|
||||
cache: {
|
||||
find: jest.fn().mockReturnValue(true),
|
||||
}
|
||||
},
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as Message;
|
||||
|
||||
const cmd = mock<Command>();
|
||||
const otherCmd = mock<Command>();
|
||||
|
||||
const commandItem: ICommandItem = {
|
||||
Name: "test",
|
||||
Command: cmd
|
||||
};
|
||||
|
||||
const otherCommandItem: ICommandItem = {
|
||||
Name: "other",
|
||||
Command: otherCmd,
|
||||
}
|
||||
|
||||
const commands: ICommandItem[] = [ commandItem, otherCommandItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeTruthy();
|
||||
expect(cmd.execute).toBeCalled();
|
||||
expect(otherCmd.execute).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given command is not found in register, expect command not found error', async () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
const message = {
|
||||
member: {
|
||||
roles: {
|
||||
cache: {
|
||||
find: jest.fn().mockReturnValue(true),
|
||||
}
|
||||
},
|
||||
},
|
||||
reply: jest.fn(),
|
||||
} as unknown as Message;
|
||||
|
||||
const commands: ICommandItem[] = [];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = await util.loadCommand("test", [ "first" ], message, commands);
|
||||
|
||||
expect(result.valid).toBeFalsy();
|
||||
expect(result.message).toBe('Command not found');
|
||||
expect(message.reply).toBeCalledWith('Command not found');
|
||||
});
|
||||
});
|
||||
|
||||
describe('LoadEvents', () => {
|
||||
test('Given Events Are Loaded, Expect Successful Result', () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
const client = {
|
||||
on: jest.fn(),
|
||||
} as unknown as Client;
|
||||
|
||||
const evt = mock<Event>();
|
||||
|
||||
const eventItem: IEventItem = {
|
||||
Event: evt
|
||||
};
|
||||
|
||||
const eventItems: IEventItem[] = [ eventItem ];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = util.loadEvents(client, eventItems);
|
||||
|
||||
const clientOn = jest.spyOn(client, 'on');
|
||||
|
||||
expect(result.valid).toBeTruthy();
|
||||
expect(clientOn).toBeCalledTimes(13);
|
||||
});
|
||||
|
||||
test('Given No Events Found, Expect Successful Result', () => {
|
||||
process.env = {
|
||||
BOT_TOKEN: 'TOKEN',
|
||||
BOT_PREFIX: '!',
|
||||
FOLDERS_COMMANDS: 'commands',
|
||||
FOLDERS_EVENTS: 'events',
|
||||
}
|
||||
|
||||
const client = {
|
||||
on: jest.fn(),
|
||||
} as unknown as Client;
|
||||
|
||||
const eventItems: IEventItem[] = [];
|
||||
|
||||
const util = new Util();
|
||||
|
||||
const result = util.loadEvents(client, eventItems);
|
||||
|
||||
const clientOn = jest.spyOn(client, 'on');
|
||||
|
||||
expect(result.valid).toBeTruthy();
|
||||
expect(clientOn).toBeCalledTimes(0);
|
||||
});
|
||||
});
|
||||
test.todo("GIVEN event type is not implemented, EXPECT error");
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue