Files
ncd-fe/src/schemas/instance.test.ts
2023-10-28 20:51:55 +02:00

215 lines
6.0 KiB
TypeScript

import { instanceSchema } from './instance';
describe('instanceSchema.parse()', () => {
it('normalizes an empty Map', () => {
const expected = {
configuration: {
media_attachments: {},
chats: {
max_characters: 5000,
max_media_attachments: 1,
},
groups: {
max_characters_name: 50,
max_characters_description: 160,
},
polls: {
max_options: 4,
max_characters_per_option: 25,
min_expiration: 300,
max_expiration: 2629746,
},
statuses: {
max_characters: 500,
max_media_attachments: 4,
},
translation: {
enabled: false,
},
urls: {},
},
contact: {
email: '',
},
description: '',
domain: '',
feature_quote: false,
fedibird_capabilities: [],
languages: [],
pleroma: {
metadata: {
account_activation_required: false,
birthday_min_age: 0,
birthday_required: false,
description_limit: 1500,
features: [],
federation: {
enabled: true,
},
},
stats: {},
},
registrations: {
approval_required: false,
enabled: false,
},
rules: [],
stats: {},
title: '',
thumbnail: {
url: '',
},
usage: {
users: {
active_month: 0,
},
},
version: '0.0.0',
};
const result = instanceSchema.parse({});
expect(result).toMatchObject(expected);
});
it('normalizes Pleroma instance with Mastodon configuration format', () => {
const instance = require('soapbox/__fixtures__/pleroma-instance.json');
const expected = {
configuration: {
statuses: {
max_characters: 5000,
max_media_attachments: Infinity,
},
polls: {
max_options: 20,
max_characters_per_option: 200,
min_expiration: 0,
max_expiration: 31536000,
},
},
};
const result = instanceSchema.parse(instance);
expect(result).toMatchObject(expected);
});
it('normalizes Mastodon instance with retained configuration', () => {
const instance = require('soapbox/__fixtures__/mastodon-instance.json');
const expected = {
configuration: {
statuses: {
max_characters: 500,
max_media_attachments: 4,
characters_reserved_per_url: 23,
},
media_attachments: {
image_size_limit: 10485760,
image_matrix_limit: 16777216,
video_size_limit: 41943040,
video_frame_rate_limit: 60,
video_matrix_limit: 2304000,
},
polls: {
max_options: 4,
max_characters_per_option: 50,
min_expiration: 300,
max_expiration: 2629746,
},
},
};
const result = instanceSchema.parse(instance);
expect(result).toMatchObject(expected);
});
it('normalizes Mastodon 3.0.0 instance with default configuration', () => {
const instance = require('soapbox/__fixtures__/mastodon-3.0.0-instance.json');
const expected = {
configuration: {
statuses: {
max_characters: 500,
max_media_attachments: 4,
},
polls: {
max_options: 4,
max_characters_per_option: 25,
min_expiration: 300,
max_expiration: 2629746,
},
},
};
const result = instanceSchema.parse(instance);
expect(result).toMatchObject(expected);
});
it('normalizes Fedibird instance', () => {
const instance = require('soapbox/__fixtures__/fedibird-instance.json');
const result = instanceSchema.parse(instance);
// Sets description_limit
expect(result.pleroma.metadata.description_limit).toEqual(1500);
// Preserves fedibird_capabilities
expect(result.fedibird_capabilities).toEqual(instance.fedibird_capabilities);
});
it('normalizes Mitra instance', () => {
const instance = require('soapbox/__fixtures__/mitra-instance.json');
const result = instanceSchema.parse(instance);
// Adds configuration and description_limit
expect(result.configuration).toBeTruthy();
expect(result.pleroma.metadata.description_limit).toBe(1500);
});
it('normalizes GoToSocial instance', () => {
const instance = require('soapbox/__fixtures__/gotosocial-instance.json');
const result = instanceSchema.parse(instance);
// Normalizes max_toot_chars
expect(result.configuration.statuses.max_characters).toEqual(5000);
expect('max_toot_chars' in result).toBe(false);
// Adds configuration and description_limit
expect(result.configuration).toBeTruthy();
expect(result.pleroma.metadata.description_limit).toBe(1500);
});
it('normalizes Friendica instance', () => {
const instance = require('soapbox/__fixtures__/friendica-instance.json');
const result = instanceSchema.parse(instance);
// Normalizes max_toot_chars
expect(result.configuration.statuses.max_characters).toEqual(200000);
expect('max_toot_chars' in result).toBe(false);
// Adds configuration and description_limit
expect(result.configuration).toBeTruthy();
expect(result.pleroma.metadata.description_limit).toBe(1500);
});
it('normalizes a Mastodon RC version', () => {
const instance = require('soapbox/__fixtures__/mastodon-instance-rc.json');
const result = instanceSchema.parse(instance);
expect(result.version).toEqual('3.5.0-rc1');
});
it('normalizes Pixelfed instance', () => {
const instance = require('soapbox/__fixtures__/pixelfed-instance.json');
const result = instanceSchema.parse(instance);
expect(result.title).toBe('pixelfed');
});
it('renames Akkoma to Pleroma', () => {
const instance = require('soapbox/__fixtures__/akkoma-instance.json');
const result = instanceSchema.parse(instance);
expect(result.version).toEqual('2.7.2 (compatible; Pleroma 2.4.50+akkoma)');
});
});