svelte-i18n/test/runtime/index.test.ts
Christian Kaisermann 940aa65f8c style: 💄 format tests
2020-11-05 15:55:42 -03:00

76 lines
2.1 KiB
TypeScript

import { defineMessages, waitLocale, register, init } from '../../src/runtime';
import { $locale } from '../../src/runtime/stores/locale';
import { hasLocaleQueue } from '../../src/runtime/includes/loaderQueue';
import {
getLocaleDictionary,
$dictionary,
} from '../../src/runtime/stores/dictionary';
import { $format } from '../../src/runtime/stores/formatters';
test('defineMessages returns the identity of its first argument', () => {
const obj = {};
expect(obj).toBe(defineMessages(obj));
});
describe('waiting for a locale to load', () => {
beforeEach(() => {
$dictionary.set({});
$locale.set(undefined);
});
it('should wait for a locale queue to be flushed', async () => {
register('en', () => Promise.resolve({ foo: 'foo' }));
$locale.set('en');
await waitLocale('en');
expect(hasLocaleQueue('en')).toBe(false);
expect(getLocaleDictionary('en')).toMatchObject({ foo: 'foo' });
});
it('should wait for the current locale queue to be flushed', async () => {
register('en', () => Promise.resolve({ foo: 'foo' }));
init({ fallbackLocale: 'pt', initialLocale: 'en' });
await waitLocale();
expect(hasLocaleQueue('en')).toBe(false);
expect(getLocaleDictionary('en')).toMatchObject({ foo: 'foo' });
});
it('should wait for the fallback locale queue to be flushed if initial not set', async () => {
register('pt', () => Promise.resolve({ foo: 'foo' }));
init({ fallbackLocale: 'pt' });
await waitLocale();
expect(hasLocaleQueue('pt')).toBe(false);
expect(getLocaleDictionary('pt')).toMatchObject({ foo: 'foo' });
});
});
describe('format updates', () => {
beforeEach(() => {
init({ fallbackLocale: 'en' });
});
it('format store is updated when locale changes', () => {
const fn = jest.fn();
const cancel = $format.subscribe(fn);
$locale.set('pt');
expect(fn).toHaveBeenCalledTimes(2);
cancel();
});
it('format store is updated when dictionary changes', () => {
const fn = jest.fn();
const cancel = $format.subscribe(fn);
$dictionary.set({});
expect(fn).toHaveBeenCalledTimes(2);
cancel();
});
});