From 56080231031e915bc038118e58663b92ba007f67 Mon Sep 17 00:00:00 2001 From: Asad Humayun <105254706+AsadHumayun@users.noreply.github.com> Date: Mon, 31 Aug 2026 21:48:09 +0100 Subject: [PATCH] test(structures): add test for Emoji structure (#11509) * test(structures): add test for Emoji structure * test: use realistic snowflake ids * test(structures): getters that rely on isIdSet return null if no id set * style: compress into one test --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/structures/__tests__/emoji.test.ts | 66 +++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 packages/structures/__tests__/emoji.test.ts diff --git a/packages/structures/__tests__/emoji.test.ts b/packages/structures/__tests__/emoji.test.ts new file mode 100644 index 000000000..f1cbfd815 --- /dev/null +++ b/packages/structures/__tests__/emoji.test.ts @@ -0,0 +1,66 @@ +import { DiscordSnowflake } from '@sapphire/snowflake'; +import type { APIEmoji, APIUser } from 'discord-api-types/v10'; +import { beforeEach, describe, expect, test } from 'vitest'; +import { Emoji } from '../src/emojis/Emoji.js'; +import { kPatch } from '../src/utils/symbols.js'; + +describe('Emoji structure', () => { + const user: APIUser = { + id: '1028645863041548409', + username: 'username', + discriminator: '0000', + global_name: 'User', + avatar: 'ae786a76a887687a6eaea877866768', + }; + + const data: APIEmoji = { + id: '300390514065276939', + name: 'name', + roles: ['222089694387765248'], + user, + require_colons: true, + managed: true, + animated: true, + available: true, + }; + + let instance: Emoji; + + beforeEach(() => { + instance = new Emoji(data); + }); + + test('Emoji has all properties', () => { + expect(instance.id).toBe(data.id); + expect(instance.name).toBe(data.name); + expect(instance.requireColons).toBe(data.require_colons); + expect(instance.managed).toBe(data.managed); + expect(instance.animated).toBe(data.animated); + expect(instance.available).toBe(data.available); + + const createdTimestamp = DiscordSnowflake.timestampFrom(data.id!); + expect(instance.createdTimestamp).toBe(createdTimestamp); + expect(instance.createdDate!.valueOf()).toBe(createdTimestamp); + }); + + test('toJSON() is accurate', () => { + expect(instance.toJSON()).toStrictEqual(data); + }); + + test('Patching the Emoji works in place', () => { + const patched = instance[kPatch]({ + available: false, + }); + + expect(patched.available).toBe(false); + + expect(patched.toJSON()).toEqual({ ...data, available: false }); + expect(patched).toBe(instance); + }); + + test('createdTimestamp/createdAt returns null if id is not set', () => { + const instanceWithNoId = new Emoji({ ...data, id: null }); + expect(instanceWithNoId.createdTimestamp).toBeNull(); + expect(instanceWithNoId.createdDate).toBeNull(); + }); +});