Feature/12 create tests #102
2 changed files with 228 additions and 11 deletions
|
@ -3,9 +3,10 @@ import { ICommandContext } from "../contracts/ICommandContext";
|
|||
import ErrorEmbed from "../helpers/embeds/ErrorEmbed";
|
||||
import PublicEmbed from "../helpers/embeds/PublicEmbed";
|
||||
import StringTools from "../helpers/StringTools";
|
||||
import ICommandReturnContext from "../contracts/ICommandReturnContext";
|
||||
import { Command } from "../type/command";
|
||||
|
||||
interface ICommandData {
|
||||
export interface ICommandData {
|
||||
Exists: boolean;
|
||||
Name?: string;
|
||||
Category?: string;
|
||||
|
@ -19,15 +20,15 @@ export default class Help extends Command {
|
|||
super._category = "General";
|
||||
}
|
||||
|
||||
public override execute(context: ICommandContext) {
|
||||
public override execute(context: ICommandContext): ICommandReturnContext {
|
||||
if (context.args.length == 0) {
|
||||
this.SendAll(context);
|
||||
return this.SendAll(context);
|
||||
} else {
|
||||
this.SendSingle(context);
|
||||
return this.SendSingle(context);
|
||||
}
|
||||
}
|
||||
|
||||
private SendAll(context: ICommandContext) {
|
||||
public SendAll(context: ICommandContext): ICommandReturnContext {
|
||||
const allCommands = this.GetAllCommandData();
|
||||
const cateogries = this.DetermineCategories(allCommands);
|
||||
|
||||
|
@ -40,15 +41,24 @@ export default class Help extends Command {
|
|||
});
|
||||
|
||||
embed.SendToCurrentChannel();
|
||||
|
||||
return {
|
||||
commandContext: context,
|
||||
embeds: [ embed ]
|
||||
};
|
||||
}
|
||||
|
||||
private SendSingle(context: ICommandContext) {
|
||||
public SendSingle(context: ICommandContext): ICommandReturnContext {
|
||||
const command = this.GetCommandData(context.args[0]);
|
||||
|
||||
if (!command.Exists) {
|
||||
const errorEmbed = new ErrorEmbed(context, "Command does not exist");
|
||||
errorEmbed.SendToCurrentChannel();
|
||||
return;
|
||||
|
||||
return {
|
||||
commandContext: context,
|
||||
embeds: [ errorEmbed ]
|
||||
};
|
||||
}
|
||||
|
||||
const embed = new PublicEmbed(context, StringTools.Capitalise(command.Name!), "");
|
||||
|
@ -56,9 +66,14 @@ export default class Help extends Command {
|
|||
embed.addField("Required Roles", StringTools.Capitalise(command.Roles!.join(", ")) || "*none*");
|
||||
|
||||
embed.SendToCurrentChannel();
|
||||
|
||||
return {
|
||||
commandContext: context,
|
||||
embeds: [ embed ]
|
||||
};
|
||||
}
|
||||
|
||||
private GetAllCommandData(): ICommandData[] {
|
||||
public GetAllCommandData(): ICommandData[] {
|
||||
const result: ICommandData[] = [];
|
||||
|
||||
const folder = process.env.FOLDERS_COMMANDS!;
|
||||
|
@ -82,7 +97,7 @@ export default class Help extends Command {
|
|||
return result;
|
||||
}
|
||||
|
||||
private GetCommandData(name: string): ICommandData {
|
||||
public GetCommandData(name: string): ICommandData {
|
||||
const folder = process.env.FOLDERS_COMMANDS!;
|
||||
const path = `${process.cwd()}/${folder}/${name}.ts`;
|
||||
|
||||
|
@ -105,7 +120,7 @@ export default class Help extends Command {
|
|||
return data;
|
||||
}
|
||||
|
||||
private DetermineCategories(commands: ICommandData[]): string[] {
|
||||
public DetermineCategories(commands: ICommandData[]): string[] {
|
||||
const result: string[] = [];
|
||||
|
||||
commands.forEach(cmd => {
|
||||
|
@ -116,4 +131,4 @@ export default class Help extends Command {
|
|||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
202
tests/commands/help.test.ts
Normal file
202
tests/commands/help.test.ts
Normal file
|
@ -0,0 +1,202 @@
|
|||
import Help, { ICommandData } from "../../src/commands/help";
|
||||
import { Message } from "discord.js";
|
||||
import { ICommandContext } from "../../src/contracts/ICommandContext";
|
||||
|
||||
describe('Constructor', () => {
|
||||
test('Expect properties to be set', () => {
|
||||
const help = new Help();
|
||||
|
||||
expect(help._category).toBe('General');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Execute', () => {
|
||||
test('Given no arguments were given, expect SendAll to be executed', () => {
|
||||
const message = {} as unknown as Message;
|
||||
|
||||
const context: ICommandContext = {
|
||||
name: 'help',
|
||||
args: [],
|
||||
message: message
|
||||
};
|
||||
|
||||
const help = new Help();
|
||||
|
||||
help.SendAll = jest.fn();
|
||||
help.SendSingle = jest.fn();
|
||||
|
||||
help.execute(context);
|
||||
|
||||
expect(help.SendAll).toBeCalled();
|
||||
expect(help.SendSingle).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given an argument was given, expect SendSingle to be executed', () => {
|
||||
const message = {} as unknown as Message;
|
||||
|
||||
const context: ICommandContext = {
|
||||
name: 'help',
|
||||
args: ['about'],
|
||||
message: message
|
||||
};
|
||||
|
||||
const help = new Help();
|
||||
|
||||
help.SendAll = jest.fn();
|
||||
help.SendSingle = jest.fn();
|
||||
|
||||
help.execute(context);
|
||||
|
||||
expect(help.SendAll).not.toBeCalled();
|
||||
expect(help.SendSingle).toBeCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('SendAll', () => {
|
||||
test('Expect embed with all commands to be sent', () => {
|
||||
const messageChannelSend = jest.fn();
|
||||
|
||||
const message = {
|
||||
channel: {
|
||||
send: messageChannelSend
|
||||
}
|
||||
} as unknown as Message;
|
||||
|
||||
const context: ICommandContext = {
|
||||
name: 'help',
|
||||
args: [],
|
||||
message: message
|
||||
};
|
||||
|
||||
const help = new Help();
|
||||
|
||||
const commandData0: ICommandData = {
|
||||
Exists: true,
|
||||
Name: 'about',
|
||||
Category: 'general',
|
||||
Roles: []
|
||||
};
|
||||
|
||||
const commandData1: ICommandData = {
|
||||
Exists: true,
|
||||
Name: 'role',
|
||||
Category: 'general',
|
||||
Roles: []
|
||||
};
|
||||
|
||||
help.GetAllCommandData = jest.fn()
|
||||
.mockReturnValue([commandData0, commandData1]);
|
||||
help.DetermineCategories = jest.fn()
|
||||
.mockReturnValue(['general']);
|
||||
|
||||
const result = help.SendAll(context);
|
||||
|
||||
expect(help.GetAllCommandData).toBeCalled();
|
||||
expect(help.DetermineCategories).toBeCalled();
|
||||
expect(messageChannelSend).toBeCalled();
|
||||
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// PublicEmbed
|
||||
const publicEmbed = result.embeds[0];
|
||||
|
||||
expect(publicEmbed.fields.length).toBe(1);
|
||||
|
||||
// PublicEmbed -> GeneralCategory Field
|
||||
const publicEmbedFieldGeneral = publicEmbed.fields[0];
|
||||
|
||||
expect(publicEmbedFieldGeneral.name).toBe('General');
|
||||
expect(publicEmbedFieldGeneral.value).toBe('about, role');
|
||||
});
|
||||
});
|
||||
|
||||
describe('SendSingle', () => {
|
||||
test('Given command exists, expect embed to be sent with command fields', () => {
|
||||
const messageChannelSend = jest.fn();
|
||||
|
||||
const message = {
|
||||
channel: {
|
||||
send: messageChannelSend
|
||||
}
|
||||
} as unknown as Message;
|
||||
|
||||
const context: ICommandContext = {
|
||||
name: 'help',
|
||||
args: ['about'],
|
||||
message: message
|
||||
};
|
||||
|
||||
const commandData: ICommandData = {
|
||||
Exists: true,
|
||||
Name: 'about',
|
||||
Category: 'general',
|
||||
Roles: ['role1', 'role2']
|
||||
};
|
||||
|
||||
const help = new Help();
|
||||
|
||||
help.GetCommandData = jest.fn()
|
||||
.mockReturnValue(commandData);
|
||||
|
||||
const result = help.SendSingle(context);
|
||||
|
||||
expect(help.GetCommandData).toBeCalledWith('about');
|
||||
expect(messageChannelSend).toBeCalled();
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// PublicEmbed
|
||||
const publicEmbed = result.embeds[0];
|
||||
|
||||
expect(publicEmbed.title).toBe('About');
|
||||
expect(publicEmbed.description).toBe('');
|
||||
expect(publicEmbed.fields.length).toBe(2);
|
||||
|
||||
// PublicEmbed -> Category Field
|
||||
const fieldCategory = publicEmbed.fields[0];
|
||||
|
||||
expect(fieldCategory.name).toBe('Category');
|
||||
expect(fieldCategory.value).toBe('General');
|
||||
|
||||
// PublicEmbed -> RequiredRoles Field
|
||||
const fieldRoles = publicEmbed.fields[1];
|
||||
|
||||
expect(fieldRoles.name).toBe('Required Roles');
|
||||
expect(fieldRoles.value).toBe('Role1, Role2');
|
||||
});
|
||||
|
||||
test('Given command does not exist, expect error embed to be sent', () => {
|
||||
const messageChannelSend = jest.fn();
|
||||
|
||||
const message = {
|
||||
channel: {
|
||||
send: messageChannelSend
|
||||
}
|
||||
} as unknown as Message;
|
||||
|
||||
const context: ICommandContext = {
|
||||
name: 'help',
|
||||
args: ['about'],
|
||||
message: message
|
||||
};
|
||||
|
||||
const commandData: ICommandData = {
|
||||
Exists: false
|
||||
};
|
||||
|
||||
const help = new Help();
|
||||
|
||||
help.GetCommandData = jest.fn()
|
||||
.mockReturnValue(commandData);
|
||||
|
||||
const result = help.SendSingle(context);
|
||||
|
||||
expect(help.GetCommandData).toBeCalledWith('about');
|
||||
expect(messageChannelSend).toBeCalled();
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// ErrorEmbed
|
||||
const errorEmbed = result.embeds[0];
|
||||
|
||||
expect(errorEmbed.description).toBe('Command does not exist');
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue