test(backend): remove duplicate and useless tests (#2820)

This commit is contained in:
Hampus authored and GitHub committed 2026-09-17 15:32:25 +02:00
1 parent deac653a9e
commit 56e04e7b53
102 files changed
+10 -15831

No files matched your search

@@ -1,245 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {MAX_GROUP_DM_RECIPIENTS} from '@fluxer/constants/src/LimitConstants';
import {
ChannelOverwriteResponse,
ChannelPartialResponse,
ChannelResponse,
} from '@fluxer/schema/src/domains/channel/ChannelSchemas';
import {describe, expect, it} from 'vitest';
describe('ChannelOverwriteResponse', () => {
it('accepts valid channel overwrite', () => {
const result = ChannelOverwriteResponse.safeParse({
id: '123456789012345678',
type: 0,
allow: '8',
deny: '0',
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.id).toBe('123456789012345678');
expect(result.data.type).toBe(0);
}
});
it('requires all fields', () => {
const result = ChannelOverwriteResponse.safeParse({
id: '123456789012345678',
type: 0,
});
expect(result.success).toBe(false);
});
it('requires type to be integer', () => {
const result = ChannelOverwriteResponse.safeParse({
id: '123456789012345678',
type: 'role',
allow: '8',
deny: '0',
});
expect(result.success).toBe(false);
});
it('accepts member type (1)', () => {
const result = ChannelOverwriteResponse.safeParse({
id: '123456789012345678',
type: 1,
allow: '8',
deny: '0',
});
expect(result.success).toBe(true);
});
});
describe('ChannelResponse', () => {
const validChannel = {
id: '123456789012345678',
type: 0,
guild_id: '987654321098765432',
name: 'general',
topic: 'General discussion',
position: 0,
nsfw: false,
rate_limit_per_user: 0,
};
it('accepts valid channel response', () => {
const result = ChannelResponse.parse(validChannel);
expect(result.id).toBe('123456789012345678');
expect(result.name).toBe('general');
});
it('requires id and type', () => {
const {id, ...channelWithoutId} = validChannel;
const result = ChannelResponse.safeParse(channelWithoutId);
expect(result.success).toBe(false);
});
it('accepts DM channel without guild_id', () => {
const dmChannel = {
id: '123456789012345678',
type: 1,
recipients: [
{
id: '111111111111111111',
username: 'testuser',
discriminator: '0001',
global_name: null,
avatar: null,
avatar_color: null,
flags: 0,
},
],
};
const result = ChannelResponse.safeParse(dmChannel);
expect(result.success).toBe(true);
});
it('accepts channel with permission_overwrites', () => {
const channel = {
...validChannel,
permission_overwrites: [
{id: '111111111111111111', type: 0, allow: '8', deny: '0'},
{id: '222222222222222222', type: 1, allow: '0', deny: '2048'},
],
};
const result = ChannelResponse.parse(channel);
expect(result.permission_overwrites).toHaveLength(2);
});
it('accepts more permission_overwrites than the old response ceiling', () => {
const channel = {
...validChannel,
permission_overwrites: Array.from({length: 501}, (_, index) => ({
id: String(100000000000000000n + BigInt(index)),
type: 0,
allow: '8',
deny: '0',
})),
};
const result = ChannelResponse.parse(channel);
expect(result.permission_overwrites).toHaveLength(501);
});
it('accepts voice channel properties', () => {
const voiceChannel = {
...validChannel,
type: 2,
bitrate: 64000,
user_limit: 10,
voice_connection_limit: 5,
rtc_region: 'us-west',
};
const result = ChannelResponse.parse(voiceChannel);
expect(result.bitrate).toBe(64000);
expect(result.user_limit).toBe(10);
expect(result.voice_connection_limit).toBe(5);
});
it('accepts null optional fields', () => {
const channel = {
...validChannel,
topic: null,
parent_id: null,
last_message_id: null,
last_pin_timestamp: null,
};
const result = ChannelResponse.safeParse(channel);
expect(result.success).toBe(true);
});
it('accepts channel with nicks', () => {
const channel = {
id: '123456789012345678',
type: 3,
nicks: {
'111111111111111111': 'Friend 1',
'222222222222222222': 'Friend 2',
},
};
const result = ChannelResponse.parse(channel);
expect(result.nicks).toBeDefined();
});
it('accepts valid last_pin_timestamp', () => {
const channel = {
...validChannel,
last_pin_timestamp: '2024-01-15T12:30:00.000Z',
};
const result = ChannelResponse.safeParse(channel);
expect(result.success).toBe(true);
});
it('accepts valid url', () => {
const channel = {
...validChannel,
url: 'https://example.com',
};
const result = ChannelResponse.safeParse(channel);
expect(result.success).toBe(true);
});
it('requires type to be integer', () => {
const channel = {...validChannel, type: 'text'};
const result = ChannelResponse.safeParse(channel);
expect(result.success).toBe(false);
});
it('requires position to be integer when present', () => {
const channel = {...validChannel, position: 1.5};
const result = ChannelResponse.safeParse(channel);
expect(result.success).toBe(false);
});
});
describe('ChannelPartialResponse', () => {
it('accepts valid partial channel', () => {
const result = ChannelPartialResponse.safeParse({
id: '123456789012345678',
name: 'general',
type: 0,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.id).toBe('123456789012345678');
expect(result.data.name).toBe('general');
}
});
it('requires id and type', () => {
const result = ChannelPartialResponse.safeParse({
name: 'general',
});
expect(result.success).toBe(false);
});
it('accepts null name', () => {
const result = ChannelPartialResponse.safeParse({
id: '123456789012345678',
name: null,
type: 1,
});
expect(result.success).toBe(true);
});
it('accepts DM channel with recipients', () => {
const result = ChannelPartialResponse.safeParse({
id: '123456789012345678',
type: 1,
recipients: [{username: 'testuser'}],
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.recipients).toHaveLength(1);
}
});
it('accepts channel without name or recipients', () => {
const result = ChannelPartialResponse.safeParse({
id: '123456789012345678',
type: 0,
});
expect(result.success).toBe(true);
});
it('accepts a full group DM with every recipient listed', () => {
const result = ChannelPartialResponse.safeParse({
id: '123456789012345678',
type: 3,
recipients: Array.from({length: MAX_GROUP_DM_RECIPIENTS}, (_, index) => ({username: `user${index}`})),
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.recipients).toHaveLength(MAX_GROUP_DM_RECIPIENTS);
}
});
it('rejects more recipients than a group DM can hold', () => {
const result = ChannelPartialResponse.safeParse({
id: '123456789012345678',
type: 3,
recipients: Array.from({length: MAX_GROUP_DM_RECIPIENTS + 1}, (_, index) => ({username: `user${index}`})),
});
expect(result.success).toBe(false);
});
});
@@ -1,323 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {
EmbedAuthorResponse,
EmbedFieldResponse,
EmbedFooterResponse,
EmbedMediaResponse,
MessageEmbedResponse,
} from '@fluxer/schema/src/domains/message/EmbedSchemas';
import {describe, expect, it} from 'vitest';
describe('EmbedAuthorResponse', () => {
it('accepts valid author with name only', () => {
const result = EmbedAuthorResponse.safeParse({
name: 'Test Author',
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.name).toBe('Test Author');
}
});
it('accepts author with all fields', () => {
const result = EmbedAuthorResponse.safeParse({
name: 'Test Author',
url: 'https://example.com',
icon_url: 'https://example.com/icon.png',
proxy_icon_url: 'https://proxy.example.com/icon.png',
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.url).toBe('https://example.com');
}
});
it('accepts null optional fields', () => {
const result = EmbedAuthorResponse.safeParse({
name: 'Test Author',
url: null,
icon_url: null,
});
expect(result.success).toBe(true);
});
it('requires name', () => {
const result = EmbedAuthorResponse.safeParse({
url: 'https://example.com',
});
expect(result.success).toBe(false);
});
});
describe('EmbedFooterResponse', () => {
it('accepts valid footer with text only', () => {
const result = EmbedFooterResponse.safeParse({
text: 'Footer text',
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.text).toBe('Footer text');
}
});
it('accepts footer with all fields', () => {
const result = EmbedFooterResponse.safeParse({
text: 'Footer text',
icon_url: 'https://example.com/icon.png',
proxy_icon_url: 'https://proxy.example.com/icon.png',
});
expect(result.success).toBe(true);
});
it('accepts null icon urls', () => {
const result = EmbedFooterResponse.safeParse({
text: 'Footer text',
icon_url: null,
proxy_icon_url: null,
});
expect(result.success).toBe(true);
});
it('requires text', () => {
const result = EmbedFooterResponse.safeParse({
icon_url: 'https://example.com/icon.png',
});
expect(result.success).toBe(false);
});
});
describe('EmbedMediaResponse', () => {
it('accepts valid media with url and flags', () => {
const result = EmbedMediaResponse.safeParse({
url: 'https://example.com/image.png',
flags: 0,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.url).toBe('https://example.com/image.png');
}
});
it('accepts media with all fields', () => {
const result = EmbedMediaResponse.safeParse({
url: 'https://example.com/image.png',
proxy_url: 'https://proxy.example.com/image.png',
content_type: 'image/png',
content_hash: 'abc123',
width: 800,
height: 600,
description: 'An image',
placeholder: 'placeholder-data',
duration: 0,
flags: 0,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.width).toBe(800);
expect(result.data.height).toBe(600);
}
});
it('accepts null optional fields', () => {
const result = EmbedMediaResponse.safeParse({
url: 'https://example.com/image.png',
proxy_url: null,
content_type: null,
content_hash: null,
width: null,
height: null,
flags: 0,
});
expect(result.success).toBe(true);
});
it('requires url', () => {
const result = EmbedMediaResponse.safeParse({
flags: 0,
});
expect(result.success).toBe(false);
});
it('requires flags', () => {
const result = EmbedMediaResponse.safeParse({
url: 'https://example.com/image.png',
});
expect(result.success).toBe(false);
});
it('requires width and height to be integers', () => {
const result = EmbedMediaResponse.safeParse({
url: 'https://example.com/image.png',
width: 800.5,
height: 600,
flags: 0,
});
expect(result.success).toBe(false);
});
});
describe('EmbedFieldResponse', () => {
it('accepts valid field', () => {
const result = EmbedFieldResponse.safeParse({
name: 'Field Name',
value: 'Field Value',
inline: false,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.name).toBe('Field Name');
expect(result.data.value).toBe('Field Value');
}
});
it('accepts inline field', () => {
const result = EmbedFieldResponse.safeParse({
name: 'Field Name',
value: 'Field Value',
inline: true,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.inline).toBe(true);
}
});
it('requires all fields', () => {
const result = EmbedFieldResponse.safeParse({
name: 'Field Name',
value: 'Field Value',
});
expect(result.success).toBe(false);
});
it('requires name', () => {
const result = EmbedFieldResponse.safeParse({
value: 'Field Value',
inline: false,
});
expect(result.success).toBe(false);
});
it('requires value', () => {
const result = EmbedFieldResponse.safeParse({
name: 'Field Name',
inline: false,
});
expect(result.success).toBe(false);
});
});
describe('MessageEmbedResponse', () => {
it('accepts valid embed with type only', () => {
const result = MessageEmbedResponse.safeParse({
type: 'rich',
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.type).toBe('rich');
}
});
it('accepts full rich embed', () => {
const result = MessageEmbedResponse.safeParse({
type: 'rich',
url: 'https://example.com',
title: 'Embed Title',
color: 0xff5500,
timestamp: '2024-01-15T12:30:00.000Z',
description: 'This is a description',
author: {
name: 'Author Name',
url: 'https://example.com/author',
},
image: {
url: 'https://example.com/image.png',
flags: 0,
},
thumbnail: {
url: 'https://example.com/thumb.png',
flags: 0,
},
footer: {
text: 'Footer text',
},
fields: [
{name: 'Field 1', value: 'Value 1', inline: false},
{name: 'Field 2', value: 'Value 2', inline: true},
],
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.title).toBe('Embed Title');
expect(result.data.fields).toHaveLength(2);
}
});
it('accepts video embed', () => {
const result = MessageEmbedResponse.safeParse({
type: 'video',
url: 'https://example.com/video',
video: {
url: 'https://example.com/video.mp4',
flags: 0,
width: 1920,
height: 1080,
},
provider: {
name: 'Video Provider',
},
});
expect(result.success).toBe(true);
});
it('accepts audio embed', () => {
const result = MessageEmbedResponse.safeParse({
type: 'audio',
audio: {
url: 'https://example.com/audio.mp3',
flags: 0,
duration: 180,
},
});
expect(result.success).toBe(true);
});
it('accepts null optional fields', () => {
const result = MessageEmbedResponse.safeParse({
type: 'rich',
url: null,
title: null,
color: null,
timestamp: null,
description: null,
author: null,
image: null,
thumbnail: null,
footer: null,
fields: null,
});
expect(result.success).toBe(true);
});
it('requires type', () => {
const result = MessageEmbedResponse.safeParse({
title: 'Title without type',
});
expect(result.success).toBe(false);
});
it('accepts nsfw flag', () => {
const result = MessageEmbedResponse.safeParse({
type: 'image',
nsfw: true,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.nsfw).toBe(true);
}
});
it('accepts color as integer', () => {
const result = MessageEmbedResponse.safeParse({
type: 'rich',
color: 16711680,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.color).toBe(16711680);
}
});
it('rejects non-integer color', () => {
const result = MessageEmbedResponse.safeParse({
type: 'rich',
color: 123.45,
});
expect(result.success).toBe(false);
});
it('accepts valid ISO timestamp', () => {
const result = MessageEmbedResponse.safeParse({
type: 'rich',
timestamp: '2024-01-15T12:30:00Z',
});
expect(result.success).toBe(true);
});
});
@@ -1,247 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {GuildFeatures, GuildSplashCardAlignment} from '@fluxer/constants/src/GuildConstants';
import {
GuildPartialResponse,
GuildResponse,
GuildVanityURLResponse,
} from '@fluxer/schema/src/domains/guild/GuildResponseSchemas';
import {describe, expect, it} from 'vitest';
describe('GuildResponse', () => {
const validGuild = {
id: '123456789012345678',
name: 'Test Guild',
icon: 'icon_hash',
banner: 'banner_hash',
banner_width: 1920,
banner_height: 1080,
splash: 'splash_hash',
splash_width: 1920,
splash_height: 1080,
splash_card_alignment: GuildSplashCardAlignment.CENTER,
embed_splash: 'embed_splash_hash',
embed_splash_width: 800,
embed_splash_height: 600,
vanity_url_code: 'myserver',
owner_id: '987654321098765432',
system_channel_id: '111111111111111111',
system_channel_flags: 0,
rules_channel_id: '222222222222222222',
afk_channel_id: '333333333333333333',
afk_timeout: 300,
features: [GuildFeatures.VERIFIED, GuildFeatures.VANITY_URL],
verification_level: 2,
mfa_level: 1,
nsfw_level: 0,
nsfw: false,
content_warning_level: 0,
content_warning_text: null,
explicit_content_filter: 2,
default_message_notifications: 1,
disabled_operations: 0,
message_history_cutoff: null,
permissions: '8',
};
it('accepts valid guild response', () => {
const result = GuildResponse.parse(validGuild);
expect(result.id).toBe('123456789012345678');
expect(result.name).toBe('Test Guild');
});
it('accepts guild with null optional fields', () => {
const guild = {
...validGuild,
icon: null,
banner: null,
splash: null,
vanity_url_code: null,
system_channel_id: null,
rules_channel_id: null,
afk_channel_id: null,
};
const result = GuildResponse.safeParse(guild);
expect(result.success).toBe(true);
});
it('rejects null permissions because the field is omitted when unavailable', () => {
const guild = {...validGuild, permissions: null};
const result = GuildResponse.safeParse(guild);
expect(result.success).toBe(false);
});
it('accepts all splash_card_alignment values', () => {
for (const alignment of [
GuildSplashCardAlignment.LEFT,
GuildSplashCardAlignment.CENTER,
GuildSplashCardAlignment.RIGHT,
]) {
const guild = {...validGuild, splash_card_alignment: alignment};
const result = GuildResponse.safeParse(guild);
expect(result.success).toBe(true);
}
});
it('rejects invalid splash_card_alignment', () => {
const guild = {...validGuild, splash_card_alignment: 'invalid'};
const result = GuildResponse.safeParse(guild);
expect(result.success).toBe(false);
});
it('rejects missing required fields', () => {
const {id, ...guildWithoutId} = validGuild;
const result = GuildResponse.safeParse(guildWithoutId);
expect(result.success).toBe(false);
});
it('requires owner_id', () => {
const {owner_id, ...guildWithoutOwner} = validGuild;
const result = GuildResponse.safeParse(guildWithoutOwner);
expect(result.success).toBe(false);
});
it('requires name', () => {
const {name, ...guildWithoutName} = validGuild;
const result = GuildResponse.safeParse(guildWithoutName);
expect(result.success).toBe(false);
});
it('requires features array', () => {
const {features, ...guildWithoutFeatures} = validGuild;
const result = GuildResponse.safeParse(guildWithoutFeatures);
expect(result.success).toBe(false);
});
it('accepts empty features array', () => {
const guild = {...validGuild, features: []};
const result = GuildResponse.safeParse(guild);
expect(result.success).toBe(true);
});
it('accepts RAID_DETECTED as a known guild feature', () => {
const guild = {
...validGuild,
features: [GuildFeatures.RAID_DETECTED, GuildFeatures.VERIFIED],
};
const result = GuildResponse.parse(guild);
expect(result.features).toEqual([GuildFeatures.RAID_DETECTED, GuildFeatures.VERIFIED]);
});
it('preserves unknown features in guild response', () => {
const guild = {
...validGuild,
features: [GuildFeatures.VERIFIED, 'DISALLOW_UNCLAIMED_ACCOUNTS'],
};
const result = GuildResponse.parse(guild);
expect(result.features).toEqual(['DISALLOW_UNCLAIMED_ACCOUNTS', GuildFeatures.VERIFIED]);
});
it('deduplicates and sorts guild features while preserving values', () => {
const guild = {
...validGuild,
features: [GuildFeatures.VERIFIED, 'DISALLOW_UNCLAIMED_ACCOUNTS', GuildFeatures.VERIFIED],
};
const result = GuildResponse.parse(guild);
expect(result.features).toEqual(['DISALLOW_UNCLAIMED_ACCOUNTS', GuildFeatures.VERIFIED]);
});
it('rejects non-integer system_channel_flags', () => {
const guild = {...validGuild, system_channel_flags: 1.5};
const result = GuildResponse.safeParse(guild);
expect(result.success).toBe(false);
});
it('rejects non-integer verification_level', () => {
const guild = {...validGuild, verification_level: 'high'};
const result = GuildResponse.safeParse(guild);
expect(result.success).toBe(false);
});
});
describe('GuildPartialResponse', () => {
const validPartialGuild = {
id: '123456789012345678',
name: 'Test Guild',
icon: 'icon_hash',
banner: 'banner_hash',
banner_width: 1920,
banner_height: 1080,
splash: 'splash_hash',
splash_width: 1920,
splash_height: 1080,
splash_card_alignment: GuildSplashCardAlignment.CENTER,
embed_splash: 'embed_splash_hash',
embed_splash_width: 800,
embed_splash_height: 600,
features: [GuildFeatures.VERIFIED],
};
it('accepts valid partial guild response', () => {
const result = GuildPartialResponse.parse(validPartialGuild);
expect(result.id).toBe('123456789012345678');
expect(result.name).toBe('Test Guild');
});
it('accepts partial guild with null optional fields', () => {
const guild = {
...validPartialGuild,
icon: null,
banner: null,
splash: null,
embed_splash: null,
};
const result = GuildPartialResponse.safeParse(guild);
expect(result.success).toBe(true);
});
it('requires id', () => {
const {id, ...guildWithoutId} = validPartialGuild;
const result = GuildPartialResponse.safeParse(guildWithoutId);
expect(result.success).toBe(false);
});
it('requires name', () => {
const {name, ...guildWithoutName} = validPartialGuild;
const result = GuildPartialResponse.safeParse(guildWithoutName);
expect(result.success).toBe(false);
});
it('requires features array', () => {
const {features, ...guildWithoutFeatures} = validPartialGuild;
const result = GuildPartialResponse.safeParse(guildWithoutFeatures);
expect(result.success).toBe(false);
});
it('preserves unknown features in partial guild response', () => {
const guild = {
...validPartialGuild,
features: [GuildFeatures.VERIFIED, 'DISALLOW_UNCLAIMED_ACCOUNTS'],
};
const result = GuildPartialResponse.parse(guild);
expect(result.features).toEqual(['DISALLOW_UNCLAIMED_ACCOUNTS', GuildFeatures.VERIFIED]);
});
});
describe('GuildVanityURLResponse', () => {
it('accepts valid vanity URL response', () => {
const result = GuildVanityURLResponse.safeParse({
code: 'myserver',
uses: 42,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.code).toBe('myserver');
expect(result.data.uses).toBe(42);
}
});
it('accepts null code', () => {
const result = GuildVanityURLResponse.safeParse({
code: null,
uses: 0,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.code).toBeNull();
}
});
it('requires uses field', () => {
const result = GuildVanityURLResponse.safeParse({
code: 'myserver',
});
expect(result.success).toBe(false);
});
it('requires uses to be integer', () => {
const result = GuildVanityURLResponse.safeParse({
code: 'myserver',
uses: 1.5,
});
expect(result.success).toBe(false);
});
it('accepts zero uses', () => {
const result = GuildVanityURLResponse.safeParse({
code: 'myserver',
uses: 0,
});
expect(result.success).toBe(true);
});
});
@@ -1,218 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {
CustomStatusResponse,
RelationshipResponse,
UserPartialResponse,
UserProfileFullResponse,
} from '@fluxer/schema/src/domains/user/UserResponseSchemas';
import {describe, expect, it} from 'vitest';
describe('UserPartialResponse', () => {
const validUser = {
id: '123456789012345678',
username: 'testuser',
discriminator: '0001',
global_name: 'Test User',
avatar: 'avatar_hash',
avatar_color: 0xff5500,
flags: 0,
};
it('accepts valid user partial response', () => {
const result = UserPartialResponse.parse(validUser);
expect(result.id).toBe('123456789012345678');
expect(result.username).toBe('testuser');
});
it('accepts null global_name and avatar', () => {
const user = {
...validUser,
global_name: null,
avatar: null,
avatar_color: null,
};
const result = UserPartialResponse.safeParse(user);
expect(result.success).toBe(true);
});
it('accepts optional bot flag', () => {
const user = {...validUser, bot: true};
const result = UserPartialResponse.parse(user);
expect(result.bot).toBe(true);
});
it('accepts optional system flag', () => {
const user = {...validUser, system: true};
const result = UserPartialResponse.parse(user);
expect(result.system).toBe(true);
});
it('requires id', () => {
const {id, ...userWithoutId} = validUser;
const result = UserPartialResponse.safeParse(userWithoutId);
expect(result.success).toBe(false);
});
it('requires username', () => {
const {username, ...userWithoutUsername} = validUser;
const result = UserPartialResponse.safeParse(userWithoutUsername);
expect(result.success).toBe(false);
});
it('requires discriminator', () => {
const {discriminator, ...userWithoutDiscriminator} = validUser;
const result = UserPartialResponse.safeParse(userWithoutDiscriminator);
expect(result.success).toBe(false);
});
it('requires flags', () => {
const {flags, ...userWithoutFlags} = validUser;
const result = UserPartialResponse.safeParse(userWithoutFlags);
expect(result.success).toBe(false);
});
});
describe('UserProfileFullResponse', () => {
const user = {
id: '123456789012345678',
username: 'testuser',
discriminator: '0001',
global_name: 'Test User',
avatar: null,
avatar_color: null,
flags: 0,
};
const profile = {
user,
user_profile: {
bio: null,
pronouns: null,
banner: null,
banner_color: null,
accent_color: null,
},
guild_member_profile: null,
timezone_offset: -240,
};
it('accepts negative timezone offsets', () => {
const result = UserProfileFullResponse.safeParse(profile);
expect(result.success).toBe(true);
});
it('accepts null timezone offsets', () => {
const result = UserProfileFullResponse.safeParse({...profile, timezone_offset: null});
expect(result.success).toBe(true);
});
});
describe('CustomStatusResponse', () => {
it('accepts valid custom status', () => {
const result = CustomStatusResponse.safeParse({
text: 'Working on a project',
expires_at: '2024-01-15T18:00:00.000Z',
emoji_id: '123456789012345678',
emoji_name: 'custom_emoji',
emoji_animated: false,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.text).toBe('Working on a project');
}
});
it('accepts minimal custom status', () => {
const result = CustomStatusResponse.safeParse({
emoji_animated: false,
});
expect(result.success).toBe(true);
});
it('accepts null optional fields', () => {
const result = CustomStatusResponse.safeParse({
text: null,
expires_at: null,
emoji_id: null,
emoji_name: null,
emoji_animated: false,
});
expect(result.success).toBe(true);
});
it('accepts unicode emoji name', () => {
const result = CustomStatusResponse.safeParse({
emoji_name: '\uD83D\uDE00',
emoji_animated: false,
});
expect(result.success).toBe(true);
});
it('requires emoji_animated', () => {
const result = CustomStatusResponse.safeParse({
text: 'Hello',
});
expect(result.success).toBe(false);
});
it('accepts animated emoji', () => {
const result = CustomStatusResponse.safeParse({
emoji_id: '123456789012345678',
emoji_name: 'animated_emoji',
emoji_animated: true,
});
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.emoji_animated).toBe(true);
}
});
});
describe('RelationshipResponse', () => {
const validRelationship = {
id: '123456789012345678',
type: 1,
user: {
id: '987654321098765432',
username: 'friend',
discriminator: '0001',
global_name: 'Friend',
avatar: null,
avatar_color: null,
flags: 0,
},
nickname: 'Best Friend',
share_voice_activity: true,
friend_shares_voice_activity: true,
};
it('accepts valid relationship', () => {
const result = RelationshipResponse.parse(validRelationship);
expect(result.id).toBe('123456789012345678');
expect(result.type).toBe(1);
});
it('accepts relationship with null nickname', () => {
const relationship = {...validRelationship, nickname: null};
const result = RelationshipResponse.safeParse(relationship);
expect(result.success).toBe(true);
});
it('accepts relationship with since date', () => {
const relationship = {...validRelationship, since: '2024-01-01T00:00:00.000Z'};
const result = RelationshipResponse.safeParse(relationship);
expect(result.success).toBe(true);
});
it('requires id', () => {
const {id, ...relationshipWithoutId} = validRelationship;
const result = RelationshipResponse.safeParse(relationshipWithoutId);
expect(result.success).toBe(false);
});
it('requires type', () => {
const {type, ...relationshipWithoutType} = validRelationship;
const result = RelationshipResponse.safeParse(relationshipWithoutType);
expect(result.success).toBe(false);
});
it('requires user', () => {
const {user, ...relationshipWithoutUser} = validRelationship;
const result = RelationshipResponse.safeParse(relationshipWithoutUser);
expect(result.success).toBe(false);
});
it('validates nested user object', () => {
const relationship = {
...validRelationship,
user: {id: 'invalid'},
};
const result = RelationshipResponse.safeParse(relationship);
expect(result.success).toBe(false);
});
it('accepts different relationship types', () => {
for (const type of [1, 2, 3, 4]) {
const relationship = {...validRelationship, type};
const result = RelationshipResponse.safeParse(relationship);
expect(result.success).toBe(true);
}
});
});