diff --git a/packages/rest/tests/e2e/automod.spec.ts b/packages/rest/tests/e2e/automod.spec.ts index 6a6aa772d..4d94ffa2b 100644 --- a/packages/rest/tests/e2e/automod.spec.ts +++ b/packages/rest/tests/e2e/automod.spec.ts @@ -19,8 +19,8 @@ after(async () => { } }) -describe('[automod] Run automod tests', async () => { - it('[automod] Create a MessageSend rule for Keyword with BlockMessage action.', async () => { +describe('Run automod tests', async () => { + it('Create a MessageSend rule for Keyword with BlockMessage action.', async () => { const rule = await rest.createAutomodRule(e2ecache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, @@ -51,7 +51,7 @@ describe('[automod] Run automod tests', async () => { await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) }) - it('[automod] Create a MessageSend rule for Keyword with Timeout action.', async () => { + it('Create a MessageSend rule for Keyword with Timeout action.', async () => { const rule = await rest.createAutomodRule(e2ecache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, @@ -86,7 +86,7 @@ describe('[automod] Run automod tests', async () => { await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) }) - it('[automod] Create a MessageSend rule for Keyword with BlockMessage & Timeout action.', async () => { + it('Create a MessageSend rule for Keyword with BlockMessage & Timeout action.', async () => { const rule = await rest.createAutomodRule(e2ecache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, @@ -125,7 +125,7 @@ describe('[automod] Run automod tests', async () => { await rest.deleteChannel(channel.id) }) - it('[automod] Create a MessageSend rule for Keyword with SendAlertMessage action.', async () => { + it('Create a MessageSend rule for Keyword with SendAlertMessage action.', async () => { const rule = await rest.createAutomodRule(e2ecache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, @@ -160,7 +160,7 @@ describe('[automod] Run automod tests', async () => { await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) }) - it('[automod] Create a MessageSend rule for Keyword with SendAlertMessage & Timeout action.', async () => { + it('Create a MessageSend rule for Keyword with SendAlertMessage & Timeout action.', async () => { const rule = await rest.createAutomodRule(e2ecache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, @@ -189,7 +189,7 @@ describe('[automod] Run automod tests', async () => { await rest.deleteAutomodRule(e2ecache.guild.id, rule.id) }) - it('[automod] Create a MessageSend rule for Keyword with BlockMessage & SendAlertMessage & Timeout action.', async () => { + it('Create a MessageSend rule for Keyword with BlockMessage & SendAlertMessage & Timeout action.', async () => { const rule = await rest.createAutomodRule(e2ecache.guild.id, { name: 'test', eventType: AutoModerationEventTypes.MessageSend, diff --git a/packages/rest/tests/e2e/emoji.spec.ts b/packages/rest/tests/e2e/emoji.spec.ts index 1e12deb53..a490a4f67 100644 --- a/packages/rest/tests/e2e/emoji.spec.ts +++ b/packages/rest/tests/e2e/emoji.spec.ts @@ -23,109 +23,107 @@ after(async () => { } }) -describe('Emoji helpers', () => { - describe('Create and delete', () => { - it('create an emoji', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { - name: 'blamewolf', - image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), - roles: [], - }) - - // Assertions - expect(emoji.id).to.be.exist - await rest.deleteEmoji(e2ecache.guild.id, emoji.id!) +describe('Create and delete emojis', () => { + it('create an emoji', async () => { + const emoji = await rest.createEmoji(e2ecache.guild.id, { + name: 'blamewolf', + image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), + roles: [], }) - // delete an emoji without a reason - it('delete an emoji without a reason', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { - name: 'blamewolf', - image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), - roles: [], - }) - - // Assertions - expect(emoji.id).to.be.exist - - await rest.deleteEmoji(e2ecache.guild.id, emoji.id!) - - await expect(rest.getEmoji(e2ecache.guild.id, emoji.id!)).to.eventually.rejected - }) - - // delete an emoji with a reason - it('delete an emoji with a reason', async () => { - const emoji = await rest.createEmoji(e2ecache.guild.id, { - name: 'blamewolf', - image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), - roles: [], - }) - - // Assertions - expect(emoji.id).to.be.exist - - await rest.deleteEmoji(e2ecache.guild.id, emoji.id!, 'with a reason') - - await expect(rest.getEmoji(e2ecache.guild.id, emoji.id!)).to.eventually.rejected - }) + // Assertions + expect(emoji.id).to.be.exist + await rest.deleteEmoji(e2ecache.guild.id, emoji.id!) }) - describe('edit and get', () => { - let emoji: Camelize & { id: string } - - beforeEach(async () => { - emoji = (await rest.createEmoji(e2ecache.guild.id, { - name: 'blamewolf', - image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), - roles: [], - })) as Camelize & { id: string } + // delete an emoji without a reason + it('delete an emoji without a reason', async () => { + const emoji = await rest.createEmoji(e2ecache.guild.id, { + name: 'blamewolf', + image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), + roles: [], }) - afterEach(async () => { - await rest.deleteEmoji(e2ecache.guild.id, emoji.id) + // Assertions + expect(emoji.id).to.be.exist + + await rest.deleteEmoji(e2ecache.guild.id, emoji.id!) + + await expect(rest.getEmoji(e2ecache.guild.id, emoji.id!)).to.eventually.rejected + }) + + // delete an emoji with a reason + it('delete an emoji with a reason', async () => { + const emoji = await rest.createEmoji(e2ecache.guild.id, { + name: 'blamewolf', + image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), + roles: [], }) - // edit an emoji name - it('Edit an emoji name', async () => { - await rest.editEmoji(e2ecache.guild.id, emoji.id, { - name: 'edited', - }) + // Assertions + expect(emoji.id).to.be.exist - const edited = await rest.getEmoji(e2ecache.guild.id, emoji.id) + await rest.deleteEmoji(e2ecache.guild.id, emoji.id!, 'with a reason') - expect(edited.name).to.equal('edited') + await expect(rest.getEmoji(e2ecache.guild.id, emoji.id!)).to.eventually.rejected + }) +}) + +describe('Edit and get emojis', () => { + let emoji: Camelize & { id: string } + + beforeEach(async () => { + emoji = (await rest.createEmoji(e2ecache.guild.id, { + name: 'blamewolf', + image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), + roles: [], + })) as Camelize & { id: string } + }) + + afterEach(async () => { + await rest.deleteEmoji(e2ecache.guild.id, emoji.id) + }) + + // edit an emoji name + it('Edit an emoji name', async () => { + await rest.editEmoji(e2ecache.guild.id, emoji.id, { + name: 'edited', }) - // edit an emoji roles - it("Edit an emoji's roles", async () => { - const role = await rest.createRole(e2ecache.guild.id, { - name: 'dd-test-emoji', - }) - await rest.editEmoji(e2ecache.guild.id, emoji.id, { - roles: [role.id], - }) + const edited = await rest.getEmoji(e2ecache.guild.id, emoji.id) - const edited = await rest.getEmoji(e2ecache.guild.id, emoji.id) + expect(edited.name).to.equal('edited') + }) - expect(edited.roles?.length).to.equal(1) + // edit an emoji roles + it("Edit an emoji's roles", async () => { + const role = await rest.createRole(e2ecache.guild.id, { + name: 'dd-test-emoji', }) + await rest.editEmoji(e2ecache.guild.id, emoji.id, { + roles: [role.id], + }) + + const edited = await rest.getEmoji(e2ecache.guild.id, emoji.id) - // get an emoji - it('get an emoji', async () => { - const exists = await rest.getEmoji(e2ecache.guild.id, emoji.id) - expect(exists.id).to.be.exist - expect(emoji.id).to.equal(exists.id) - }) + expect(edited.roles?.length).to.equal(1) + }) - it('get all guild emojis', async () => { - await rest.createEmoji(e2ecache.guild.id, { - name: 'blamewolf2', - image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), - roles: [], - }) + // get an emoji + it('get an emoji', async () => { + const exists = await rest.getEmoji(e2ecache.guild.id, emoji.id) + expect(exists.id).to.be.exist + expect(emoji.id).to.equal(exists.id) + }) - const exists = await rest.getEmojis(e2ecache.guild.id) - expect(exists.length).to.greaterThan(1) + it('get all guild emojis', async () => { + await rest.createEmoji(e2ecache.guild.id, { + name: 'blamewolf2', + image: await urlToBase64('https://cdn.discordapp.com/emojis/814955268123000832.png'), + roles: [], }) + + const exists = await rest.getEmojis(e2ecache.guild.id) + expect(exists.length).to.greaterThan(1) }) }) diff --git a/packages/rest/tests/e2e/guild.spec.ts b/packages/rest/tests/e2e/guild.spec.ts index 1ecd9de4d..1ad321619 100644 --- a/packages/rest/tests/e2e/guild.spec.ts +++ b/packages/rest/tests/e2e/guild.spec.ts @@ -1,107 +1,113 @@ import { ChannelTypes } from '@discordeno/types' -import { logger } from '@discordeno/utils' import chai, { expect } from 'chai' import chaiAsPromised from 'chai-as-promised' -import { after, describe, it } from 'mocha' -import { rest } from './utils.js' +import { describe, it } from 'mocha' +import { e2ecache, rest } from './utils.js' chai.use(chaiAsPromised) -describe('Guild helpers', async () => { - // Delete the oldest guild(most likely to have finished tests). +before(async () => { + if (!e2ecache.guild) { + e2ecache.guild = await rest.createGuild({ + name: 'Discordeno-test', + }) + } +}) +after(async () => { + if (rest.invalidBucket.timeoutId) clearTimeout(rest.invalidBucket.timeoutId) + if (e2ecache.guild.id && !e2ecache.deletedGuild) { + e2ecache.deletedGuild = true + await rest.deleteGuild(e2ecache.guild.id) + } +}) + +describe('Manage Guilds', async () => { it('Create and delete a guild', async () => { const guild = await rest.createGuild({ name: 'Discordeno-test', }) - expect(guild.id).to.be.exist + expect(e2ecache.guild.id).to.be.exist await rest.deleteGuild(guild.id) // Make sure the guild was deleted - await expect(rest.getGuild(guild.id)).to.eventually.rejected + const deleted = await rest.getGuild(guild.id).catch(() => undefined) + expect(deleted).to.be.equal(undefined) }) - describe('Edit and get', async () => { - const guild = await rest.createGuild({ - name: 'Discordeno-test', + it('Get a guild', async () => { + const exists = await rest.getGuild(e2ecache.guild.id) + expect(exists).to.be.exist + expect(exists.id).to.be.exist + expect(exists.name).to.equal(e2ecache.guild.name) + }) + + it('AFK channel', async () => { + const voiceChannel = await rest.createChannel(e2ecache.guild.id, { + name: 'edit-guild-test', + type: ChannelTypes.GuildVoice, }) + expect(voiceChannel.id).to.be.exist - after(async () => { - await rest.deleteGuild(guild.id) + const edited = await rest.editGuild(e2ecache.guild.id, { + name: 'Discordeno-test-edited', + afkChannelId: voiceChannel.id, + // afkTimeout: 5, }) + expect(edited.name).to.equal('Discordeno-test-edited') + expect(e2ecache.guild.afkChannelId).to.not.equal(voiceChannel.id) + expect(edited.afkChannelId).to.equal(voiceChannel.id) + // expect(guild.afkTimeout).to.equal(0); + // expect(edited.afkTimeout).to.equal(5); - it('Get a guild', async () => { - const exists = await rest.getGuild(guild.id) - expect(exists).to.be.exist - expect(exists.id).to.be.exist - expect(exists.name).to.equal(guild.name) + const edited2 = await rest.editGuild(e2ecache.guild.id, { afkChannelId: null }) + expect(edited.afkChannelId).to.not.equal(edited2.afkChannelId) + // Use boolean to check both undefined or null + expect(!!edited2.afkChannelId).to.equal(false) + + await rest.deleteChannel(voiceChannel.id) + }) + + // it("Edit a guild's afk settings", async () => { + + // }); + + it('Get audit logs', async () => { + const auditLogs = await rest.getAuditLog(e2ecache.guild.id, { limit: 1 }) + expect(auditLogs.auditLogEntries.length).to.be.exist + }) + + // Get available voice regions + it('Get available voice regions', async () => { + const regions = await rest.getVoiceRegions(e2ecache.guild.id) + expect(regions.length).to.be.exist + }) + + it('Banning members', async () => { + await rest.banMember(e2ecache.guild.id, '379643682984296448', { + reason: 'Blame Wolf', + deleteMessageSeconds: 604800, }) + const fetchedBan = await rest.getBan(e2ecache.guild.id, '379643682984296448') - it('Edit a guild', async () => { - const voiceChannel = await rest.createChannel(guild.id, { - name: 'edit-guild-test', - type: ChannelTypes.GuildVoice, - }) - expect(voiceChannel.id).to.be.exist + // Assertions + expect(fetchedBan).to.be.exist + expect(fetchedBan.user.id).to.equal('379643682984296448') - const edited = await rest.editGuild(guild.id, { - name: 'Discordeno-test-edited', - afkChannelId: voiceChannel.id, - // afkTimeout: 5, - }) - expect(edited.name).to.equal('Discordeno-test-edited') - expect(guild.afkChannelId).to.not.equal(voiceChannel.id) - expect(edited.afkChannelId).to.equal(voiceChannel.id) - // expect(guild.afkTimeout).to.equal(0); - // expect(edited.afkTimeout).to.equal(5); + await rest.banMember(e2ecache.guild.id, '416477607966670869') + const fetchedBans = await rest.getBans(e2ecache.guild.id) - it("Reset a guild's afk channel id", async () => { - const edited2 = await rest.editGuild(guild.id, { afkChannelId: null }) - expect(edited.afkChannelId).to.not.equal(edited2.afkChannelId) - expect(edited2.afkChannelId).to.equal(undefined) - }) + // Assertions + expect(fetchedBans).to.be.exist + expect(fetchedBans.length).to.greaterThanOrEqual(2) - await rest.deleteChannel(voiceChannel.id) - }) + await rest.unbanMember(e2ecache.guild.id, '416477607966670869') + await rest.unbanMember(e2ecache.guild.id, '379643682984296448') - // it("Edit a guild's afk settings", async () => { + const unbanned = await rest.getBans(e2ecache.guild.id) + expect(unbanned.length).to.equal(0) + }) - // }); - - it('Get audit logs', async () => { - const auditLogs = await rest.getAuditLog(guild.id, { limit: 1 }) - expect(auditLogs.auditLogEntries.length).to.be.exist - }) - - // Get available voice regions - it('Get available voice regions', async () => { - const regions = await rest.getVoiceRegions(guild.id) - expect(regions.length).to.be.exist - }) - - // Get a guild ban - it('Get a guild ban', async () => { - await rest.banMember(guild.id, 379643682984296448n) - - const fetchedBan = await rest.getBan(guild.id, 379643682984296448n) - - // Assertions - expect(fetchedBan).to.be.exist - expect(fetchedBan.user.id).to.equal('379643682984296448') - - // Get multiple guild bans - it('Get multiple guild bans', async () => { - await rest.banMember(guild.id, 416477607966670869n) - await rest.banMember(guild.id, 635383782576357407n) - - const fetchedBans = await rest.getBans(guild.id) - - // Assertions - expect(fetchedBans).to.be.exist - }) - }) - - // Get vanity URL - it('Get vanity URL', async () => { - await expect(rest.getVanityUrl(guild.id)).to.eventually.rejected - }) + // Get vanity URL + it('Get vanity URL', async () => { + await expect(rest.getVanityUrl(e2ecache.guild.id)).to.eventually.rejected }) }) diff --git a/packages/rest/tests/e2e/member.spec.ts b/packages/rest/tests/e2e/member.spec.ts index 907183176..cea9f76c2 100644 --- a/packages/rest/tests/e2e/member.spec.ts +++ b/packages/rest/tests/e2e/member.spec.ts @@ -4,13 +4,6 @@ import { describe, it } from 'mocha' import { e2ecache, rest } from './utils.js' chai.use(chaiAsPromised) -// THIS IS WOLF, IF ANYTHING BREAKS BLAME HIM! -const wolfID = 270273690074087427n -// THIS IS IAN, HE PLAY GOLDEN SUN. BAN HIM BEFORE HE MAKES US ADDICTED TO IT!!! -const ianID = 90339695967350784n -// THIS IS LTS, HE PLAY TETRIS EFFECT: CONNECTED. BAN HIM BEFORE HE MAKES US ADDICTED TO IT!!! -const ltsID = 379643682984296448n - before(async () => { if (!e2ecache.guild) { e2ecache.guild = await rest.createGuild({ @@ -27,97 +20,51 @@ after(async () => { } }) -describe('[member] Member tests', async () => { - describe('Get members', () => { - it("Fetches the bot and compares the bot's id with the fetched member's id", async () => { - const member = await rest.getMember(e2ecache.communityGuildId, rest.applicationId) - expect(member?.user.id).to.exist - expect(member?.user.id).to.equal(rest.applicationId.toString()) - }) - - it('Gets a member list and checks if the bot is in the member list', async () => { - const members = await rest.getMembers(e2ecache.communityGuildId, { - limit: 10, - }) - expect(members.some((m) => m.user.id === rest.applicationId.toString())).to.equal(true) - }) - - // fetch a single member by id - it('fetch a single member by id', async () => { - const member = await rest.getMember(e2ecache.communityGuildId, rest.applicationId) - - expect(member?.user.id).to.exist - }) +describe('Member tests', () => { + it("Fetches the bot and compares the bot's id with the fetched member's id", async () => { + const member = await rest.getMember(e2ecache.communityGuildId, rest.applicationId) + expect(member?.user.id).to.exist + expect(member?.user.id).to.equal(rest.applicationId.toString()) }) - describe('Ban member', () => { - // ban user from guild without reason - describe('ban user from guild without reason', async () => { - await rest.banMember(e2ecache.communityGuildId, wolfID) - - // get a single user's ban - it("get a single user's ban", async () => { - expect(await rest.getBan(e2ecache.communityGuildId, wolfID)).to.exist - }) - }) - - // ban member from guild with a reason - it('ban member from guild with a reason', async () => { - await rest.banMember(e2ecache.communityGuildId, ianID, { - reason: 'Blame Wolf', - }) - expect(await rest.getBan(e2ecache.communityGuildId, ianID)).to.exist - }) - - // ban member from guild and delete messages - it('ban member from guild and delete messages', async () => { - await rest.banMember(e2ecache.communityGuildId, ltsID, { - deleteMessageSeconds: 604800, - }) - expect(await rest.getBan(e2ecache.communityGuildId, ltsID)).to.exist - }) - - // get bans on a server - it('get bans on a server', async () => { - const bans = await rest.getBans(e2ecache.communityGuildId) - expect(bans.length).to.greaterThan(1) - }) - - // unban member from guild - it('unban member from guild', async () => { - await Promise.all([rest.unbanMember(e2ecache.communityGuildId, wolfID), rest.unbanMember(e2ecache.communityGuildId, ianID)]) - - await expect(rest.getBan(e2ecache.communityGuildId, wolfID)).to.eventually.rejected + it('Gets a member list and checks if the bot is in the member list', async () => { + const members = await rest.getMembers(e2ecache.communityGuildId, { + limit: 10, }) + expect(members.some((m) => m.user.id === rest.applicationId.toString())).to.equal(true) }) - describe('nickname', () => { - it("Edit a bot's nickname", async () => { - const nick = 'lts20050703' - const member = await rest.editBotMember(e2ecache.communityGuildId, { - nick, - }) - expect(member.nick).to.equal(nick) + // fetch a single member by id + it('Fetch a single member by id', async () => { + const member = await rest.getMember(e2ecache.communityGuildId, rest.applicationId) - // Change nickname back - const member2 = await rest.editBotMember(e2ecache.communityGuildId, { - nick: null, - }) - expect(member2.nick).to.null - }) + expect(member?.user.id).to.exist }) - // waiting for channel - describe.skip('DM', () => { - it('[member] get dm channel and send a message', async () => { - // Itoh Alt ID - const channel = await rest.getDmChannel(750661528360845322n) - expect(channel?.id).to.exist - - const message = await rest.sendMessage(channel.id, { - content: 'https://i.imgur.com/doG55NR.png', - }) - expect(message?.content).to.exist + it("Edit a bot's nickname", async () => { + const nick = 'lts20050703' + const member = await rest.editBotMember(e2ecache.communityGuildId, { + nick, }) + expect(member.nick).to.equal(nick) + + // Change nickname back + const member2 = await rest.editBotMember(e2ecache.communityGuildId, { + nick: null, + }) + expect(member2.nick).to.null + }) + + it('Send a direct message', async () => { + // DM test only on dd unit testing bot + if (rest.applicationId.toString() !== "770381961553510451") return; + // Itoh Alt ID + const channel = await rest.getDmChannel(750661528360845322n) + expect(channel?.id).to.exist + + const message = await rest.sendMessage(channel.id, { + content: 'https://i.imgur.com/doG55NR.png', + }) + expect(message?.content).to.exist }) }) diff --git a/packages/rest/tests/e2e/message.spec.ts b/packages/rest/tests/e2e/message.spec.ts index a9a6916fc..047dc94a3 100644 --- a/packages/rest/tests/e2e/message.spec.ts +++ b/packages/rest/tests/e2e/message.spec.ts @@ -1,3 +1,4 @@ +import { urlToBase64, processReactionString } from '@discordeno/utils' import { expect } from 'chai' import { describe, it } from 'mocha' import { e2ecache, rest } from './utils.js' @@ -18,111 +19,136 @@ after(async () => { } }) -describe('[rest] Message related tests', () => { - describe('Send a message', () => { - it('With content', async () => { - const message = await rest.sendMessage('1041029705790402611', { content: 'testing rate limit manager' }) - expect(message.content).to.be.equal('testing rate limit manager') - }) +describe('Send a message', () => { + it('With content', async () => { + const message = await rest.sendMessage('1041029705790402611', { content: 'testing rate limit manager' }) + expect(message.content).to.be.equal('testing rate limit manager') - it('With an image', async () => { - const image = await fetch('https://cdn.discordapp.com/avatars/270010330782892032/d031ea881688526d1ae235fd2843e53c.jpg?size=2048') - .then(async (res) => await res.blob()) - .catch(() => undefined) - expect(image).to.not.be.undefined - if (!image) throw new Error('Was not able to fetch the image.') + const edited = await rest.editMessage(message.channelId, message.id, { content: 'testing rate limit manager edited' }) + expect(message.content).to.be.not.equal(edited.content) - const message = await rest.sendMessage('1041029705790402611', { file: { blob: image, name: 'gamer' } }) - expect(message.attachments.length).to.be.greaterThan(0) - const [attachment] = message.attachments - - expect(attachment.filename).to.be.equal('gamer') - }) + await rest.deleteMessage(message.channelId, message.id) }) - describe('Managing reactions', async () => { - it('Should add a unicode reaction', async () => { - const message = await rest.sendMessage('1041029705790402611', { content: 'testing rate limit manager' }) + it('With an image', async () => { + const image = await fetch('https://cdn.discordapp.com/avatars/270010330782892032/d031ea881688526d1ae235fd2843e53c.jpg?size=2048') + .then(async (res) => await res.blob()) + .catch(() => undefined) + expect(image).to.not.be.undefined + if (!image) throw new Error('Was not able to fetch the image.') - await rest.addReaction(message.channelId, message.id, '📙') - const reacted = await rest.getMessage(message.channelId, message.id) - expect(reacted.reactions?.length).to.be.greaterThanOrEqual(1) + const message = await rest.sendMessage('1041029705790402611', { file: { blob: image, name: 'gamer' } }) + expect(message.attachments.length).to.be.greaterThan(0) + const [attachment] = message.attachments - it('Should delete a unicode reaction', async () => { - await rest.deleteOwnReaction(message.channelId, message.id, '📙') - const reacted = await rest.getMessage(message.channelId, message.id) - expect(reacted.reactions?.length).to.be.equal(0) - }) + expect(attachment.filename).to.be.equal('gamer') + }) +}) + +describe('Manage reactions', async () => { + it('Add and delete a unicode reaction', async () => { + const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) + + await rest.addReaction(message.channelId, message.id, '📙') + const reacted = await rest.getMessage(message.channelId, message.id) + expect(reacted.reactions?.length).to.be.greaterThanOrEqual(1) + + await rest.deleteOwnReaction(message.channelId, message.id, '📙') + const unreacted = await rest.getMessage(message.channelId, message.id) + // Use boolean comparison because when its 0 length discord sends undefined + expect(!!unreacted.reactions?.length).to.be.equal(false) + }) + + it('Add and delete a custom reaction', async () => { + const emoji = await rest.createEmoji(e2ecache.guild.id, { + name: 'discordeno', + image: await urlToBase64('https://cdn.discordapp.com/emojis/785403373817823272.webp?size=96'), }) + const emojiCode = `<:${emoji.name!}:${emoji.id!}>` + + const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) - // it('Should add a custom reaction', async () => { - // const message = await rest.sendMessage('1041029705790402611', { content: 'testing rate limit manager' }) + await rest.addReaction(message.channelId, message.id, emojiCode) + const reacted = await rest.getMessage(message.channelId, message.id) + expect(reacted.reactions?.length).to.be.greaterThanOrEqual(1) - // await rest.addReaction(message.channelId, message.id, '<:discordeno:785403373817823272>') - // const reacted = await rest.getMessage(message.channelId, message.id) - // expect(reacted.reactions?.length).to.be.greaterThanOrEqual(1) + const reactions = await rest.getReactions(reactionChannel.id, message.id, processReactionString(emojiCode)) + expect(reactions?.length).to.be.greaterThanOrEqual(1) - // it('Should delete a custom reaction', async () => { - // await rest.deleteOwnReaction(message.channelId, message.id, '<:discordeno:785403373817823272>') - // const reacted = await rest.getMessage(message.channelId, message.id) - // expect(reacted.reactions?.length).to.be.equal(0) - // }) - // }) + await rest.deleteOwnReaction(message.channelId, message.id, emojiCode) + const unreacted = await rest.getMessage(message.channelId, message.id) + // Use boolean comparison because when its 0 length discord sends undefined + expect(!!unreacted.reactions?.length).to.be.equal(false) }) - describe('Rate limit manager testing', () => { - it('Send 10 messages to 1 channel', async () => { - await Promise.all( - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(async (i) => { - await rest.sendMessage('1041029705790402611', { content: `10 messages to 1 channel testing rate limit manager ${i}` }) - }), - ) + it('Add several reactions with random order and delete all of them', async () => { + const emoji = await rest.createEmoji(e2ecache.guild.id, { + name: 'discordeno', + image: await urlToBase64('https://cdn.discordapp.com/emojis/785403373817823272.webp?size=96'), }) + const emojiCode = `<:${emoji.name!}:${emoji.id!}>` + + const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) + + await rest.addReactions(message.channelId, message.id, [emojiCode, '📙']) + const reacted = await rest.getMessage(message.channelId, message.id) + expect(reacted.reactions?.length).to.be.greaterThanOrEqual(1) + + await rest.deleteReactionsAll(message.channelId, message.id) + const unreacted = await rest.getMessage(message.channelId, message.id) + // Use boolean comparison because when its 0 length discord sends undefined + expect(!!unreacted.reactions?.length).to.equal(false) + }) - // TODO: Make this dynamic when we can create channels - const spamChannelIds = [ - '1041029705790402611', - '1041029706838966393', - '1041029707459731586', - '1041029708004995199', - '1041029708453789766', - '1041029709049385010', - '1041029709632377003', - '1041029710227976313', - '1041029710764834856', - '1041029711414956202', - '1041029712153149524', - '1041029712933306459', - '1041029713566646313', - '1041029714254508042', - '1041029714921406555', - '1041029716334870629', - '1041029717127614636', - '1041029717689647114', - '1041029718603997214', - '1041029719925215302', - '1041029721179308082', - '1041029721988812860', - '1041029722466943037', - '1041029723217743964', - '1041029723872034826', - '1041029724492804156', - '1041029725117743144', - '1041029725818212474', - '1041029726531227741', - '1041029727231684638', - ] - - it('Send 10 messages to 10 channels', async () => { - await Promise.all( - spamChannelIds.map(async (channelId) => { - await Promise.all( - [...Array(10).keys()].map(async (_, index) => { - await rest.sendMessage(channelId, { content: `testing rate limit manager ${index}` }) - }), - ) - }), - ) + it('Add several reactions in an order and delete emoji reaction', async () => { + const emoji = await rest.createEmoji(e2ecache.guild.id, { + name: 'discordeno', + image: await urlToBase64('https://cdn.discordapp.com/emojis/785403373817823272.webp?size=96'), }) + const emojiCode = `<:${emoji.name!}:${emoji.id!}>` + + const reactionChannel = await rest.createChannel(e2ecache.guild.id, { name: 'reactions' }) + const message = await rest.sendMessage(reactionChannel.id, { content: 'add reaction test' }) + + await rest.addReactions(message.channelId, message.id, [emojiCode, '📙'], true) + const reacted = await rest.getMessage(message.channelId, message.id) + expect(reacted.reactions?.length).to.be.greaterThanOrEqual(1) + + await rest.deleteReactionsEmoji(message.channelId, message.id, emojiCode) + const unreacted = await rest.getMessage(message.channelId, message.id) + expect(unreacted.reactions?.length).to.greaterThanOrEqual(1) + + await rest.deleteUserReaction(message.channelId, message.id, rest.applicationId.toString(), '📙') + const noreacted = await rest.getMessage(message.channelId, message.id) + // Use boolean comparison because when its 0 length discord sends undefined + expect(!!noreacted.reactions?.length).to.equal(false) + }) +}) + +describe('Rate limit manager testing', () => { + it('Send 10 messages to 1 channel', async () => { + const channel = await rest.createChannel(e2ecache.guild.id, { name: 'rate-limit-1' }) + await Promise.all( + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(async (i) => { + await rest.sendMessage(channel.id, { content: `10 messages to 1 channel testing rate limit manager ${i}` }) + }), + ) + }) + + it('Send 10 messages to 10 channels', async () => { + await Promise.all( + [...Array(10).keys()].map(async () => { + const channel = await rest.createChannel(e2ecache.guild.id, { name: 'rate-limit-x' }) + + await Promise.all( + [...Array(10).keys()].map(async (_, index) => { + await rest.sendMessage(channel.id, { content: `testing rate limit manager ${index}` }) + }), + ) + }), + ) }) }) diff --git a/packages/rest/tests/e2e/role.spec.ts b/packages/rest/tests/e2e/role.spec.ts index ab87049e5..b5f03326b 100644 --- a/packages/rest/tests/e2e/role.spec.ts +++ b/packages/rest/tests/e2e/role.spec.ts @@ -1,7 +1,6 @@ -import type { Camelize, DiscordRole } from '@discordeno/types' import { calculateBits } from '@discordeno/utils' import { expect } from 'chai' -import { afterEach, before, beforeEach, describe, it } from 'mocha' +import { before, describe, it } from 'mocha' import { e2ecache, rest } from './utils.js' before(async () => { @@ -19,7 +18,7 @@ after(async () => { } }) -describe('[role] Role tests', async () => { +describe('Role tests', async () => { // Create a role with a reason it('Create a role with a reason', async () => { const role = await rest.createRole( @@ -29,10 +28,7 @@ describe('[role] Role tests', async () => { }, 'test reason', ) - expect(role.id).to.exist - - await rest.deleteRole(e2ecache.guild.id, role.id) }) // Create a role without a reason @@ -40,10 +36,7 @@ describe('[role] Role tests', async () => { const role = await rest.createRole(e2ecache.guild.id, { name: `test role ${Date.now()}`, }) - expect(role.id).to.exist - - await rest.deleteRole(e2ecache.guild.id, role.id) }) // Delete a role @@ -57,136 +50,57 @@ describe('[role] Role tests', async () => { }) // Edit a role - describe('Edit a role', async () => { - let role: Camelize - - beforeEach(async () => { - role = await rest.createRole(e2ecache.guild.id, { - name: `test role ${Date.now()}`, - }) + it('Edit a role', async () => { + const role = await rest.createRole(e2ecache.guild.id, { + name: `test role ${Date.now()}`, }) - afterEach(async () => { - await rest.deleteRole(e2ecache.guild.id, role.id) + const edited = await rest.editRole(e2ecache.guild.id, role.id, { + name: 'test role 4', + color: 0x0000ff, + hoist: true, + mentionable: true, + permissions: ['SEND_MESSAGES', 'VIEW_CHANNEL'], }) + expect(edited.name).to.equal('test role 4') + expect(edited.color).to.equal(0x0000ff) + expect(edited.hoist).to.equal(true) + expect(edited.mentionable).to.equal(true) + expect(edited.permissions.toString()).to.equal(calculateBits(['SEND_MESSAGES', 'VIEW_CHANNEL'])) - // Edit the roles name - it('Edit the roles name', async () => { - const edited = await rest.editRole(e2ecache.guild.id, role.id, { - name: 'test role 4', - }) - expect(edited.name).to.equal('test role 4') + await rest.editRole(e2ecache.guild.id, role.id, { + hoist: false, + mentionable: false, }) + const roles = await rest.getRoles(e2ecache.guild.id) + const unedited = roles.find((r) => r.id === role.id) - // Edit the roles color - it('Edit the roles color', async () => { - const edited = await rest.editRole(e2ecache.guild.id, role.id, { - color: 0x0000ff, - }) - expect(edited.color).to.equal(0x0000ff) - }) - - // Edit the roles hoist - it('Edit the roles hoist', async () => { - expect(role.hoist).to.equal(false) - const edited = await rest.editRole(e2ecache.guild.id, role.id, { - hoist: true, - }) - expect(edited.hoist).to.equal(true) - }) - - // Make hoist false - it('Make hoist false', async () => { - await rest.editRole(e2ecache.guild.id, role.id, { hoist: true }) - - const edited = await rest.editRole(e2ecache.guild.id, role.id, { - hoist: false, - }) - expect(edited.hoist).to.equal(false) - }) - - // Edit the roles mentionable - it('Edit the roles mentionable', async () => { - const edited = await rest.editRole(e2ecache.guild.id, role.id, { - mentionable: true, - }) - expect(edited.mentionable).to.equal(true) - }) - - // Make mentionable false - it('Make mentionable false', async () => { - await rest.editRole(e2ecache.guild.id, role.id, { - mentionable: true, - }) - const edited = await rest.editRole(e2ecache.guild.id, role.id, { - mentionable: false, - }) - expect(edited.mentionable).to.equal(false) - }) - - // Edit the roles permissions - it('Edit the roles permissions', async () => { - const edited = await rest.editRole(e2ecache.guild.id, role.id, { - permissions: ['SEND_MESSAGES', 'VIEW_CHANNEL'], - }) - expect(edited.permissions.toString()).to.equal(calculateBits(['SEND_MESSAGES', 'VIEW_CHANNEL'])) - }) + expect(unedited?.hoist).to.equal(false) + expect(unedited?.mentionable).to.equal(false) }) - describe('Remove a role from a user', async () => { - let role: Camelize - - beforeEach(async () => { - role = await rest.createRole(e2ecache.guild.id, { - name: `test role ${Date.now()}`, - }) - await rest.addRole(e2ecache.guild.id, rest.applicationId, role.id) + it('Add and remove role from user', async () => { + const role = await rest.createRole(e2ecache.guild.id, { + name: `test role ${Date.now()}`, }) - // afterEach(async () => { - // await rest.deleteRole(e2ecache.guild.id, role.id) - // }) + // Assign the role to the user + await rest.addRole(e2ecache.guild.id, rest.applicationId, role.id) + const member = await rest.getMember(e2ecache.guild.id, rest.applicationId) + expect(member?.roles.includes(role.id)).to.equal(true) - it('without a reason', async () => { - await rest.removeRole(e2ecache.guild.id, rest.applicationId, role.id) - const member = await rest.getMember(e2ecache.guild.id, rest.applicationId) - // console.log('member', member.errors.userId.Errors) - expect(member?.roles.includes(role.id)).to.equal(false) - }) + await rest.removeRole(e2ecache.guild.id, rest.applicationId, role.id) + const removed = await rest.getMember(e2ecache.guild.id, rest.applicationId) + // console.log('member', member.errors.userId.Errors) + expect(removed?.roles.includes(role.id)).to.equal(false) - it('with a reason', async () => { - await rest.removeRole(e2ecache.guild.id, rest.applicationId, role.id, 'test reason') - const member = await rest.getMember(e2ecache.guild.id, rest.applicationId) - expect(member?.roles.includes(role.id)).to.equal(false) - }) - }) + // With a reason + await rest.addRole(e2ecache.guild.id, rest.applicationId, role.id, 'test reason') + const member2 = await rest.getMember(e2ecache.guild.id, rest.applicationId) + expect(member2?.roles.includes(role.id)).to.equal(true) - describe('Assign a role to a user', async () => { - let role: Camelize - - beforeEach(async () => { - role = await rest.createRole(e2ecache.guild.id, { - name: `test role ${Date.now()}`, - }) - }) - - afterEach(async () => { - await rest.removeRole(e2ecache.guild.id, rest.applicationId, role.id) - await rest.deleteRole(e2ecache.guild.id, role.id) - }) - - it('Without a reason.', async () => { - // Assign the role to the user - await rest.addRole(e2ecache.guild.id, rest.applicationId, role.id) - const member = await rest.getMember(e2ecache.guild.id, rest.applicationId) - expect(member?.roles.includes(role.id)).to.equal(true) - }) - - // Add the role to the user with a reason - it('With a reason', async () => { - await rest.addRole(e2ecache.guild.id, rest.applicationId, role.id, 'test reason') - const member = await rest.getMember(e2ecache.guild.id, rest.applicationId) - expect(member?.roles.includes(role.id)).to.equal(true) - }) + await rest.removeRole(e2ecache.guild.id, rest.applicationId, role.id, 'test reason') + const member3 = await rest.getMember(e2ecache.guild.id, rest.applicationId) + expect(member3?.roles.includes(role.id)).to.equal(false) }) }) diff --git a/packages/rest/tests/e2e/stickers.spec.ts b/packages/rest/tests/e2e/stickers.spec.ts index 420486b03..b14a22fd2 100644 --- a/packages/rest/tests/e2e/stickers.spec.ts +++ b/packages/rest/tests/e2e/stickers.spec.ts @@ -1,8 +1,7 @@ -import type { Camelize, DiscordSticker } from '@discordeno/types' import { StickerFormatTypes } from '@discordeno/types' import chai, { expect } from 'chai' import chaiAsPromised from 'chai-as-promised' -import { afterEach, beforeEach, describe, it } from 'mocha' +import { describe, it } from 'mocha' import { e2ecache, rest } from './utils.js' chai.use(chaiAsPromised) @@ -23,113 +22,67 @@ after(async () => { }) // waiting for channel -describe('[stickers] Sticker helpers', async () => { +describe('Sticker tests', async () => { it('Can get a sticker', async () => { const sticker = await rest.getSticker(749054660769218631n) expect(sticker.name).to.equal('Wave') }) - describe('Guild sticker helpers', () => { - describe('Create and delete guild sticker helpers', () => { - it('Can create a sticker', async () => { - const sticker = await rest.createGuildSticker(e2ecache.guild.id, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png', - }, - }) - - expect(sticker.name).to.equal('sticker name') - expect(sticker.description).to.equal('sticker description') - expect(sticker.tags).to.equal('sticker tags') - - const channel = await rest.createChannel(e2ecache.guild.id, { - name: 'test', - }) - const message = await rest.sendMessage(channel.id, { - stickerIds: [sticker.id], - }) - - expect(message.stickerItems?.[0].formatType).to.equal(StickerFormatTypes.Png) - expect(message.stickerItems?.[0].id).to.equal(sticker.id) - expect(message.stickerItems?.[0].name).to.equal(sticker.name) - - await rest.deleteGuildSticker(e2ecache.guild.id, sticker.id) - await rest.deleteChannel(channel.id) - }) - - it('Can delete a sticker', async () => { - const sticker = await rest.createGuildSticker(e2ecache.guild.id, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png', - }, - }) - await rest.deleteGuildSticker(e2ecache.guild.id, sticker.id) - await expect(rest.getGuildSticker(e2ecache.guild.id, sticker.id)).to.eventually.rejected - }) + it('Create, edit, get, and delete guild sticker', async () => { + const sticker = await rest.createGuildSticker(e2ecache.guild.id, { + name: 'sticker name', + description: 'sticker description', + tags: 'sticker tags', + file: { + blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), + name: 'ddlogo.png', + }, }) - describe('Get and edit guild sticker helpers', () => { - let sticker: Camelize + expect(sticker.name).to.equal('sticker name') + expect(sticker.description).to.equal('sticker description') + expect(sticker.tags).to.equal('sticker tags') - beforeEach(async () => { - sticker = await rest.createGuildSticker(e2ecache.guild.id, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png', - }, - }) - }) - - afterEach(async () => { - await rest.deleteGuildSticker(e2ecache.guild.id, sticker.id) - }) - - it('Can get a sticker', async () => { - const getSticker = await rest.getGuildSticker(e2ecache.guild.id, sticker.id) - - expect(getSticker.name).to.equal('sticker name') - expect(getSticker.description).to.equal('sticker description') - expect(getSticker.tags).to.equal('sticker tags') - }) - - it('Can get stickers', async () => { - const sticker2 = await rest.createGuildSticker(e2ecache.guild.id, { - name: 'sticker 2', - description: 'sticker 2', - tags: 'sticker tags 2', - file: { - blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), - name: 'ddlogo.png', - }, - }) - const stickers = await rest.getGuildStickers(e2ecache.guild.id) - await rest.deleteGuildSticker(e2ecache.guild.id, sticker2.id) - - expect(stickers.length).to.greaterThan(1) - }) - - it('Can edit sticker', async () => { - const editSticker = await rest.editGuildSticker(e2ecache.guild.id, sticker.id, { - name: 'sticker name', - description: 'sticker description', - tags: 'sticker tags', - }) - - expect(editSticker.name).to.equal('sticker name') - expect(editSticker.description).to.equal('sticker description') - expect(editSticker.tags).to.equal('sticker tags') - }) + const channel = await rest.createChannel(e2ecache.guild.id, { + name: 'test', }) + const message = await rest.sendMessage(channel.id, { + stickerIds: [sticker.id], + }) + + expect(message.stickerItems?.[0].formatType).to.equal(StickerFormatTypes.Png) + expect(message.stickerItems?.[0].id).to.equal(sticker.id) + expect(message.stickerItems?.[0].name).to.equal(sticker.name) + + const getSticker = await rest.getGuildSticker(e2ecache.guild.id, sticker.id) + + expect(getSticker.name).to.equal('sticker name') + expect(getSticker.description).to.equal('sticker description') + expect(getSticker.tags).to.equal('sticker tags') + + const editSticker = await rest.editGuildSticker(e2ecache.guild.id, sticker.id, { + name: 'sticker name', + description: 'sticker description', + tags: 'sticker tags', + }) + + expect(editSticker.name).to.equal('sticker name') + expect(editSticker.description).to.equal('sticker description') + expect(editSticker.tags).to.equal('sticker tags') + + const sticker2 = await rest.createGuildSticker(e2ecache.guild.id, { + name: 'sticker 2', + description: 'sticker 2', + tags: 'sticker tags 2', + file: { + blob: await (await fetch('https://i.imgur.com/ejqd6Ro.png')).blob(), + name: 'ddlogo.png', + }, + }) + const stickers = await rest.getGuildStickers(e2ecache.guild.id) + expect(stickers.length).to.greaterThan(1) + + await rest.deleteGuildSticker(e2ecache.guild.id, sticker.id) + await expect(rest.getGuildSticker(e2ecache.guild.id, sticker.id)).to.eventually.rejected }) }) diff --git a/packages/rest/tests/e2e/user.spec.ts b/packages/rest/tests/e2e/user.spec.ts index 8f9af830d..84f61d6b4 100644 --- a/packages/rest/tests/e2e/user.spec.ts +++ b/packages/rest/tests/e2e/user.spec.ts @@ -19,35 +19,33 @@ after(async () => { } }) -describe('[rest] User related tests', () => { - describe('Get a user from the api', () => { - it('With a valid user id', async () => { - const user = await rest.getUser('130136895395987456') +describe('Get a user from the api', () => { + it('With a valid user id', async () => { + const user = await rest.getUser('130136895395987456') - describe('User has correct shape and form', () => { - it('Has correct id', () => { - expect(user.id).to.be.equal('130136895395987456') - }) + describe('User has correct shape and form', () => { + it('Has correct id', () => { + expect(user.id).to.be.equal('130136895395987456') + }) - it('Has a valid username', () => { - expect(user.username.length).to.be.greaterThanOrEqual(1) - }) + it('Has a valid username', () => { + expect(user.username.length).to.be.greaterThanOrEqual(1) + }) - it('Has a valid discriminator', () => { - expect(user.discriminator.length).to.be.equal(4) - }) + it('Has a valid discriminator', () => { + expect(user.discriminator.length).to.be.equal(4) + }) - it('Has been camelized', () => { - const keys = Object.keys(user) + it('Has been camelized', () => { + const keys = Object.keys(user) - expect(keys.includes('public_flags')).to.be.false - expect(keys.includes('publicFlags')).to.be.true - }) + expect(keys.includes('public_flags')).to.be.false + expect(keys.includes('publicFlags')).to.be.true }) }) + }) - it('With an invalid user id', async () => { - await expect(rest.getUser('123')).eventually.throws - }) + it('With an invalid user id', async () => { + await expect(rest.getUser('123')).eventually.throws }) }) diff --git a/packages/rest/tests/e2e/webhook.spec.ts b/packages/rest/tests/e2e/webhook.spec.ts index f7ad96992..f4cb9c61b 100644 --- a/packages/rest/tests/e2e/webhook.spec.ts +++ b/packages/rest/tests/e2e/webhook.spec.ts @@ -1,7 +1,6 @@ -import type { Camelize, DiscordMessage } from '@discordeno/types' import chai, { expect } from 'chai' import chaiAsPromised from 'chai-as-promised' -import { beforeEach, describe, it } from 'mocha' +import { describe, it } from 'mocha' import { e2ecache, rest } from './utils.js' chai.use(chaiAsPromised) @@ -21,137 +20,92 @@ after(async () => { } }) -// waiting for channel -describe('[webhooks] Webhook helpers', async () => { - const channel = await rest.createChannel(e2ecache.guild.id, { - name: 'wbhook', +describe('Webhook helpers', async () => { + it('Manage webhooks', async () => { + const channel = await rest.createChannel(e2ecache.guild.id, { + name: 'wbhook', + }) + + const webhook = await rest.createWebhook(channel.id, { + name: 'idk', + }) + + expect(webhook).to.exist + expect(webhook.name).to.equal('idk') + expect(webhook.token).to.exist + + const fetched = await rest.getWebhook(webhook.id) + expect(fetched).to.exist + expect(webhook.id).to.equal(fetched.id) + + const fetched2 = await rest.getWebhookWithToken(webhook.id, webhook.token!) + expect(webhook.id).to.equal(fetched2.id) + + const edited = await rest.editWebhook(webhook.id, { + name: 'edited', + }) + + expect(webhook.name).to.not.equal(edited.name) + + const edited2 = await rest.editWebhookWithToken(webhook.id, webhook.token!, { + name: 'editedtoken', + }) + + expect(edited.name).to.not.equal(edited2.name) + + await rest.createWebhook(channel.id, { name: 'idkk' }) + const hooks = await rest.getChannelWebhooks(channel.id) + expect(hooks.length).to.greaterThan(1) + + const guildHooks = await rest.getGuildWebhooks(channel.guildId!) + expect(guildHooks.length).to.greaterThan(1) + + await rest.deleteWebhook(webhook.id) + // Fetch the webhook to validate it was deleted + await expect(rest.getWebhook(webhook.id)).to.eventually.rejected + + const hookToDelete = await rest.createWebhook(channel.id, { + name: 'delme', + }) + expect(hookToDelete?.id).to.exist + expect(hookToDelete.token).to.exist + + await rest.deleteWebhookWithToken(hookToDelete.id, hookToDelete.token!) + + // Fetch the webhook to validate it was deleted + await expect(rest.getWebhook(hookToDelete.id)).to.eventually.rejected }) - const webhook = await rest.createWebhook(channel.id, { - name: 'idk', - }) + it('Manage webhook messages', async () => { + const channel = await rest.createChannel(e2ecache.guild.id, { + name: 'wbhook', + }) + const webhook = await rest.createWebhook(channel.id, { + name: 'idk', + }) + expect(webhook).to.exist - describe('General webhook helpers', () => { - it('Can create a webhook', async () => { - expect(webhook).to.exist - expect(webhook.name).to.equal('idk') + const message = await rest.executeWebhook(webhook.id, webhook.token!, { + content: 'discordeno is best lib', + wait: true, + }) + expect(message?.id).to.exist + + const message2 = await rest.getWebhookMessage(webhook.id, webhook.token!, message!.id) + + expect(message2).to.exist + expect(message2.content).to.equal(message?.content) + + const edited3 = await rest.editWebhookMessage(webhook.id, webhook.token!, message.id, { + content: 'different', }) - it('Can delete a webhook', async () => { - const hookToDelete = await rest.createWebhook(channel.id, { - name: 'delme', - }) - await rest.deleteWebhook(hookToDelete.id) + expect(edited3).to.exist + expect(edited3.content).to.not.equal(message2.content) - // Fetch the webhook to validate it was deleted - await expect(rest.getWebhook(hookToDelete.id)).to.eventually.rejected - }) - - it('Can delete a webhook with token', async () => { - const hookToDelete = await rest.createWebhook(channel.id, { - name: 'delme', - }) - expect(hookToDelete?.id).to.exist - expect(hookToDelete.token).to.exist - - await rest.deleteWebhookWithToken(hookToDelete.id, hookToDelete.token!) - - // Fetch the webhook to validate it was deleted - await expect(rest.getWebhook(hookToDelete.id)).to.eventually.rejected - }) - }) - - describe('Guild webhook helpers', async () => { - it('Can edit a guild webhook', async () => { - const edited = await rest.editWebhook(webhook.id, { - name: 'edited', - }) - - expect(webhook.name).to.not.equal(edited.name) - }) - - it('Can edit a guild webhook with token', async () => { - const edited = await rest.editWebhookWithToken(webhook.id, webhook.token!, { - name: 'editedtoken', - }) - - expect(webhook.name).to.not.equal(edited.name) - }) - - it('Can get a guild webhook', async () => { - const fetched = await rest.getWebhook(webhook.id) - expect(fetched).to.exist - expect(webhook.id).to.equal(fetched.id) - }) - - it('Can get a guild webhook with a token', async () => { - expect(webhook.token).to.exist - const fetched = await rest.getWebhookWithToken(webhook.id, webhook.token!) - expect(webhook.id).to.equal(fetched.id) - }) - }) - - describe('Guild channel webhook helpers', async () => { - // console.log('in guild channel webhook helper', 1) - await rest.createWebhook(channel.id, { - name: 'idkk', - }) - // console.log('in guild channel webhook helper', 2) - - it('Can create guild channel webhooks', async () => { - // console.log('in guild channel webhook helper', 3) - // console.log('in guild channel webhook helper', 4) - const fetched = await rest.getChannelWebhooks(channel.id) - // console.log('in guild channel webhook helper', 1) - expect(fetched.length).to.greaterThan(1) - // console.log('in guild channel webhook helper', 6) - }) - - // console.log('in guild channel webhook helper', 7) - it('Can get a guild channel webhooks', async () => { - // console.log('in guild channel webhook helper', 8) - const guildWebhooks = await rest.getGuildWebhooks(channel.guildId!) - // console.log('in guild channel webhook helper', 9) - expect(guildWebhooks.length).to.greaterThan(1) - // console.log('in guild channel webhook helper', 10) - }) - }) - - describe('Webhook Message helpers', async () => { - let message: Camelize - - beforeEach(async () => { - const msg = await rest.executeWebhook(webhook.id, webhook.token!, { - content: 'discordeno is best lib', - wait: true, - }) - if (!msg) throw new Error('message not send') - message = msg - }) - - it('Can send message with webhook', async () => { - expect(message?.id).to.exist - }) - - it('Can delete a message with webhook', async () => { - await rest.deleteWebhookMessage(webhook.id, webhook.token!, message.id) - await expect(rest.getWebhookMessage(webhook.id, webhook.token!, message.id)).to.eventually.rejected - }) - - it('Can get a message with webhook', async () => { - const fetched = await rest.getWebhookMessage(webhook.id, webhook.token!, message.id) - - expect(fetched).to.exist - expect(fetched.content).to.equal(message.content) - }) - - it('Can edit a message with webhook', async () => { - const edited = await rest.editWebhookMessage(webhook.id, webhook.token!, message.id, { - content: 'different', - }) - - expect(edited).to.exist - expect(edited.content).to.not.equal(message.content) - }) + await rest.deleteWebhookMessage(webhook.id, webhook.token!, message!.id) + await expect(rest.getWebhookMessage(webhook.id, webhook.token!, message!.id)).to.eventually.rejected }) }) + +