test: 💍 add tests for format store

This commit is contained in:
Christian Kaisermann 2019-11-28 15:00:04 -03:00
parent efbe793a0f
commit 7dee09b668
6 changed files with 117 additions and 29 deletions

View File

@ -3,8 +3,8 @@ import {
getDateFormatter,
getTimeFormatter,
getMessageFormatter,
} from '../../src/client/includes/formatters'
import { init } from '../../src/client/configs'
} from '../../../src/client/includes/formatters'
import { init } from '../../../src/client/configs'
beforeEach(() => {
init({ fallbackLocale: undefined })
@ -27,7 +27,7 @@ describe('number formatter', () => {
test('should format a number with a custom format', () => {
init({
fallbackLocale: 'en',
formats: require('../fixtures/formats.json'),
formats: require('../../fixtures/formats.json'),
})
expect(getNumberFormatter({ format: 'brl' }).format(number)).toBe(
@ -59,7 +59,7 @@ describe('date formatter', () => {
test('should throw if passed a non-existing format', () => {
init({
fallbackLocale: 'en',
formats: require('../fixtures/formats.json'),
formats: require('../../fixtures/formats.json'),
})
expect(() =>
@ -70,7 +70,7 @@ describe('date formatter', () => {
test('should format a date with a custom format', () => {
init({
fallbackLocale: 'en',
formats: require('../fixtures/formats.json'),
formats: require('../../fixtures/formats.json'),
})
expect(getDateFormatter({ format: 'customDate' }).format(date)).toBe(
@ -102,7 +102,7 @@ describe('time formatter', () => {
test('should format a time with a custom format', () => {
init({
fallbackLocale: 'en',
formats: require('../fixtures/formats.json'),
formats: require('../../fixtures/formats.json'),
})
expect(getTimeFormatter({ format: 'customTime' }).format(time)).toBe(
@ -113,7 +113,7 @@ describe('time formatter', () => {
test('should throw if passed a non-existing format', () => {
init({
fallbackLocale: 'en',
formats: require('../fixtures/formats.json'),
formats: require('../../fixtures/formats.json'),
})
expect(() =>

View File

@ -0,0 +1,6 @@
import { defineMessages } from '../../src/client'
test('defineMessages returns the identity of its first argument', () => {
const obj = {}
expect(obj).toBe(defineMessages(obj))
})

View File

@ -0,0 +1,92 @@
import { Formatter } from '../../../src/client/types/index'
import { $format } from '../../../src/client/stores/format'
import { init } from '../../../src/client/configs'
import { addMessages } from '../../../src/client/stores/dictionary'
import { $locale } from '../../../src/client/stores/locale'
let format: Formatter
$format.subscribe(f => (format = f))
addMessages('en', require('../../fixtures/en.json'))
addMessages('en-GB', require('../../fixtures/en-GB.json'))
addMessages('pt', require('../../fixtures/pt.json'))
addMessages('pt-BR', require('../../fixtures/pt-BR.json'))
addMessages('pt-PT', require('../../fixtures/pt-PT.json'))
beforeEach(() => {
init({ fallbackLocale: 'en' })
})
test('formats a message by its id and the current locale', () => {
expect(format({ id: 'form.field_1_name' })).toBe('Name')
})
test('formats a message by its id and the a passed locale', () => {
expect(format({ id: 'form.field_1_name', locale: 'pt' })).toBe('Nome')
})
test('formats a message with interpolated values', () => {
expect(format({ id: 'photos', values: { n: 0 } })).toBe('You have no photos.')
expect(format({ id: 'photos', values: { n: 1 } })).toBe('You have one photo.')
expect(format({ id: 'photos', values: { n: 21 } })).toBe(
'You have 21 photos.'
)
})
test('accepts a message id as first argument', () => {
expect(format('form.field_1_name')).toBe('Name')
})
test('accepts a message id as first argument and formatting options as second', () => {
expect(format('form.field_1_name', { locale: 'pt' })).toBe('Nome')
})
test('throws if no locale is set', () => {
$locale.set(null)
expect(() => format('form.field_1_name')).toThrow(
'[svelte-i18n] Cannot format a message without first setting the initial locale.'
)
})
test('uses a missing message default value', () => {
expect(format('missing', { default: 'Missing Default' })).toBe(
'Missing Default'
)
})
test('warn on missing messages', () => {
const warn = global.console.warn
global.console.warn = jest.fn()
format('missing')
expect(console.warn).toBeCalledWith(
`[svelte-i18n] The message "missing" was not found in "en".`
)
global.console.warn = warn
})
describe('format utilities', () => {
test('time', () => {
expect(format.time(new Date(2019, 0, 1, 20, 37))).toBe('8:37 PM')
})
test('date', () => {
expect(format.date(new Date(2019, 0, 1, 20, 37))).toBe('1/1/19')
})
test('number', () => {
expect(format.number(123123123)).toBe('123,123,123')
})
test('capital', () => {
expect(format.capital('title')).toBe('Page title')
})
test('title', () => {
expect(format.title('title')).toBe('Page Title')
})
test('upper', () => {
expect(format.upper('title')).toBe('PAGE TITLE')
})
test('lower', () => {
expect(format.lower('title')).toBe('page title')
})
})

13
test/fixtures/en.json vendored
View File

@ -1,14 +1,9 @@
{
"hi": "hi yo",
"switch.lang": "Switch language",
"page": {
"title_home": "Home"
},
"greeting": {
"ask": "Please type your name",
"message": "Hello {name}, how are you?"
"form": {
"field_1_name": "Name",
"field_2_name": "Lastname"
},
"photos": "You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}",
"cats": "I have {n, number} {n,plural,one{cat}other{cats}}",
"title": "Page title",
"sneakers": "sneakers"
}

11
test/fixtures/es.json vendored
View File

@ -1,11 +1,8 @@
{
"hi": "hola yo",
"switch.lang": "Cambiar de idioma",
"greeting": {
"ask": "Por favor escriba su nombre",
"message": "Hola {name}, cómo estás?"
"form": {
"field_1_name": "Nombre",
"field_2_name": "Apellido"
},
"photos": "Tienes {n, plural, =0 {0 fotos.} =1 {una foto.} other {# fotos.}}",
"cats": "Yo tengo {n, number} {n,plural,one{gato}other{gatos}}",
"title": "Título de la página",
"sneakers": "zapatillas"
}

10
test/fixtures/pt.json vendored
View File

@ -1,11 +1,9 @@
{
"hi": "olá você",
"switch.lang": "Trocar idioma",
"greeting": {
"ask": "Por favor, digite seu nome",
"message": "Olá {name}, como vai?"
"form": {
"field_1_name": "Nome",
"field_2_name": "Sobrenome"
},
"photos": "Você {n, plural, =0 {não tem fotos.} =1 {tem uma foto.} other {tem # fotos.}}",
"cats": "Tenho {n, number} {n,plural,=0{gatos}one{gato}other{gatos}}",
"title": "Título da página",
"sneakers": "tênis"
}