test: 💍 add tests for getClientLocale precedence

This commit is contained in:
Christian Kaisermann 2019-11-26 13:18:07 -03:00
parent e56bfbd333
commit 21afa3d6b1
2 changed files with 74 additions and 6 deletions

View File

@ -27,7 +27,9 @@ const getFromQueryString = (queryString: string, key: string) => {
const getFirstMatch = (base: string, pattern: RegExp) => {
const match = pattern.exec(base)
// istanbul ignore if
if (!match) return null
// istanbul ignore else
return match[1] || null
}

View File

@ -19,30 +19,96 @@ describe('getting client locale', () => {
test('gets the locale based on the passed hash parameter', () => {
window.location.hash = '#locale=en-US&lang=pt-BR'
expect(getClientLocale({ hash: 'lang' })).toBe('pt-BR')
expect(
getClientLocale({
hash: 'lang',
})
).toBe('pt-BR')
})
test('gets the locale based on the passed search parameter', () => {
window.location.search = '?locale=en-US&lang=pt-BR'
expect(getClientLocale({ search: 'lang' })).toBe('pt-BR')
expect(
getClientLocale({
search: 'lang',
})
).toBe('pt-BR')
})
test('gets the locale based on the navigator language', () => {
expect(getClientLocale({ navigator: true })).toBe(window.navigator.language)
expect(
getClientLocale({
navigator: true,
})
).toBe(window.navigator.language)
})
test('gets the locale based on the pathname', () => {
window.location.pathname = '/en-US/foo/'
expect(getClientLocale({ pathname: /^\/(.*?)\// })).toBe('en-US')
expect(
getClientLocale({
pathname: /^\/(.*?)\//,
})
).toBe('en-US')
})
test('gets the locale base on the hostname', () => {
window.location.hostname = 'pt.example.com'
expect(getClientLocale({ hostname: /^(.*?)\./ })).toBe('pt')
expect(
getClientLocale({
hostname: /^(.*?)\./,
})
).toBe('pt')
})
test('hostname precedes pathname', () => {
window.location.pathname = '/en-US/foo/'
window.location.hostname = 'pt.example.com'
expect(
getClientLocale({
hostname: /^(.*?)\./,
pathname: /^\/(.*?)\//,
})
).toBe('pt')
})
test('pathname precedes navigator', () => {
window.location.pathname = '/it-IT/foo/'
expect(
getClientLocale({
pathname: /^\/(.*?)\//,
navigator: true,
})
).toBe('it-IT')
})
test('navigator precedes search', () => {
window.location.search = '?lang=pt-BR'
expect(
getClientLocale({
navigator: true,
search: 'lang',
})
).toBe('en-US')
})
test('search precedes hash', () => {
window.location.hash = '#lang=pt-BR'
window.location.search = '?lang=it-IT'
expect(
getClientLocale({
hash: 'lang',
search: 'lang',
})
).toBe('it-IT')
})
test('returns null if no locale was found', () => {
expect(getClientLocale({ search: 'lang' })).toBe(null)
expect(
getClientLocale({
search: 'lang',
})
).toBe(null)
})
})