Merge remote-tracking branch 'soapbox/develop' into announcements

This commit is contained in:
marcin mikołajczak
2022-07-09 19:35:03 +02:00
92 changed files with 679 additions and 503 deletions

View File

@@ -4,11 +4,13 @@ import {
getDomain,
} from '../accounts';
import type { ReducerAccount } from 'soapbox/reducers/accounts';
describe('getDomain', () => {
const account = AccountRecord({
acct: 'alice',
url: 'https://party.com/users/alice',
});
}) as ReducerAccount;
it('returns the domain', () => {
expect(getDomain(account)).toEqual('party.com');
});

View File

@@ -10,28 +10,28 @@ test('isIntegerId()', () => {
expect(isIntegerId('-1764036199')).toBe(true);
expect(isIntegerId('106801667066418367')).toBe(true);
expect(isIntegerId('9v5bmRalQvjOy0ECcC')).toBe(false);
expect(isIntegerId(null)).toBe(false);
expect(isIntegerId(undefined)).toBe(false);
expect(isIntegerId(null as any)).toBe(false);
expect(isIntegerId(undefined as any)).toBe(false);
});
describe('shortNumberFormat', () => {
test('handles non-numbers', () => {
render(<div data-testid='num'>{shortNumberFormat('not-number')}</div>, null, null);
render(<div data-testid='num'>{shortNumberFormat('not-number')}</div>, undefined, null);
expect(screen.getByTestId('num')).toHaveTextContent('•');
});
test('formats numbers under 1,000', () => {
render(<div data-testid='num'>{shortNumberFormat(555)}</div>, null, null);
render(<div data-testid='num'>{shortNumberFormat(555)}</div>, undefined, null);
expect(screen.getByTestId('num')).toHaveTextContent('555');
});
test('formats numbers under 1,000,000', () => {
render(<div data-testid='num'>{shortNumberFormat(5555)}</div>, null, null);
render(<div data-testid='num'>{shortNumberFormat(5555)}</div>, undefined, null);
expect(screen.getByTestId('num')).toHaveTextContent('5.6K');
});
test('formats numbers over 1,000,000', () => {
render(<div data-testid='num'>{shortNumberFormat(5555555)}</div>, null, null);
render(<div data-testid='num'>{shortNumberFormat(5555555)}</div>, undefined, null);
expect(screen.getByTestId('num')).toHaveTextContent('5.6M');
});
});

View File

@@ -1,4 +1,3 @@
import { fromJS } from 'immutable';
import { normalizeStatus } from 'soapbox/normalizers/status';
@@ -7,9 +6,11 @@ import {
defaultMediaVisibility,
} from '../status';
import type { ReducerStatus } from 'soapbox/reducers/statuses';
describe('hasIntegerMediaIds()', () => {
it('returns true for a Pleroma deleted status', () => {
const status = normalizeStatus(fromJS(require('soapbox/__fixtures__/pleroma-status-deleted.json')));
const status = normalizeStatus(require('soapbox/__fixtures__/pleroma-status-deleted.json')) as ReducerStatus;
expect(hasIntegerMediaIds(status)).toBe(true);
});
});
@@ -20,17 +21,17 @@ describe('defaultMediaVisibility()', () => {
});
it('hides sensitive media by default', () => {
const status = normalizeStatus({ sensitive: true });
const status = normalizeStatus({ sensitive: true }) as ReducerStatus;
expect(defaultMediaVisibility(status, 'default')).toBe(false);
});
it('hides media when displayMedia is hide_all', () => {
const status = normalizeStatus({});
const status = normalizeStatus({}) as ReducerStatus;
expect(defaultMediaVisibility(status, 'hide_all')).toBe(false);
});
it('shows sensitive media when displayMedia is show_all', () => {
const status = normalizeStatus({ sensitive: true });
const status = normalizeStatus({ sensitive: true }) as ReducerStatus;
expect(defaultMediaVisibility(status, 'show_all')).toBe(true);
});
});

View File

@@ -4,7 +4,7 @@ import { toTailwind, fromLegacyColors, expandPalette } from '../tailwind';
describe('toTailwind()', () => {
it('handles empty Soapbox config', () => {
const soapboxConfig = ImmutableMap();
const soapboxConfig = ImmutableMap<string, any>();
const result = toTailwind(soapboxConfig);
const expected = ImmutableMap({ colors: ImmutableMap() });
expect(result).toEqual(expected);

View File

@@ -4,70 +4,72 @@ import { normalizeStatus } from 'soapbox/normalizers/status';
import { shouldFilter } from '../timelines';
import type { ReducerStatus } from 'soapbox/reducers/statuses';
describe('shouldFilter', () => {
it('returns false under normal circumstances', () => {
const columnSettings = fromJS({});
const status = normalizeStatus(fromJS({}));
const status = normalizeStatus({}) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(false);
});
it('reblog: returns true when `shows.reblog == false`', () => {
const columnSettings = fromJS({ shows: { reblog: false } });
const status = normalizeStatus(fromJS({ reblog: {} }));
const status = normalizeStatus({ reblog: {} }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(true);
});
it('reblog: returns false when `shows.reblog == true`', () => {
const columnSettings = fromJS({ shows: { reblog: true } });
const status = normalizeStatus(fromJS({ reblog: {} }));
const status = normalizeStatus({ reblog: {} }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(false);
});
it('reply: returns true when `shows.reply == false`', () => {
const columnSettings = fromJS({ shows: { reply: false } });
const status = normalizeStatus(fromJS({ in_reply_to_id: '1234' }));
const status = normalizeStatus({ in_reply_to_id: '1234' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(true);
});
it('reply: returns false when `shows.reply == true`', () => {
const columnSettings = fromJS({ shows: { reply: true } });
const status = normalizeStatus(fromJS({ in_reply_to_id: '1234' }));
const status = normalizeStatus({ in_reply_to_id: '1234' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(false);
});
it('direct: returns true when `shows.direct == false`', () => {
const columnSettings = fromJS({ shows: { direct: false } });
const status = normalizeStatus(fromJS({ visibility: 'direct' }));
const status = normalizeStatus({ visibility: 'direct' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(true);
});
it('direct: returns false when `shows.direct == true`', () => {
const columnSettings = fromJS({ shows: { direct: true } });
const status = normalizeStatus(fromJS({ visibility: 'direct' }));
const status = normalizeStatus({ visibility: 'direct' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(false);
});
it('direct: returns false for a public post when `shows.direct == false`', () => {
const columnSettings = fromJS({ shows: { direct: false } });
const status = normalizeStatus(fromJS({ visibility: 'public' }));
const status = normalizeStatus({ visibility: 'public' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(false);
});
it('multiple settings', () => {
const columnSettings = fromJS({ shows: { reblog: false, reply: false, direct: false } });
const status = normalizeStatus(fromJS({ reblog: null, in_reply_to_id: null, visibility: 'direct' }));
const status = normalizeStatus({ reblog: null, in_reply_to_id: null, visibility: 'direct' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(true);
});
it('multiple settings', () => {
const columnSettings = fromJS({ shows: { reblog: false, reply: true, direct: false } });
const status = normalizeStatus(fromJS({ reblog: null, in_reply_to_id: '1234', visibility: 'public' }));
const status = normalizeStatus({ reblog: null, in_reply_to_id: '1234', visibility: 'public' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(false);
});
it('multiple settings', () => {
const columnSettings = fromJS({ shows: { reblog: true, reply: false, direct: true } });
const status = normalizeStatus(fromJS({ reblog: {}, in_reply_to_id: '1234', visibility: 'direct' }));
const status = normalizeStatus({ reblog: {}, in_reply_to_id: '1234', visibility: 'direct' }) as ReducerStatus;
expect(shouldFilter(status, columnSettings)).toBe(true);
});
});

View File

@@ -153,9 +153,7 @@ const getInstanceFeatures = (instance: Instance) => {
* @see POST /api/v1/accounts
* @see PATCH /api/v1/accounts/update_credentials
*/
// birthdays: v.software === PLEROMA && gte(v.version, '2.4.50'),
// FIXME: temporarily disabled until they can be deleted on the backend.
birthdays: false,
birthdays: v.software === PLEROMA && v.build === SOAPBOX && gte(v.version, '2.4.50'),
/** Whether people who blocked you are visible through the API. */
blockersVisible: features.includes('blockers_visible'),