svelte-i18n/test/runtime/index.test.ts
Christian Kaisermann 7bf47d8790 feat: 🎸 add runtime typings
 Closes: Closes #43
2020-02-03 11:24:50 -03:00

74 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)
})
test('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' })
})
test('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' })
})
test('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' })
})
test('format store is updated when locale changes', () => {
const fn = jest.fn()
const cancel = $format.subscribe(fn)
$locale.set('pt')
expect(fn).toHaveBeenCalledTimes(2)
cancel()
})
test('format store is updated when dictionary changes', () => {
const fn = jest.fn()
const cancel = $format.subscribe(fn)
$dictionary.set({})
expect(fn).toHaveBeenCalledTimes(2)
cancel()
})
})