UNPKG

@prezly/theme-kit-core

Version:

Data layer and utility library for developing Prezly themes with JavaScript

196 lines 7.04 kB
import { Locale } from '@prezly/theme-kit-intl'; import { getAlternateLanguageLinks } from "./getAlternateLanguageLinks.mjs"; function lang(code) { var isDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return { code, is_default: isDefault }; } function getTranslationUrl(locale) { var { isoCode } = Locale.from(locale); return "translationUrl/".concat(isoCode); } function generateTranslationUrl(locale) { var translationUrl = getTranslationUrl(locale); var { lang: langCode } = Locale.from(locale); return "http://localhost:3000/".concat(langCode, "/").concat(translationUrl); } describe('getAlternateLanguageLinks', () => { it('should handle one en-GB non-default language', () => { var links = getAlternateLanguageLinks([lang('en_GB')], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en-GB' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'x-default' }]); }); it('should handle one en-GB default language', () => { var links = getAlternateLanguageLinks([lang('en_GB', true)], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en-GB' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'x-default' }]); }); it('should handle two full locales', () => { var links = getAlternateLanguageLinks([lang('en_GB', true), lang('fr_FR')], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en-GB' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr-FR' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'x-default' }]); }); it('should use en-GB locale as x-default even if other locale is set as default', () => { var links = getAlternateLanguageLinks([lang('en_GB'), lang('fr_FR', true)], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en-GB' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr-FR' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'x-default' }]); }); it('should use default locale as x-default when there is eng locale', () => { var links = getAlternateLanguageLinks([lang('ru_RU'), lang('fr_FR', true)], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr-FR' }, { href: 'http://localhost:3000/ru/translationUrl/ru-RU', hrefLang: 'ru' }, { href: 'http://localhost:3000/ru/translationUrl/ru-RU', hrefLang: 'ru-RU' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'x-default' }]); }); it('should include provided region independent locale', () => { var links = getAlternateLanguageLinks([lang('en_US'), lang('fr'), lang('fr_FR', true)], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'en-US' }, { href: 'http://localhost:3000/fr/translationUrl/fr', hrefLang: 'fr' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr-FR' }, { href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'x-default' }]); }); it('should use provided en region independent locale as x-default', () => { var links = getAlternateLanguageLinks([lang('en'), lang('en_US'), lang('fr'), lang('fr_FR')], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'en-US' }, { href: 'http://localhost:3000/fr/translationUrl/fr', hrefLang: 'fr' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr-FR' }, { href: 'http://localhost:3000/en/translationUrl/en', hrefLang: 'x-default' }]); }); it('should fallback en link to en-US locale when there is en-GB locale', () => { var links = getAlternateLanguageLinks([lang('en_GB'), lang('en_US')], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en-GB' }, { href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'en-US' }, { href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'x-default' }]); }); it('should should omit locales if getTranslationUrl is undefined', () => { var links = getAlternateLanguageLinks([lang('en_US'), lang('fr'), lang('fr_FR', true)], locale => { var translationUrl = Locale.isEqual(locale, 'en-US') ? undefined : getTranslationUrl(locale); if (translationUrl) { return generateTranslationUrl(locale); } return undefined; }); expect(links).toMatchObject([{ href: 'http://localhost:3000/fr/translationUrl/fr', hrefLang: 'fr' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'fr-FR' }, { href: 'http://localhost:3000/fr/translationUrl/fr-FR', hrefLang: 'x-default' }]); }); it('should should not duplicate links when equal languages passed', () => { var links = getAlternateLanguageLinks([lang('en_GB'), lang('en_GB'), lang('en_US'), lang('en_US')], generateTranslationUrl); expect(links).toMatchObject([{ href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'en' }, { href: 'http://localhost:3000/en/translationUrl/en-GB', hrefLang: 'en-GB' }, { href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'en-US' }, { href: 'http://localhost:3000/en/translationUrl/en-US', hrefLang: 'x-default' }]); }); });