chore(repo): remove dead code and useless tests (#3375)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-10 21:43:29 +02:00
1 parent 7e177a1c90
commit 1cd62eb661
1391 files changed
+783 -120415

No files matched your search

@@ -1,146 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {
ASSET_FORMAT_POLICY,
formatAssetUploadExtensions,
formatKnownAnimatedAssetExtensions,
getAcceptString,
getUploadExtensions,
isExtensionAllowed,
} from '@fluxer/constants/src/AssetFormatPolicy';
import {describe, expect, it} from 'vitest';
describe('AssetFormatPolicy', () => {
describe('ASSET_FORMAT_POLICY', () => {
it('exposes an entry for every documented asset kind', () => {
expect(Object.keys(ASSET_FORMAT_POLICY).sort()).toEqual(
['attachment', 'avatar', 'banner', 'embed_splash', 'emoji', 'guild_icon', 'splash', 'sticker'].sort(),
);
});
it('keeps animated-only assets out of static-only kinds', () => {
for (const kind of ['splash', 'embed_splash'] as const) {
const entry = ASSET_FORMAT_POLICY[kind];
expect(entry.animated).toBe('never');
expect(entry.upload).not.toContain('gif');
expect(entry.upload).not.toContain('apng');
}
});
it('includes HEIC/JXL/AVIF on avatar uploads (iPhone + modern web)', () => {
expect(ASSET_FORMAT_POLICY.avatar.upload).toEqual(
expect.arrayContaining(['heic', 'heif', 'jxl', 'avif', 'apng']),
);
});
it('limits sticker uploads to the historical sticker set plus jpeg and svg', () => {
expect([...ASSET_FORMAT_POLICY.sticker.upload].sort()).toEqual([
'apng',
'avif',
'gif',
'jpeg',
'png',
'svg',
'webp',
]);
});
it('accepts svg uploads on every image asset kind', () => {
for (const kind of [
'avatar',
'guild_icon',
'banner',
'splash',
'embed_splash',
'emoji',
'sticker',
'attachment',
] as const) {
expect(ASSET_FORMAT_POLICY[kind].upload).toContain('svg');
expect(ASSET_FORMAT_POLICY[kind].mimes.svg).toBe('image/svg+xml');
}
});
it('has a mime entry for every accepted extension', () => {
for (const entry of Object.values(ASSET_FORMAT_POLICY)) {
for (const ext of entry.upload) {
expect(entry.mimes[ext]).toMatch(/^image\//);
}
}
});
});
describe('getAcceptString', () => {
it('returns extensions and MIMEs joined by commas', () => {
const accept = getAcceptString('avatar');
expect(accept).toContain('.png');
expect(accept).toContain('image/png');
expect(accept).toContain('.heic');
expect(accept).toContain('image/heic');
expect(accept).toContain('.jxl');
});
it('does not include image/* wildcard (we want strict negotiation)', () => {
expect(getAcceptString('emoji')).not.toContain('image/*');
});
it('can filter extension-only animated formats when animation is unavailable', () => {
const accept = getAcceptString('guild_icon', {animatedAllowed: false});
expect(accept).not.toContain('.gif');
expect(accept).not.toContain('image/gif');
expect(accept).not.toContain('.apng');
expect(accept).not.toContain('image/apng');
expect(accept).toContain('.svg');
expect(accept).toContain('image/svg+xml');
expect(accept).toContain('.avif');
expect(accept).toContain('image/avif');
});
});
describe('getUploadExtensions', () => {
it('returns the full backend upload policy by default', () => {
expect(getUploadExtensions('avatar')).toEqual([
'png',
'jpeg',
'webp',
'gif',
'apng',
'avif',
'heic',
'heif',
'jxl',
'svg',
]);
});
it('keeps static-capable expanded formats when filtering animation-only extensions', () => {
expect(getUploadExtensions('avatar', {animatedAllowed: false})).toEqual([
'png',
'jpeg',
'webp',
'avif',
'heic',
'heif',
'jxl',
'svg',
]);
});
});
describe('formatAssetUploadExtensions', () => {
it('formats user-facing labels from the upload policy', () => {
expect(formatAssetUploadExtensions('avatar')).toBe('PNG, JPEG, WebP, GIF, APNG, AVIF, HEIC, HEIF, JXL, SVG');
});
it('supports extension-style labels for API validation details', () => {
expect(formatAssetUploadExtensions('avatar', {labelStyle: 'extension'})).toBe(
'png, jpeg, webp, gif, apng, avif, heic, heif, jxl, svg',
);
});
});
describe('formatKnownAnimatedAssetExtensions', () => {
it('lists animated formats that are accepted as animated assets', () => {
expect(formatKnownAnimatedAssetExtensions('avatar')).toBe('GIF, APNG, WebP');
});
});
describe('isExtensionAllowed', () => {
it('accepts both raw and dot-prefixed extensions', () => {
expect(isExtensionAllowed('avatar', 'png')).toBe(true);
expect(isExtensionAllowed('avatar', '.png')).toBe(true);
expect(isExtensionAllowed('avatar', 'PNG')).toBe(true);
expect(isExtensionAllowed('avatar', 'jpg')).toBe(true);
});
it('rejects extensions not in the upload list', () => {
expect(isExtensionAllowed('splash', 'gif')).toBe(false);
expect(isExtensionAllowed('emoji', 'mp4' as never)).toBe(false);
});
});
});
@@ -1,46 +1,11 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {
ANNOUNCEMENT_CONVERTIBLE_CHANNEL_TYPES,
CHANNEL_FOLLOW_TARGET_TYPES,
ChannelTypes,
GUILD_TEXT_BASED_CHANNEL_TYPES,
isMessageTypeDeletable,
MessageFlags,
MessageTypes,
SENDABLE_MESSAGE_FLAGS,
TEXT_BASED_CHANNEL_TYPES,
WebhookTypes,
} from '@fluxer/constants/src/ChannelConstants';
import {MessageFlags, SENDABLE_MESSAGE_FLAGS} from '@fluxer/constants/src/ChannelConstants';
import {describe, expect, it} from 'vitest';
describe('announcement channel constants', () => {
it('treats announcement channels as guild text-based channels', () => {
expect(GUILD_TEXT_BASED_CHANNEL_TYPES.has(ChannelTypes.GUILD_ANNOUNCEMENT)).toBe(true);
expect(TEXT_BASED_CHANNEL_TYPES.has(ChannelTypes.GUILD_ANNOUNCEMENT)).toBe(true);
});
it('converts only between text and announcement channels', () => {
expect([...ANNOUNCEMENT_CONVERTIBLE_CHANNEL_TYPES].sort()).toEqual([
ChannelTypes.GUILD_TEXT,
ChannelTypes.GUILD_ANNOUNCEMENT,
]);
});
it('lets follows post only into text channels', () => {
expect([...CHANNEL_FOLLOW_TARGET_TYPES]).toEqual([ChannelTypes.GUILD_TEXT]);
});
it('lets members delete channel follow system messages', () => {
expect(isMessageTypeDeletable(MessageTypes.CHANNEL_FOLLOW_ADD)).toBe(true);
});
it('keeps the crosspost flags out of the sendable flags', () => {
const crosspostFlags = MessageFlags.CROSSPOSTED | MessageFlags.IS_CROSSPOST | MessageFlags.SOURCE_MESSAGE_DELETED;
expect(crosspostFlags & SENDABLE_MESSAGE_FLAGS).toBe(0);
});
it('names both webhook types', () => {
expect(WebhookTypes).toEqual({INCOMING: 1, CHANNEL_FOLLOWER: 2});
});
});
@@ -1,19 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {
entranceSoundExtensionFromFormat,
entranceSoundExtensionFromMime,
} from '@fluxer/constants/src/EntranceSoundConstants';
import {describe, expect, test} from 'vitest';
describe('entrance sound format detection', () => {
test('accepts wav metadata produced by the in-app trimmer', () => {
expect(entranceSoundExtensionFromFormat('wav')).toBe('wav');
expect(entranceSoundExtensionFromMime('audio/wav')).toBe('wav');
});
test('accepts common ffprobe compound format names', () => {
expect(entranceSoundExtensionFromFormat('mp3,mp2,mp1')).toBe('mp3');
expect(entranceSoundExtensionFromFormat('mov,mp4,m4a,3gp,3g2,mj2')).toBe('m4a');
});
});
@@ -6,7 +6,6 @@ import {
formatRecoveryKeyInput,
generateRecoveryKey,
normalizeRecoveryKey,
RECOVERY_KEY_FORMATTED_LENGTH,
RECOVERY_KEY_LENGTH,
} from '@fluxer/constants/src/RecoveryKeyUtils';
import {describe, expect, it} from 'vitest';
@@ -34,7 +33,7 @@ describe('generateRecoveryKey', () => {
it('returns the raw key and its display form', () => {
const {key, formatted} = generateRecoveryKey(new Uint8Array(20).fill(0xa5));
expect(key).toHaveLength(RECOVERY_KEY_LENGTH);
expect(formatted).toHaveLength(RECOVERY_KEY_FORMATTED_LENGTH);
expect(formatted).toHaveLength(39);
expect(formatted.split('-')).toHaveLength(8);
expect(formatted.replaceAll('-', '')).toBe(key);
expect(normalizeRecoveryKey(formatted)).toBe(key);
@@ -5,7 +5,6 @@ export const RECOVERY_KEY_BYTE_LENGTH = 20;
export const RECOVERY_KEY_LENGTH = 32;
const RECOVERY_KEY_GROUP_SIZE = 4;
export const RECOVERY_KEY_SEPARATOR = '-';
export const RECOVERY_KEY_FORMATTED_LENGTH = RECOVERY_KEY_LENGTH + RECOVERY_KEY_LENGTH / RECOVERY_KEY_GROUP_SIZE - 1;
const RECOVERY_KEY_ALIASES: Readonly<Record<string, string>> = {
O: '0',
@@ -15,7 +15,6 @@ import {
canViewThread,
DEFAULT_THREAD_PERMISSIONS,
isThreadModerator,
messageSendPermissionFor,
THREAD_AWARE_ALL_PERMISSIONS,
THREAD_PERMISSIONS,
type ThreadActorContext,
@@ -156,15 +155,4 @@ describe('thread permission bits', () => {
Permissions.SEND_MESSAGES,
);
});
it('picks the send bit by channel type', () => {
expect(messageSendPermissionFor(ChannelTypes.ANNOUNCEMENT_THREAD)).toBe(
ThreadPermissionFlags.SEND_MESSAGES_IN_THREADS,
);
expect(messageSendPermissionFor(ChannelTypes.PUBLIC_THREAD)).toBe(ThreadPermissionFlags.SEND_MESSAGES_IN_THREADS);
expect(messageSendPermissionFor(ChannelTypes.PRIVATE_THREAD)).toBe(ThreadPermissionFlags.SEND_MESSAGES_IN_THREADS);
expect(messageSendPermissionFor(ChannelTypes.GUILD_TEXT)).toBe(Permissions.SEND_MESSAGES);
expect(messageSendPermissionFor(ChannelTypes.GUILD_ANNOUNCEMENT)).toBe(Permissions.SEND_MESSAGES);
expect(messageSendPermissionFor(ChannelTypes.GUILD_FORUM)).toBe(Permissions.SEND_MESSAGES);
});
});
@@ -2,7 +2,6 @@
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
import {ALL_PERMISSIONS, ChannelTypes, Permissions} from '@fluxer/constants/src/ChannelConstants';
import {THREAD_CHANNEL_TYPES} from '@fluxer/constants/src/ThreadConstants';
export const ThreadPermissionFlags = {
MANAGE_THREADS: 1n << 34n,
@@ -89,10 +88,6 @@ export function threadViewPermissions(parentPerms: bigint): bigint {
: withoutSend;
}
export function messageSendPermissionFor(type: number): bigint {
return THREAD_CHANNEL_TYPES.has(type) ? ThreadPermissionFlags.SEND_MESSAGES_IN_THREADS : Permissions.SEND_MESSAGES;
}
export function canViewThread(ctx: ThreadActorContext): ThreadDenial | null {
const perms = withImplicitThreadBits(ctx.permissions);
if (!ctx.isOwner && !has(perms, Permissions.VIEW_CHANNEL)) return APIErrorCodes.MISSING_ACCESS;
@@ -12,9 +12,7 @@ export const ValidationErrorCodes = {
ANIMATED_GUILD_BANNER_REQUIRES_FEATURE: 'ANIMATED_GUILD_BANNER_REQUIRES_FEATURE',
AT_LEAST_ONE_ENTRY_IS_REQUIRED: 'AT_LEAST_ONE_ENTRY_IS_REQUIRED',
AT_LEAST_ONE_RECIPIENT_REQUIRED: 'AT_LEAST_ONE_RECIPIENT_REQUIRED',
ATTACHMENT_FIELDS_REQUIRED: 'ATTACHMENT_FIELDS_REQUIRED',
ATTACHMENT_ID_NOT_FOUND_IN_MESSAGE: 'ATTACHMENT_ID_NOT_FOUND_IN_MESSAGE',
ATTACHMENT_IDS_MUST_BE_VALID_INTEGERS: 'ATTACHMENT_IDS_MUST_BE_VALID_INTEGERS',
ATTACHMENT_MUST_BE_IMAGE: 'ATTACHMENT_MUST_BE_IMAGE',
ATTACHMENTS_NOT_ALLOWED_FOR_MESSAGE: 'ATTACHMENTS_NOT_ALLOWED_FOR_MESSAGE',
AVATAR_CHANGED_TOO_MANY_TIMES: 'AVATAR_CHANGED_TOO_MANY_TIMES',
@@ -22,7 +20,6 @@ export const ValidationErrorCodes = {
BANNERS_REQUIRE_PREMIUM: 'BANNERS_REQUIRE_PREMIUM',
BASE64_LENGTH_INVALID: 'BASE64_LENGTH_INVALID',
BIO_CHANGED_TOO_MANY_TIMES: 'BIO_CHANGED_TOO_MANY_TIMES',
BUCKET_IS_REQUIRED: 'BUCKET_IS_REQUIRED',
CANNOT_ADD_YOURSELF_TO_GROUP_DM: 'CANNOT_ADD_YOURSELF_TO_GROUP_DM',
CANNOT_DELETE_MORE_THAN_100_MESSAGES: 'CANNOT_DELETE_MORE_THAN_100_MESSAGES',
CANNOT_DM_YOURSELF: 'CANNOT_DM_YOURSELF',
@@ -183,9 +180,7 @@ export const ValidationErrorCodes = {
RECIPIENT_IDS_MUST_BE_STRINGS: 'RECIPIENT_IDS_MUST_BE_STRINGS',
RECIPIENT_IDS_MUST_BE_VALID_SNOWFLAKES: 'RECIPIENT_IDS_MUST_BE_VALID_SNOWFLAKES',
REFERENCED_ATTACHMENT_NOT_FOUND: 'REFERENCED_ATTACHMENT_NOT_FOUND',
ROWS_IS_REQUIRED: 'ROWS_IS_REQUIRED',
SESSION_TIMEOUT: 'SESSION_TIMEOUT',
SIZE_BYTES_MUST_BE_VALID_INTEGER: 'SIZE_BYTES_MUST_BE_VALID_INTEGER',
SSO_IDENTITY_MISMATCH: 'SSO_IDENTITY_MISMATCH',
SSO_MISCONFIGURED: 'SSO_MISCONFIGURED',
SSO_PROVIDER_DID_NOT_RETURN_EMAIL: 'SSO_PROVIDER_DID_NOT_RETURN_EMAIL',