fix(test): migrate message related unit tests

This commit is contained in:
Skillz4Killz
2022-05-29 17:56:41 +00:00
committed by GitHub
parent 144e651259
commit e34a265ba4
4 changed files with 269 additions and 187 deletions

View File

@@ -9,5 +9,8 @@ export async function getMessage(bot: Bot, channelId: bigint, id: bigint) {
bot.constants.routes.CHANNEL_MESSAGE(channelId, id),
);
// If the message does not exist
if (!result?.id) return;
return bot.transformers.message(bot, result);
}

View File

@@ -1,5 +1,6 @@
import type { Bot } from "../../bot.ts";
import { DiscordMessage } from "../../types/discord.ts";
import { Collection } from "../../util/collection.ts";
import { hasProperty } from "../../util/utils.ts";
/** Fetches between 2-100 messages. Requires VIEW_CHANNEL and READ_MESSAGE_HISTORY */
@@ -18,7 +19,10 @@ export async function getMessages(
bot.constants.routes.CHANNEL_MESSAGES(channelId, options),
);
return await Promise.all(result.map((res) => bot.transformers.message(bot, res)));
return new Collection(result.map((res) => {
const msg = bot.transformers.message(bot, res);
return [msg.id, msg];
}));
}
/** https://discord.com/developers/docs/resources/channel#get-channel-messages-query-string-params */

View File

@@ -1,19 +1,7 @@
import enableCachePlugin from "../plugins/cache/mod.ts";
import { ChannelTypes, createBot, createEventHandlers, startBot } from "../mod.ts";
import { assertEquals, assertExists, dotenv } from "./deps.ts";
import { deleteMessageWithoutReasonTest, deleteMessageWithReasonTest } from "./helpers/messages/deleteMessage.ts";
import { getMessagesTest } from "./helpers/messages/getMessages.ts";
import { deleteMessagesWithoutReasonTest, deleteMessagesWithReasonTest } from "./helpers/messages/deleteMessages.ts";
import { delayUntil } from "./utils.ts";
import {
sendMessageWithComponents,
sendMessageWithEmbedsTest,
sendMessageWithTextTest,
} from "./helpers/messages/sendMessage.ts";
import { getMessageTest } from "./helpers/messages/getMessage.ts";
import { editMessageTest } from "./helpers/messages/editMessage.ts";
import { pinMessageTests } from "./helpers/messages/pin.ts";
import { categoryChildrenTest } from "./helpers/channels/categoryChannels.ts";
import { deleteChannelOverwriteTests } from "./helpers/channels/deleteChannelOverwrite.ts";
import { editChannelTests } from "./helpers/channels/editChannel.ts";
import { CACHED_COMMUNITY_GUILD_ID, sanitizeMode } from "./constants.ts";
@@ -99,100 +87,6 @@ export const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
Deno.test({
name: "[message] send message with text",
fn: async (t) => {
await sendMessageWithTextTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] send message with embeds",
fn: async (t) => {
await sendMessageWithEmbedsTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] send message with components",
fn: async (t) => {
await sendMessageWithComponents(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] edit message",
fn: async (t) => {
await editMessageTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] delete message without a reason",
fn: async (t) => {
await deleteMessageWithoutReasonTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] delete message with a reason",
fn: async (t) => {
await deleteMessageWithReasonTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] delete messages without a reason",
fn: async (t) => {
await deleteMessagesWithoutReasonTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] delete messages with a reason",
fn: async (t) => {
await deleteMessagesWithReasonTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] fetch a message",
fn: async (t) => {
await getMessageTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] fetch messages",
fn: async (t) => {
await getMessagesTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[message] pin a message",
fn: async (t) => {
await pinMessageTests(channel.id, message.id);
},
...sanitizeMode,
});
Deno.test({
name: "[channel] send message with text",
fn: async (t) => {
await sendMessageWithTextTest(channel.id);
},
...sanitizeMode,
});
Deno.test({
name: "[channel] filter all category channels",
async fn(t) {
await categoryChildrenTest(guild.id);
},
...sanitizeMode,
});
Deno.test({
name: "[channel] delete a channel overwrite",
async fn(t) {

View File

@@ -1,4 +1,4 @@
import { ChannelTypes } from "../../../mod.ts";
import { ButtonStyles, ChannelTypes, MessageComponentTypes } from "../../../mod.ts";
import { assertEquals, assertExists, assertNotEquals } from "../../deps.ts";
import { loadBot } from "../../mod.ts";
import { CACHED_COMMUNITY_GUILD_ID } from "../../utils.ts";
@@ -24,86 +24,267 @@ Deno.test({
assertEquals(message.content, "Hello Skillz");
});
// Send a message with embeds
await t.step("[message] Send a message with embeds", async () => {
const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
embeds: [
{
title: "Deno",
description: "Deno is a modern web platform for building the web.",
url: "https://deno.land/",
color: 0x00ff00,
fields: [
{
name: "Deno",
value: "Deno is a modern web platform for building the web.",
inline: true,
},
{
name: "Deno",
value: "Deno is a modern web platform for building the web.",
inline: true,
},
],
footer: {
text: "Deno",
iconUrl: "https://deno.land/favicon.ico",
},
image: {
url: "https://deno.land/favicon.ico",
},
thumbnail: {
url: "https://deno.land/favicon.ico",
},
},
],
});
assertExists(message.id);
assertEquals(message.content, "Hello Skillz");
assertEquals(message.embeds.length, 1);
assertEquals(message.embeds[0].title, "Deno");
assertEquals(message.embeds[0].description, "Deno is a modern web platform for building the web.");
assertEquals(message.embeds[0].url, "https://deno.land/");
assertEquals(message.embeds[0].color, 0x00ff00);
assertEquals(message.embeds[0].fields?.length, 2);
assertEquals(message.embeds[0].fields?.[0].name, "Deno");
assertEquals(message.embeds[0].fields?.[0].value, "Deno is a modern web platform for building the web.");
assertEquals(message.embeds[0].fields?.[0].inline, true);
assertEquals(message.embeds[0].fields?.[1].name, "Deno");
assertEquals(message.embeds[0].fields?.[1].value, "Deno is a modern web platform for building the web.");
assertEquals(message.embeds[0].fields?.[1].inline, true);
assertEquals(message.embeds[0].footer?.text, "Deno");
assertEquals(message.embeds[0].footer?.iconUrl, "https://deno.land/favicon.ico");
assertEquals(message.embeds[0].image?.url, "https://deno.land/favicon.ico");
assertEquals(message.embeds[0].thumbnail?.url, "https://deno.land/favicon.ico");
});
// Send a message with components
await t.step("[message] Send a message with components", async () => {
const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
components: [
{
type: MessageComponentTypes.ActionRow,
components: [
{
type: MessageComponentTypes.Button,
label: "Doc",
style: ButtonStyles.Link,
url: `https://discordeno.mod.land/`,
},
{
type: MessageComponentTypes.Button,
label: "Server",
style: ButtonStyles.Link,
url: `https://discord.gg/ddeno`,
},
],
},
{
type: MessageComponentTypes.ActionRow,
components: [
{
type: MessageComponentTypes.Button,
label: "Hi",
customId: `hi`,
style: ButtonStyles.Primary,
},
],
},
],
});
assertExists(message.id);
assertEquals(message.content, "Hello Skillz");
assertEquals(message.components?.length, 2);
assertEquals(message.components?.[0].type, MessageComponentTypes.ActionRow);
assertEquals(message.components?.[0].components?.length, 2);
assertEquals(message.components?.[0].components?.[0].type, MessageComponentTypes.Button);
assertEquals(message.components?.[0].components?.[0].label, "Doc");
assertEquals(message.components?.[0].components?.[0].style, ButtonStyles.Link);
assertEquals(message.components?.[0].components?.[0].url, `https://discordeno.mod.land/`);
assertEquals(message.components?.[0].components?.[1].type, MessageComponentTypes.Button);
assertEquals(message.components?.[0].components?.[1].label, "Server");
assertEquals(message.components?.[0].components?.[1].style, ButtonStyles.Link);
assertEquals(message.components?.[0].components?.[1].url, `https://discord.gg/ddeno`);
assertEquals(message.components?.[1].type, MessageComponentTypes.ActionRow);
assertEquals(message.components?.[1].components?.length, 1);
assertEquals(message.components?.[1].components?.[0].type, MessageComponentTypes.Button);
assertEquals(message.components?.[1].components?.[0].label, "Hi");
assertEquals(message.components?.[1].components?.[0].customId, `hi`);
assertEquals(message.components?.[1].components?.[0].style, ButtonStyles.Primary);
});
// Edit the message
await t.step("[message] Edit the message", async () => {
const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message.id);
assertEquals(message.content, "Hello Skillz");
const editedMessage = await bot.helpers.editMessage(channel.id, message.id, {
content: "Hello Skillz 2",
embeds: [
{
title: "Deno",
description: "Deno is a modern web platform for building the web.",
},
],
});
assertEquals(editedMessage.content, "Hello Skillz 2");
assertEquals(editedMessage.embeds.length, 1);
assertEquals(editedMessage.embeds[0].title, "Deno");
assertEquals(editedMessage.embeds[0].description, "Deno is a modern web platform for building the web.");
});
// Delete the message with a reason
await t.step("[message] Delete the message with a reason", async () => {
const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message.id);
assertEquals(message.content, "Hello Skillz");
await bot.helpers.deleteMessage(channel.id, message.id, "Test");
const deletedMessage = await bot.helpers.getMessage(channel.id, message.id);
assertEquals(deletedMessage, undefined);
});
// Delete the message without a reason
await t.step("[message] Delete the message with a reason", async () => {
const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message.id);
assertEquals(message.content, "Hello Skillz");
await bot.helpers.deleteMessage(channel.id, message.id);
const deletedMessage = await bot.helpers.getMessage(channel.id, message.id);
assertEquals(deletedMessage, undefined);
});
// Bulk delete messages with a reason
await t.step("[message] Bulk delete messages with a reason", async () => {
const message1 = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message1.id);
assertEquals(message1.content, "Hello Skillz");
const message2 = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz 2",
});
assertExists(message2.id);
assertEquals(message2.content, "Hello Skillz 2");
await bot.helpers.deleteMessages(channel.id, [message1.id, message2.id], "Test");
const deletedMessage1 = await bot.helpers.getMessage(channel.id, message1.id);
assertEquals(deletedMessage1, undefined);
const deletedMessage2 = await bot.helpers.getMessage(channel.id, message2.id);
assertEquals(deletedMessage2, undefined);
});
// Bulk delete messages without a reason
await t.step("[message] Bulk delete messages without a reason", async () => {
const message1 = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message1.id);
assertEquals(message1.content, "Hello Skillz");
const message2 = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz 2",
});
assertExists(message2.id);
assertEquals(message2.content, "Hello Skillz 2");
await bot.helpers.deleteMessages(channel.id, [message1.id, message2.id]);
const deletedMessage1 = await bot.helpers.getMessage(channel.id, message1.id);
assertEquals(deletedMessage1, undefined);
const deletedMessage2 = await bot.helpers.getMessage(channel.id, message2.id);
assertEquals(deletedMessage2, undefined);
});
// Get a message
await t.step("[message] Get a message", async () => {
const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message.id);
assertEquals(message.content, "Hello Skillz");
const getMessage = await bot.helpers.getMessage(channel.id, message.id);
assertExists(getMessage);
assertEquals(getMessage.content, message.content);
assertEquals(getMessage.id, message.id);
});
// Pin a message
await t.step("[message] Pin a message", async (t) => {
const message = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message.id);
assertEquals(message.content, "Hello Skillz");
await bot.helpers.pinMessage(channel.id, message.id);
const pinnedMessages = await bot.helpers.getPins(channel.id);
assertEquals(pinnedMessages.length, 1);
assertEquals(pinnedMessages[0].content, message.content);
assertEquals(pinnedMessages[0].id, message.id);
// Unpin a message
await t.step("[message] Unpin a message", async () => {
await bot.helpers.unpinMessage(channel.id, message.id);
const pinnedMessages = await bot.helpers.getPins(channel.id);
assertEquals(pinnedMessages.length, 0);
});
});
// Fetch multiple messages
await t.step("[message] Fetch multiple messages", async () => {
const message1 = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz",
});
assertExists(message1.id);
assertEquals(message1.content, "Hello Skillz");
const message2 = await bot.helpers.sendMessage(channel.id, {
content: "Hello Skillz 2",
});
assertExists(message2.id);
assertEquals(message2.content, "Hello Skillz 2");
const messages = await bot.helpers.getMessages(channel.id, {
limit: 2,
});
assertEquals(messages.size, 2);
assertEquals(messages.get(message1.id)?.content, message1.content);
assertEquals(messages.get(message2.id)?.content, message2.content);
});
// Delete the channel once test is done
await bot.helpers.deleteChannel(channel.id);
},
});
// Deno.test({
// name: "[message] send message with text",
// fn: async (t) => {
// await sendMessageWithTextTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] send message with embeds",
// fn: async (t) => {
// await sendMessageWithEmbedsTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] send message with components",
// fn: async (t) => {
// await sendMessageWithComponents(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] edit message",
// fn: async (t) => {
// await editMessageTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] delete message without a reason",
// fn: async (t) => {
// await deleteMessageWithoutReasonTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] delete message with a reason",
// fn: async (t) => {
// await deleteMessageWithReasonTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] delete messages without a reason",
// fn: async (t) => {
// await deleteMessagesWithoutReasonTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] delete messages with a reason",
// fn: async (t) => {
// await deleteMessagesWithReasonTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] fetch a message",
// fn: async (t) => {
// await getMessageTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] fetch messages",
// fn: async (t) => {
// await getMessagesTest(channel.id);
// },
// ...sanitizeMode,
// });
// Deno.test({
// name: "[message] pin a message",
// fn: async (t) => {
// await pinMessageTests(channel.id, message.id);
// },
// ...sanitizeMode,
// });