This commit is contained in:
parent
ea6bac2af1
commit
69ef94dbb5
84 changed files with 993 additions and 7394 deletions
|
@ -1,164 +0,0 @@
|
|||
import { GuildMember, TextChannel, User } from "discord.js";
|
||||
import MemberEvents from "../../src/events/MemberEvents";
|
||||
import GuildMemberUpdate from "../../src/events/MemberEvents/GuildMemberUpdate";
|
||||
|
||||
describe('GuildMemberAdd', () => {
|
||||
test('When event is fired, expect embed to be sent to logs channel', async () => {
|
||||
const currentDate = new Date();
|
||||
|
||||
const textChannel = {
|
||||
send: jest.fn()
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const userDisplayAvatarURL = jest.fn();
|
||||
|
||||
const guildUser = {
|
||||
tag: 'USERTAG',
|
||||
createdAt: currentDate,
|
||||
id: 'USERID',
|
||||
displayAvatarURL: userDisplayAvatarURL
|
||||
} as unknown as User;
|
||||
|
||||
const guildMember = {
|
||||
user: guildUser,
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
}
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const memberEvents = new MemberEvents();
|
||||
|
||||
const result = await memberEvents.guildMemberAdd(guildMember);
|
||||
|
||||
expect(textChannel.send).toBeCalledTimes(1);
|
||||
expect(userDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe("Member Joined");
|
||||
expect(embed.footer?.text).toBe("Id: USERID");
|
||||
expect(embed.fields.length).toBe(2);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe("User");
|
||||
expect(embedFieldUser.value).toBe("[object Object] `USERTAG`");
|
||||
expect(embedFieldUser.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Created Field
|
||||
const embedFieldCreated = embed.fields[1];
|
||||
|
||||
expect(embedFieldCreated.name).toBe("Created");
|
||||
expect(embedFieldCreated.value).toBe(currentDate.toString());
|
||||
});
|
||||
});
|
||||
|
||||
describe('GuildMemberRemove', () => {
|
||||
test('When event is fired, expect embed to be sent to logs channel', async () => {
|
||||
const currentDate = new Date();
|
||||
|
||||
const textChannel = {
|
||||
send: jest.fn()
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const userDisplayAvatarURL = jest.fn();
|
||||
|
||||
const guildUser = {
|
||||
tag: 'USERTAG',
|
||||
createdAt: currentDate,
|
||||
id: 'USERID',
|
||||
displayAvatarURL: userDisplayAvatarURL
|
||||
} as unknown as User;
|
||||
|
||||
const guildMember = {
|
||||
user: guildUser,
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
joinedAt: currentDate
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const memberEvents = new MemberEvents();
|
||||
|
||||
const result = await memberEvents.guildMemberRemove(guildMember);
|
||||
|
||||
expect(textChannel.send).toBeCalledTimes(1);
|
||||
expect(userDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe("Member Left");
|
||||
expect(embed.footer?.text).toBe("Id: USERID");
|
||||
expect(embed.fields.length).toBe(2);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe("User");
|
||||
expect(embedFieldUser.value).toBe("[object Object] `USERTAG`");
|
||||
expect(embedFieldUser.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Joined Field
|
||||
const embedFieldJoined = embed.fields[1];
|
||||
|
||||
expect(embedFieldJoined.name).toBe("Joined");
|
||||
expect(embedFieldJoined.value).toBe(currentDate.toString());
|
||||
});
|
||||
});
|
||||
|
||||
describe('GuildMemberUpdate', () => {
|
||||
test('Given nicknames are the same, expect NicknameChanged NOT to be called', async () => {
|
||||
const member = {
|
||||
nickname: 'member'
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const nicknameChanged = jest.fn();
|
||||
|
||||
GuildMemberUpdate.prototype.NicknameChanged = nicknameChanged;
|
||||
|
||||
const memberEvents = new MemberEvents();
|
||||
|
||||
const result = await memberEvents.guildMemberUpdate(member, member);
|
||||
|
||||
expect(result.embeds.length).toBe(0);
|
||||
expect(nicknameChanged).not.toBeCalled();
|
||||
});
|
||||
|
||||
test('Given nicknames are the different, expect NicknameChanged to be called', async () => {
|
||||
const oldMember = {
|
||||
nickname: 'oldMember'
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const newMember = {
|
||||
nickname: 'newMember'
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const nicknameChanged = jest.fn();
|
||||
|
||||
GuildMemberUpdate.prototype.NicknameChanged = nicknameChanged;
|
||||
|
||||
const memberEvents = new MemberEvents();
|
||||
|
||||
const result = await memberEvents.guildMemberUpdate(oldMember, newMember);
|
||||
|
||||
expect(result.embeds.length).toBe(0);
|
||||
expect(nicknameChanged).toBeCalledTimes(1);
|
||||
});
|
||||
});
|
13
tests/events/MemberEvents/GuildMemberAdd.test.ts
Normal file
13
tests/events/MemberEvents/GuildMemberAdd.test.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
describe('GuildMemberAdd', () => {
|
||||
test.todo('EXPECT embed to be logged');
|
||||
|
||||
test.todo("GIVEN member.guild is null, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event.member.add.enabled setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event is not enabled, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event.member.add.channel setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN channel is not found, EXPECT nothing to happen");
|
||||
});
|
15
tests/events/MemberEvents/GuildMemberRemove.test.ts
Normal file
15
tests/events/MemberEvents/GuildMemberRemove.test.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
describe('GuildMemberRemove', () => {
|
||||
test.todo("EXPECT embed to be logged");
|
||||
|
||||
test.todo("GIVEN member.guild is null, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event.member.remove.enabled setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event is not enabled, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN member.joinedAt is null, EXPECT value to be defaulted");
|
||||
|
||||
test.todo("GIVEN event.member.remove.channel setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN channel is not found, EXPECT nothing to happen");
|
||||
});
|
|
@ -1,235 +1,5 @@
|
|||
import { GuildMember, TextChannel } from "discord.js";
|
||||
import GuildMemberUpdate from "../../../src/events/MemberEvents/GuildMemberUpdate";
|
||||
describe('GuildMemberUpdate', () => {
|
||||
test.todo("GIVEN user nickname has changed, EXPECT function to be executed");
|
||||
|
||||
beforeEach(() => {
|
||||
process.env = {};
|
||||
});
|
||||
|
||||
describe('Constructor', () => {
|
||||
test('Expect properties are set', () => {
|
||||
const oldMember = {
|
||||
nickname: 'Old Nickname'
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const newMember = {
|
||||
nickname: 'New Nickname'
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const guildMemberUpdate = new GuildMemberUpdate(oldMember, newMember);
|
||||
|
||||
expect(guildMemberUpdate.oldMember).toBe(oldMember);
|
||||
expect(guildMemberUpdate.newMember).toBe(newMember);
|
||||
});
|
||||
});
|
||||
|
||||
describe('NicknameChanged', () => {
|
||||
test('Given nickname has changed from one to another, expect embed to be sent with both', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const memberUserDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMember = {
|
||||
nickname: 'Old Nickname'
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const newMember = {
|
||||
nickname: 'New Nickname',
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
user: {
|
||||
tag: 'USERTAG',
|
||||
id: 'USERID',
|
||||
displayAvatarURL: memberUserDisplayAvatarURL
|
||||
}
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const guildMemberUpdate = new GuildMemberUpdate(oldMember, newMember);
|
||||
|
||||
const result = await guildMemberUpdate.NicknameChanged();
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(memberUserDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Nickname Changed');
|
||||
expect(embed.footer?.text).toBe('Id: USERID');
|
||||
expect(embed.fields.length).toBe(3);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
|
||||
// Embed -> Before Field
|
||||
const embedFieldBefore = embed.fields[1];
|
||||
|
||||
expect(embedFieldBefore.name).toBe('Before');
|
||||
expect(embedFieldBefore.value).toBe('Old Nickname');
|
||||
|
||||
// Embed -> After Field
|
||||
const embedFieldAfter = embed.fields[2];
|
||||
|
||||
expect(embedFieldAfter.name).toBe('After');
|
||||
expect(embedFieldAfter.value).toBe('New Nickname');
|
||||
});
|
||||
|
||||
test('Given old nickname was null, expect embed to say old nickname was none', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const memberUserDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMember = {} as unknown as GuildMember;
|
||||
|
||||
const newMember = {
|
||||
nickname: 'New Nickname',
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
user: {
|
||||
tag: 'USERTAG',
|
||||
id: 'USERID',
|
||||
displayAvatarURL: memberUserDisplayAvatarURL
|
||||
}
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const guildMemberUpdate = new GuildMemberUpdate(oldMember, newMember);
|
||||
|
||||
const result = await guildMemberUpdate.NicknameChanged();
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(memberUserDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Nickname Changed');
|
||||
expect(embed.footer?.text).toBe('Id: USERID');
|
||||
expect(embed.fields.length).toBe(3);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
|
||||
// Embed -> Before Field
|
||||
const embedFieldBefore = embed.fields[1];
|
||||
|
||||
expect(embedFieldBefore.name).toBe('Before');
|
||||
expect(embedFieldBefore.value).toBe('*none*');
|
||||
|
||||
// Embed -> After Field
|
||||
const embedFieldAfter = embed.fields[2];
|
||||
|
||||
expect(embedFieldAfter.name).toBe('After');
|
||||
expect(embedFieldAfter.value).toBe('New Nickname');
|
||||
});
|
||||
|
||||
test('Given new nickname was null, expect embed to say new nickname was none', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const memberUserDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMember = {
|
||||
nickname: 'Old Nickname'
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const newMember = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
user: {
|
||||
tag: 'USERTAG',
|
||||
id: 'USERID',
|
||||
displayAvatarURL: memberUserDisplayAvatarURL
|
||||
}
|
||||
} as unknown as GuildMember;
|
||||
|
||||
const guildMemberUpdate = new GuildMemberUpdate(oldMember, newMember);
|
||||
|
||||
const result = await guildMemberUpdate.NicknameChanged();
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(memberUserDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Nickname Changed');
|
||||
expect(embed.footer?.text).toBe('Id: USERID');
|
||||
expect(embed.fields.length).toBe(3);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
|
||||
// Embed -> Before Field
|
||||
const embedFieldBefore = embed.fields[1];
|
||||
|
||||
expect(embedFieldBefore.name).toBe('Before');
|
||||
expect(embedFieldBefore.value).toBe('Old Nickname');
|
||||
|
||||
// Embed -> After Field
|
||||
const embedFieldAfter = embed.fields[2];
|
||||
|
||||
expect(embedFieldAfter.name).toBe('After');
|
||||
expect(embedFieldAfter.value).toBe('*none*');
|
||||
});
|
||||
test.todo("GIVEN nickname is the same, EXPECT nothing to happen");
|
||||
});
|
|
@ -0,0 +1,15 @@
|
|||
describe('NicknameChanged', () => {
|
||||
test.todo('EXPECT embed to be logged');
|
||||
|
||||
test.todo("GIVEN event.member.update.enabled setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event is not enabled, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN oldNickname is null, EXPECT oldNickname to be defaulted");
|
||||
|
||||
test.todo("GIVEN newNickname is null, EXPECT newNickname to be defaulted");
|
||||
|
||||
test.todo("GIVEN event.member.update.channel setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN log channel can not be found, EXPECT nothing to happen");
|
||||
});
|
|
@ -1,648 +0,0 @@
|
|||
import { Collection, Message, MessageAttachment, TextChannel } from "discord.js";
|
||||
import MessageEvents from "../../src/events/MessageEvents";
|
||||
|
||||
beforeEach(() => {
|
||||
process.env = {};
|
||||
});
|
||||
|
||||
describe('MessageDelete', () => {
|
||||
test('Given message was in a guild AND user was NOT a bot, expect message deleted embed to be sent', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const messageAttachments = new Collection<string, MessageAttachment>([
|
||||
[
|
||||
"0",
|
||||
{
|
||||
url: 'image0.png'
|
||||
} as unknown as MessageAttachment
|
||||
],
|
||||
[
|
||||
"1",
|
||||
{
|
||||
url: 'image1.png'
|
||||
} as unknown as MessageAttachment
|
||||
]
|
||||
]);
|
||||
|
||||
const message = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
channel: {},
|
||||
content: 'Message Content',
|
||||
attachments: messageAttachments
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageDelete(message);
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(messageAuthorDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Message Deleted');
|
||||
expect(embed.fields.length).toBe(4);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
|
||||
// Embed -> Channel Field
|
||||
const embedFieldChannel = embed.fields[1];
|
||||
|
||||
expect(embedFieldChannel.name).toBe('Channel');
|
||||
expect(embedFieldChannel.value).toBe('[object Object]');
|
||||
|
||||
// Embed -> Content Field
|
||||
const embedFieldContent = embed.fields[2];
|
||||
|
||||
expect(embedFieldContent.name).toBe('Content');
|
||||
expect(embedFieldContent.value).toBe('```Message Content```');
|
||||
|
||||
// Embed -> Attachments Field
|
||||
const embedFieldAttachments = embed.fields[3];
|
||||
|
||||
expect(embedFieldAttachments.name).toBe('Attachments');
|
||||
expect(embedFieldAttachments.value).toBe('```image0.png\nimage1.png```');
|
||||
});
|
||||
|
||||
test('Given message was not sent in a guild, expect execution stopped', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const messageAttachments = new Collection<string, MessageAttachment>([
|
||||
[
|
||||
"0",
|
||||
{
|
||||
url: 'image0.png'
|
||||
} as unknown as MessageAttachment
|
||||
],
|
||||
[
|
||||
"1",
|
||||
{
|
||||
url: 'image1.png'
|
||||
} as unknown as MessageAttachment
|
||||
]
|
||||
]);
|
||||
|
||||
const message = {
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
channel: {},
|
||||
content: 'Message Content',
|
||||
attachments: messageAttachments
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageDelete(message);
|
||||
|
||||
expect(channelSend).not.toBeCalled();
|
||||
expect(memberGuildChannelsCacheFind).not.toBeCalled();
|
||||
expect(messageAuthorDisplayAvatarURL).not.toBeCalled();
|
||||
expect(result.embeds.length).toBe(0);
|
||||
});
|
||||
|
||||
test('Given author is a bot, expect execution stopped', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const messageAttachments = new Collection<string, MessageAttachment>([
|
||||
[
|
||||
"0",
|
||||
{
|
||||
url: 'image0.png'
|
||||
} as unknown as MessageAttachment
|
||||
],
|
||||
[
|
||||
"1",
|
||||
{
|
||||
url: 'image1.png'
|
||||
} as unknown as MessageAttachment
|
||||
]
|
||||
]);
|
||||
|
||||
const message = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: true,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
channel: {},
|
||||
content: 'Message Content',
|
||||
attachments: messageAttachments
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageDelete(message);
|
||||
|
||||
expect(channelSend).not.toBeCalled();
|
||||
expect(memberGuildChannelsCacheFind).not.toBeCalled();
|
||||
expect(messageAuthorDisplayAvatarURL).not.toBeCalled();
|
||||
expect(result.embeds.length).toBe(0);
|
||||
});
|
||||
|
||||
test('Given message does not contain any attachments, expect attachments field to be omitted', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const messageAttachments = new Collection<string, MessageAttachment>([]);
|
||||
|
||||
const message = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
channel: {},
|
||||
content: 'Message Content',
|
||||
attachments: messageAttachments
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageDelete(message);
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(messageAuthorDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Message Deleted');
|
||||
expect(embed.fields.length).toBe(3);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
|
||||
// Embed -> Channel Field
|
||||
const embedFieldChannel = embed.fields[1];
|
||||
|
||||
expect(embedFieldChannel.name).toBe('Channel');
|
||||
expect(embedFieldChannel.value).toBe('[object Object]');
|
||||
|
||||
// Embed -> Content Field
|
||||
const embedFieldContent = embed.fields[2];
|
||||
|
||||
expect(embedFieldContent.name).toBe('Content');
|
||||
expect(embedFieldContent.value).toBe('```Message Content```');
|
||||
});
|
||||
});
|
||||
|
||||
describe('MessageUpdate', () => {
|
||||
test('Given message is in a guild AND user is not a bot AND the content has actually changed, e xpect log embed to be sent', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMessage = {
|
||||
content: 'Old Message'
|
||||
} as unknown as Message;
|
||||
|
||||
const newMessage = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
content: 'New Message',
|
||||
channel: {},
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageUpdate(oldMessage, newMessage);
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(messageAuthorDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Message Edited');
|
||||
expect(embed.fields.length).toBe(4);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
expect(embedFieldUser.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Channel Field
|
||||
const embedFieldChannel = embed.fields[1];
|
||||
|
||||
expect(embedFieldChannel.name).toBe('Channel');
|
||||
expect(embedFieldChannel.value).toBe('[object Object]');
|
||||
expect(embedFieldChannel.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Before Field
|
||||
const embedFieldBefore = embed.fields[2];
|
||||
|
||||
expect(embedFieldBefore.name).toBe('Before');
|
||||
expect(embedFieldBefore.value).toBe('```Old Message```');
|
||||
|
||||
// Embed -> After Field
|
||||
const embedFieldAfter = embed.fields[3];
|
||||
|
||||
expect(embedFieldAfter.name).toBe('After');
|
||||
expect(embedFieldAfter.value).toBe('```New Message```');
|
||||
});
|
||||
|
||||
test('Given message was not in a guild, expect execution stopped', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMessage = {
|
||||
content: 'Old Message'
|
||||
} as unknown as Message;
|
||||
|
||||
const newMessage = {
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
content: 'New Message',
|
||||
channel: {},
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageUpdate(oldMessage, newMessage);
|
||||
|
||||
expect(channelSend).not.toBeCalled();
|
||||
expect(memberGuildChannelsCacheFind).not.toBeCalled();
|
||||
expect(messageAuthorDisplayAvatarURL).not.toBeCalled();
|
||||
expect(result.embeds.length).toBe(0);
|
||||
});
|
||||
|
||||
test('Given author is a bot, expect execution stopped', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMessage = {
|
||||
content: 'Old Message'
|
||||
} as unknown as Message;
|
||||
|
||||
const newMessage = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: true,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
content: 'New Message',
|
||||
channel: {},
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageUpdate(oldMessage, newMessage);
|
||||
|
||||
expect(channelSend).not.toBeCalled();
|
||||
expect(memberGuildChannelsCacheFind).not.toBeCalled();
|
||||
expect(messageAuthorDisplayAvatarURL).not.toBeCalled();
|
||||
expect(result.embeds.length).toBe(0);
|
||||
});
|
||||
|
||||
test('Given the message contents are the same, expect execution stopped', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMessage = {
|
||||
content: 'Message'
|
||||
} as unknown as Message;
|
||||
|
||||
const newMessage = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
content: 'Message',
|
||||
channel: {},
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageUpdate(oldMessage, newMessage);
|
||||
|
||||
expect(channelSend).not.toBeCalled();
|
||||
expect(memberGuildChannelsCacheFind).not.toBeCalled();
|
||||
expect(messageAuthorDisplayAvatarURL).not.toBeCalled();
|
||||
expect(result.embeds.length).toBe(0);
|
||||
});
|
||||
|
||||
test('Given Old Message did not have a content, expect field to account for this', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMessage = {} as unknown as Message;
|
||||
|
||||
const newMessage = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
content: 'New Message',
|
||||
channel: {},
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageUpdate(oldMessage, newMessage);
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(messageAuthorDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Message Edited');
|
||||
expect(embed.fields.length).toBe(4);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
expect(embedFieldUser.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Channel Field
|
||||
const embedFieldChannel = embed.fields[1];
|
||||
|
||||
expect(embedFieldChannel.name).toBe('Channel');
|
||||
expect(embedFieldChannel.value).toBe('[object Object]');
|
||||
expect(embedFieldChannel.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Before Field
|
||||
const embedFieldBefore = embed.fields[2];
|
||||
|
||||
expect(embedFieldBefore.name).toBe('Before');
|
||||
expect(embedFieldBefore.value).toBe('```*none*```');
|
||||
|
||||
// Embed -> After Field
|
||||
const embedFieldAfter = embed.fields[3];
|
||||
|
||||
expect(embedFieldAfter.name).toBe('After');
|
||||
expect(embedFieldAfter.value).toBe('```New Message```');
|
||||
});
|
||||
|
||||
test('Given New Message does not have a content, expect field to account for this', async () => {
|
||||
process.env = {
|
||||
CHANNELS_LOGS_MOD: 'mod-logs'
|
||||
}
|
||||
|
||||
const channelSend = jest.fn();
|
||||
|
||||
const textChannel = {
|
||||
name: 'mod-logs',
|
||||
send: channelSend
|
||||
} as unknown as TextChannel;
|
||||
|
||||
const memberGuildChannelsCacheFind = jest.fn()
|
||||
.mockReturnValue(textChannel);
|
||||
const messageAuthorDisplayAvatarURL = jest.fn();
|
||||
|
||||
const oldMessage = {
|
||||
content: 'Old Message'
|
||||
} as unknown as Message;
|
||||
|
||||
const newMessage = {
|
||||
guild: {
|
||||
channels: {
|
||||
cache: {
|
||||
find: memberGuildChannelsCacheFind
|
||||
}
|
||||
}
|
||||
},
|
||||
author: {
|
||||
bot: false,
|
||||
displayAvatarURL: messageAuthorDisplayAvatarURL,
|
||||
tag: 'USERTAG'
|
||||
},
|
||||
channel: {},
|
||||
} as unknown as Message;
|
||||
|
||||
const messageEvents = new MessageEvents();
|
||||
|
||||
const result = await messageEvents.messageUpdate(oldMessage, newMessage);
|
||||
|
||||
expect(channelSend).toBeCalledTimes(1);
|
||||
expect(memberGuildChannelsCacheFind).toBeCalledTimes(1);
|
||||
expect(messageAuthorDisplayAvatarURL).toBeCalledTimes(1);
|
||||
expect(result.embeds.length).toBe(1);
|
||||
|
||||
// Embed
|
||||
const embed = result.embeds[0];
|
||||
|
||||
expect(embed.title).toBe('Message Edited');
|
||||
expect(embed.fields.length).toBe(4);
|
||||
|
||||
// Embed -> User Field
|
||||
const embedFieldUser = embed.fields[0];
|
||||
|
||||
expect(embedFieldUser.name).toBe('User');
|
||||
expect(embedFieldUser.value).toBe('[object Object] `USERTAG`');
|
||||
expect(embedFieldUser.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Channel Field
|
||||
const embedFieldChannel = embed.fields[1];
|
||||
|
||||
expect(embedFieldChannel.name).toBe('Channel');
|
||||
expect(embedFieldChannel.value).toBe('[object Object]');
|
||||
expect(embedFieldChannel.inline).toBeTruthy();
|
||||
|
||||
// Embed -> Before Field
|
||||
const embedFieldBefore = embed.fields[2];
|
||||
|
||||
expect(embedFieldBefore.name).toBe('Before');
|
||||
expect(embedFieldBefore.value).toBe('```Old Message```');
|
||||
|
||||
// Embed -> After Field
|
||||
const embedFieldAfter = embed.fields[3];
|
||||
|
||||
expect(embedFieldAfter.name).toBe('After');
|
||||
expect(embedFieldAfter.value).toBe('```*none*```');
|
||||
});
|
||||
});
|
11
tests/events/MessageEvents/MessageCreate.test.ts
Normal file
11
tests/events/MessageEvents/MessageCreate.test.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
describe('MessageCreate', () => {
|
||||
test.todo("GIVEN verification is enabled, EXPECT function to execute");
|
||||
|
||||
test.todo("GIVEN verification is not enabled, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN message.guild is null, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN message author is a bot, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN verification.enabled is not found, EXPECT nothing to happen");
|
||||
});
|
|
@ -0,0 +1,23 @@
|
|||
describe("VerificationCheck", () => {
|
||||
test.todo("GIVEN validation is correct, EXPECT role given");
|
||||
|
||||
test.todo("GIVEN validation is incorrect, EXPECT only message to be deleted");
|
||||
|
||||
test.todo("GIVEN message.guild is null, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN verification.channel setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN channel is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN currentChannel is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN currentChannel is not the verification channel, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN verification.code is null, EXPECT error");
|
||||
|
||||
test.todo("GIVEN verification.code is empty, EXPECT error");
|
||||
|
||||
test.todo("GIVEN verification.role is null, EXPECT error");
|
||||
|
||||
test.todo("GIVEN role is not found, EXPECT error");
|
||||
});
|
21
tests/events/MessageEvents/MessageDelete.test.ts
Normal file
21
tests/events/MessageEvents/MessageDelete.test.ts
Normal file
|
@ -0,0 +1,21 @@
|
|||
describe('MessageDelete', () => {
|
||||
test.todo('EXPECT embed to be logged');
|
||||
|
||||
test.todo("GIVEN message.guild is null, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN message author is a bot, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event.message.delete.enabled setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event is not enabled, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN channel is ignored, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN message content is null, EXPECT content to be defaulted");
|
||||
|
||||
test.todo("GIVEN message had at least 1 attachment, EXPECT attachments field to be added");
|
||||
|
||||
test.todo("GIVEN event.message.delete.channel setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN channel is not found, EXPECT nothing to happen");
|
||||
});
|
23
tests/events/MessageEvents/MessageUpdate.test.ts
Normal file
23
tests/events/MessageEvents/MessageUpdate.test.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
describe('MessageUpdate', () => {
|
||||
test.todo("EXPECT embed to be logged");
|
||||
|
||||
test.todo("GIVEN newMessage.guild is null, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN message author is a bot, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN message contents are the same, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event.message.update.enabled setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN event is not enabled, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN channel is ignored, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN oldMessage.content is null, EXPECT oldMessage to be defaulted");
|
||||
|
||||
test.todo("GIVEN newMessage.content is null, EXPECT newMessage to be defaulted");
|
||||
|
||||
test.todo("GIVEN event.message.delete.channel setting is not found, EXPECT nothing to happen");
|
||||
|
||||
test.todo("GIVEN channel is not found, EXPECT nothing to happen");
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue