bigbuffet-rw/app/soapbox/reducers/__tests__/instance.test.ts

143 lines
3.8 KiB
TypeScript
Raw Normal View History

2022-03-08 21:59:59 -08:00
import { Record } from 'immutable';
2022-03-20 16:41:47 -07:00
import { ADMIN_CONFIG_UPDATE_REQUEST } from 'soapbox/actions/admin';
import { rememberInstance } from 'soapbox/actions/instance';
2022-01-10 14:01:24 -08:00
import reducer from '../instance';
2020-06-09 18:08:07 -07:00
describe('instance reducer', () => {
it('should return the initial state', () => {
const result = reducer(undefined, {} as any);
2022-03-08 21:25:30 -08:00
const expected = {
description_limit: 1500,
2022-03-08 21:25:30 -08:00
configuration: {
chats: {
max_characters: 500,
},
2022-03-08 21:25:30 -08:00
statuses: {
max_characters: 500,
2022-01-31 15:52:12 -08:00
max_media_attachments: 4,
2022-03-08 21:25:30 -08:00
},
polls: {
max_options: 4,
max_characters_per_option: 25,
min_expiration: 300,
max_expiration: 2629746,
2022-03-08 21:25:30 -08:00
},
},
2021-01-18 12:14:08 -08:00
version: '0.0.0',
2022-03-08 21:25:30 -08:00
};
2022-03-08 21:59:59 -08:00
expect(Record.isRecord(result)).toBe(true);
2022-03-08 21:25:30 -08:00
expect(result.toJS()).toMatchObject(expected);
2020-06-09 18:08:07 -07:00
});
describe('rememberInstance.fulfilled', () => {
it('normalizes Pleroma instance with Mastodon configuration format', () => {
const action = {
type: rememberInstance.fulfilled.type,
payload: require('soapbox/__fixtures__/pleroma-instance.json'),
};
const result = reducer(undefined, action);
const expected = {
configuration: {
statuses: {
max_characters: 5000,
2022-01-31 15:52:12 -08:00
max_media_attachments: Infinity,
},
polls: {
max_options: 20,
max_characters_per_option: 200,
min_expiration: 0,
max_expiration: 31536000,
},
},
};
expect(result.toJS()).toMatchObject(expected);
});
it('normalizes Mastodon instance with retained configuration', () => {
const action = {
type: rememberInstance.fulfilled.type,
payload: require('soapbox/__fixtures__/mastodon-instance.json'),
};
const result = reducer(undefined, action);
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,
},
},
};
expect(result.toJS()).toMatchObject(expected);
});
it('normalizes Mastodon 3.0.0 instance with default configuration', () => {
const action = {
type: rememberInstance.fulfilled.type,
payload: require('soapbox/__fixtures__/mastodon-3.0.0-instance.json'),
};
const result = reducer(undefined, action);
const expected = {
configuration: {
statuses: {
max_characters: 500,
2022-01-31 15:52:12 -08:00
max_media_attachments: 4,
},
polls: {
max_options: 4,
max_characters_per_option: 25,
min_expiration: 300,
max_expiration: 2629746,
},
},
};
expect(result.toJS()).toMatchObject(expected);
});
});
2022-03-20 16:41:47 -07:00
describe('ADMIN_CONFIG_UPDATE_REQUEST', () => {
const { configs } = require('soapbox/__fixtures__/pleroma-admin-config.json');
it('imports the configs', () => {
const action = {
type: ADMIN_CONFIG_UPDATE_REQUEST,
configs,
};
// The normalizer has `registrations: closed` by default
const state = reducer(undefined, {} as any);
2022-03-20 16:41:47 -07:00
expect(state.registrations).toBe(false);
// After importing the configs, registration will be open
const result = reducer(state, action);
expect(result.registrations).toBe(true);
});
});
2020-06-09 18:08:07 -07:00
});