commit
10fe4501b5
16 changed files with 3810 additions and 55 deletions
|
@ -1 +1,2 @@
|
||||||
tests
|
node_modules
|
||||||
|
dist
|
46
.eslintrc
46
.eslintrc
|
@ -1,44 +1,14 @@
|
||||||
{
|
{
|
||||||
"parserOptions": {
|
"root": true,
|
||||||
"ecmaVersion": 6
|
"parser": "@typescript-eslint/parser",
|
||||||
},
|
"plugins": [
|
||||||
|
"@typescript-eslint"
|
||||||
|
],
|
||||||
"extends": [
|
"extends": [
|
||||||
"eslint:recommended"
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/eslint-recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended"
|
||||||
],
|
],
|
||||||
"rules": {
|
|
||||||
"camelcase": "error",
|
|
||||||
"brace-style": [
|
|
||||||
"error",
|
|
||||||
"1tbs"
|
|
||||||
],
|
|
||||||
"comma-dangle": [
|
|
||||||
"error",
|
|
||||||
"never"
|
|
||||||
],
|
|
||||||
"comma-spacing": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
"before": false,
|
|
||||||
"after": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"comma-style": [
|
|
||||||
"error",
|
|
||||||
"last"
|
|
||||||
],
|
|
||||||
"arrow-body-style": [
|
|
||||||
"error",
|
|
||||||
"as-needed"
|
|
||||||
],
|
|
||||||
"arrow-parens": [
|
|
||||||
"error",
|
|
||||||
"as-needed"
|
|
||||||
],
|
|
||||||
"arrow-spacing": "error",
|
|
||||||
"no-var": "error",
|
|
||||||
"prefer-template": "error",
|
|
||||||
"prefer-const": "error"
|
|
||||||
},
|
|
||||||
"globals": {
|
"globals": {
|
||||||
"exports": "writable",
|
"exports": "writable",
|
||||||
"module": "writable",
|
"module": "writable",
|
||||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -108,8 +108,8 @@ commands/
|
||||||
events/
|
events/
|
||||||
/bot.ts
|
/bot.ts
|
||||||
|
|
||||||
!tests/commands/
|
!tests/__mocks/commands
|
||||||
!tests/events/
|
!tests/__mocks/events
|
||||||
|
|
||||||
# Linux Environment Files
|
# Linux Environment Files
|
||||||
*.swp
|
*.swp
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
/** @type {import('@ts-jest/dist/types').InitialOptionsTsJest} */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
testEnvironment: 'node'
|
preset: 'ts-jest',
|
||||||
}
|
testEnvironment: 'node',
|
||||||
|
};
|
|
@ -6,8 +6,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"test": "jest --coverage",
|
"test": "jest --coverage",
|
||||||
"lint": "eslint .",
|
"lint": "eslint ."
|
||||||
"lint:fix": "eslint . --fix"
|
|
||||||
},
|
},
|
||||||
"author": "Vylpes",
|
"author": "Vylpes",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
@ -25,7 +24,13 @@
|
||||||
],
|
],
|
||||||
"repository": "github:vylpes/vylbot-core",
|
"repository": "github:vylpes/vylbot-core",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/jest": "^26.0.24",
|
||||||
"@types/node": "^16.3.2",
|
"@types/node": "^16.3.2",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^4.29.2",
|
||||||
|
"@typescript-eslint/parser": "^4.29.2",
|
||||||
|
"eslint": "^7.32.0",
|
||||||
|
"jest": "^27.0.6",
|
||||||
|
"ts-jest": "^27.0.4",
|
||||||
"typescript": "^4.3.5"
|
"typescript": "^4.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,6 @@ export class Events {
|
||||||
// Emit when a message is sent
|
// Emit when a message is sent
|
||||||
// Used to check for commands
|
// Used to check for commands
|
||||||
public onMessage(message: Message): IEventResponse {
|
public onMessage(message: Message): IEventResponse {
|
||||||
if (!message) return {
|
|
||||||
valid: false,
|
|
||||||
message: "Message was not supplied.",
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!message.guild) return {
|
if (!message.guild) return {
|
||||||
valid: false,
|
valid: false,
|
||||||
message: "Message was not sent in a guild, ignoring.",
|
message: "Message was not sent in a guild, ignoring.",
|
||||||
|
@ -50,7 +45,7 @@ export class Events {
|
||||||
const res = this._util.loadCommand(name, args, message);
|
const res = this._util.loadCommand(name, args, message);
|
||||||
|
|
||||||
if (!res.valid) {
|
if (!res.valid) {
|
||||||
if (res.message != 'File does not exist') return {
|
return {
|
||||||
valid: false,
|
valid: false,
|
||||||
message: res.message,
|
message: res.message,
|
||||||
};
|
};
|
||||||
|
|
|
@ -70,7 +70,7 @@ export class Util {
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
valid: false,
|
valid: false,
|
||||||
message: "Comamnd folder does not exist",
|
message: "Command folder does not exist",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
7
tests/__mocks/commands/noCategory.ts
Normal file
7
tests/__mocks/commands/noCategory.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import { Command } from "../../../src/type/command";
|
||||||
|
|
||||||
|
export class noCategory extends Command {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
8
tests/__mocks/commands/normal.ts
Normal file
8
tests/__mocks/commands/normal.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import { Command } from "../../../src/type/command";
|
||||||
|
|
||||||
|
export class normal extends Command {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this._category = "General";
|
||||||
|
}
|
||||||
|
}
|
8
tests/__mocks/commands/roles.ts
Normal file
8
tests/__mocks/commands/roles.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import { Command } from "../../../src/type/command";
|
||||||
|
|
||||||
|
export class roles extends Command {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this._roles = [ "Moderator" ];
|
||||||
|
}
|
||||||
|
}
|
5
tests/__mocks/events/normal.ts
Normal file
5
tests/__mocks/events/normal.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import { Event } from "../../../src/type/event";
|
||||||
|
|
||||||
|
export class normal extends Event {
|
||||||
|
public override channelCreate() {}
|
||||||
|
}
|
139
tests/client/client.test.ts
Normal file
139
tests/client/client.test.ts
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
import { CoreClient } from "../../src/client/client";
|
||||||
|
|
||||||
|
import { Client } from "discord.js";
|
||||||
|
import * as dotenv from "dotenv";
|
||||||
|
import { Events } from "../../src/client/events";
|
||||||
|
import { Util } from "../../src/client/util";
|
||||||
|
|
||||||
|
jest.mock("discord.js");
|
||||||
|
jest.mock("dotenv");
|
||||||
|
jest.mock("../../src/client/events");
|
||||||
|
jest.mock("../../src/client/util");
|
||||||
|
|
||||||
|
describe('Constructor', () => {
|
||||||
|
test('Constructor_ExpectSuccessfulInitialisation', () => {
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(coreClient).toBeInstanceOf(Client);
|
||||||
|
expect(dotenv.config).toBeCalledTimes(1);
|
||||||
|
expect(Events).toBeCalledTimes(1);
|
||||||
|
expect(Util).toBeCalledTimes(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Start', () => {
|
||||||
|
test('Given Env Is Valid, Expect Successful Start', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).not.toThrow();
|
||||||
|
expect(coreClient.on).toBeCalledWith("message", expect.any(Function));
|
||||||
|
expect(coreClient.on).toBeCalledWith("ready", expect.any(Function));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given BOT_TOKEN Is Null, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("BOT_TOKEN is not defined in .env");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given BOT_TOKEN Is Empty, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: '',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("BOT_TOKEN is not defined in .env");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given BOT_PREFIX Is Null, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("BOT_PREFIX is not defined in .env");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given BOT_PREFIX Is Empty, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("BOT_PREFIX is not defined in .env");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given FOLDERS_COMMANDS Is Null, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("FOLDERS_COMMANDS is not defined in .env");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given FOLDERS_COMMANDS Is Empty, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: '',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("FOLDERS_COMMANDS is not defined in .env");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given FOLDERS_EVENTS Is Null, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("FOLDERS_EVENTS is not defined in .env");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given FOLDERS_EVENTS Is Empty, Expect Failure', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: '',
|
||||||
|
}
|
||||||
|
|
||||||
|
const coreClient = new CoreClient();
|
||||||
|
|
||||||
|
expect(() => coreClient.start()).toThrow("FOLDERS_EVENTS is not defined in .env");
|
||||||
|
});
|
||||||
|
});
|
185
tests/client/events.test.ts
Normal file
185
tests/client/events.test.ts
Normal file
|
@ -0,0 +1,185 @@
|
||||||
|
import { Events } from "../../src/client/events";
|
||||||
|
|
||||||
|
import { Message, Client, TextChannel, Guild, SnowflakeUtil, DMChannel } from "discord.js";
|
||||||
|
import { Util } from "../../src/client/util";
|
||||||
|
|
||||||
|
jest.mock("../../src/client/util");
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
Util.prototype.loadCommand = jest.fn();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('OnMessage', () => {
|
||||||
|
test('Given Message Is Valid Expect Message Sent', () => {
|
||||||
|
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 events = new Events();
|
||||||
|
|
||||||
|
const result = events.onMessage(message);
|
||||||
|
|
||||||
|
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', () => {
|
||||||
|
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 events = new Events();
|
||||||
|
|
||||||
|
const result = events.onMessage(message);
|
||||||
|
|
||||||
|
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', () => {
|
||||||
|
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 events = new Events();
|
||||||
|
|
||||||
|
const result = events.onMessage(message);
|
||||||
|
|
||||||
|
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', () => {
|
||||||
|
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 events = new Events();
|
||||||
|
|
||||||
|
const result = events.onMessage(message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeFalsy();
|
||||||
|
expect(result.message).toBe("Message was not a command, ignoring.");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given Message Had No Command Name, Expect Failed Result', () => {
|
||||||
|
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 events = new Events();
|
||||||
|
|
||||||
|
const result = events.onMessage(message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeFalsy();
|
||||||
|
expect(result.message).toBe("Command name was not found");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given Command Failed To Execute, Expect Failed Result', () => {
|
||||||
|
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 events = new Events();
|
||||||
|
|
||||||
|
const result = events.onMessage(message);
|
||||||
|
|
||||||
|
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");
|
||||||
|
});
|
||||||
|
});
|
291
tests/client/util.test.ts
Normal file
291
tests/client/util.test.ts
Normal file
|
@ -0,0 +1,291 @@
|
||||||
|
import { Util } from "../../src/client/util";
|
||||||
|
|
||||||
|
import { Client, Guild, Message, Role, SnowflakeUtil, TextChannel, User } from "discord.js";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
|
jest.mock("fs");
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fs.existsSync = jest.fn();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('LoadCommand', () => {
|
||||||
|
test('Given Successful Exection, Expect Successful Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(true);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
member: {
|
||||||
|
roles: {
|
||||||
|
cache: {
|
||||||
|
find: jest.fn().mockReturnValue(true),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
reply: jest.fn(),
|
||||||
|
} as unknown as Message;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadCommand("normal", [ "first" ], message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given Member Is Null, Expect Failed Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(true);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
member: null
|
||||||
|
} as unknown as Message;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadCommand("normal", [ "first" ], message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeFalsy();
|
||||||
|
expect(result.message).toBe("Member is not part of message");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given Folder Does Not Exist, Expect Failed Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(false);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
member: {
|
||||||
|
roles: {
|
||||||
|
cache: {
|
||||||
|
find: jest.fn().mockReturnValue(true),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
reply: jest.fn(),
|
||||||
|
} as unknown as Message;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadCommand("normal", [ "first" ], message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeFalsy();
|
||||||
|
expect(result.message).toBe("Command folder does not exist");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given File Does Not Exist, Expect Failed Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValueOnce(true)
|
||||||
|
.mockReturnValue(false);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
member: {
|
||||||
|
roles: {
|
||||||
|
cache: {
|
||||||
|
find: jest.fn().mockReturnValue(true),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
reply: jest.fn(),
|
||||||
|
} as unknown as Message;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadCommand("normal", [ "first" ], message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeFalsy();
|
||||||
|
expect(result.message).toBe("File does not exist");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given User Does Have Role, Expect Successful Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(true);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
member: {
|
||||||
|
roles: {
|
||||||
|
cache: {
|
||||||
|
find: jest.fn().mockReturnValue(true),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
reply: jest.fn(),
|
||||||
|
} as unknown as Message;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadCommand("roles", [ "first" ], message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given User Does Not Have Role, Expect Failed Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(true);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
member: {
|
||||||
|
roles: {
|
||||||
|
cache: {
|
||||||
|
find: jest.fn().mockReturnValue(false),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
reply: jest.fn(),
|
||||||
|
} as unknown as Message;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadCommand("roles", [ "first" ], message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeFalsy();
|
||||||
|
expect(result.message).toBe("You require the `Moderator` role to run this command");
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given Command Category Is Null, Expect Successful Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(true);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
member: {
|
||||||
|
roles: {
|
||||||
|
cache: {
|
||||||
|
find: jest.fn().mockReturnValue(true),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
reply: jest.fn(),
|
||||||
|
} as unknown as Message;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadCommand("noCategory", [ "first" ], message);
|
||||||
|
|
||||||
|
expect(result.valid).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('LoadEvents', () => {
|
||||||
|
test('Given Events Are Loaded, Expect Successful Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(true);
|
||||||
|
fs.readdirSync = jest.fn().mockReturnValue(["normal.ts"]);
|
||||||
|
|
||||||
|
const client = {
|
||||||
|
on: jest.fn(),
|
||||||
|
} as unknown as Client;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadEvents(client);
|
||||||
|
|
||||||
|
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',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(true);
|
||||||
|
fs.readdirSync = jest.fn().mockReturnValue(["normal"]);
|
||||||
|
|
||||||
|
const client = {
|
||||||
|
on: jest.fn(),
|
||||||
|
} as unknown as Client;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadEvents(client);
|
||||||
|
|
||||||
|
const clientOn = jest.spyOn(client, 'on');
|
||||||
|
|
||||||
|
expect(result.valid).toBeTruthy();
|
||||||
|
expect(clientOn).toBeCalledTimes(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Given Event Folder Does Not Exist, Expect Failed Result', () => {
|
||||||
|
process.env = {
|
||||||
|
BOT_TOKEN: 'TOKEN',
|
||||||
|
BOT_PREFIX: '!',
|
||||||
|
FOLDERS_COMMANDS: 'commands',
|
||||||
|
FOLDERS_EVENTS: 'events',
|
||||||
|
}
|
||||||
|
|
||||||
|
process.cwd = jest.fn().mockReturnValue("../../tests/__mocks");
|
||||||
|
fs.existsSync = jest.fn().mockReturnValue(false);
|
||||||
|
fs.readdirSync = jest.fn().mockReturnValue(["normal.ts"]);
|
||||||
|
|
||||||
|
const client = {
|
||||||
|
on: jest.fn(),
|
||||||
|
} as unknown as Client;
|
||||||
|
|
||||||
|
const util = new Util();
|
||||||
|
|
||||||
|
const result = util.loadEvents(client);
|
||||||
|
|
||||||
|
expect(result.valid).toBeFalsy();
|
||||||
|
expect(result.message).toBe("Event folder does not exist");
|
||||||
|
});
|
||||||
|
});
|
|
@ -71,5 +71,8 @@
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"./src",
|
"./src",
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"./tests"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue