From d5bf67b7986c1fec9592d86737ce4930ca8551de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Litera?= Date: Fri, 12 Nov 2021 16:18:28 +0100 Subject: [PATCH] Test: Unit tests for i18n #CCM-25 --- package.json | 1 + src/__tests__/utils.test.js | 33 ++ .../__snapshots__/langConfig.test.js.snap | 457 ++++++++++++++++++ src/languages/__tests__/langConfig.test.js | 24 + src/languages/cs.js | 4 +- src/languages/ru.js | 4 +- src/languages/sk.js | 4 +- src/languages/uk.js | 4 +- src/utils.js | 4 +- 9 files changed, 525 insertions(+), 10 deletions(-) create mode 100644 src/__tests__/utils.test.js create mode 100644 src/languages/__tests__/__snapshots__/langConfig.test.js.snap create mode 100644 src/languages/__tests__/langConfig.test.js diff --git a/package.json b/package.json index 0fc29b8e..201a4657 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "esbuild": "^0.13.6", "husky": "^7.0.2", "jest": "^27.3.1", + "jest-each": "^27.3.1", "npm-run-all": "^4.1.5", "postcss": "^8.3.6", "postcss-cli": "^9.0.2", diff --git a/src/__tests__/utils.test.js b/src/__tests__/utils.test.js new file mode 100644 index 00000000..04a6cfe0 --- /dev/null +++ b/src/__tests__/utils.test.js @@ -0,0 +1,33 @@ +import { addSeparators, pluralize } from '../utils'; + +describe('utils', () => { + describe('addSeparators', () => { + it('should return one word without separators', () => { + expect(addSeparators(['test'])).toBe('test'); + }); + + it('should return two words separated with `and`', () => { + expect(addSeparators(['test1', 'test2'], 'and')).toBe('test1 and test2'); + }); + + it('should return three words separated with comma and `and`', () => { + expect(addSeparators(['test1', 'test2', 'test3'], 'and')).toBe('test1, test2 and test3'); + }); + + it('should return multiple words separated with comma and `and` as last separator', () => { + expect(addSeparators(['test1', 'test2', 'test3', 'test4', 'test5'], 'and')).toBe( + 'test1, test2, test3, test4 and test5', + ); + }); + }); + + describe('pluralize', () => { + it('should return singular', () => { + expect(pluralize(1, 'test', 'tests')).toBe('test'); + }); + + it('should return plural', () => { + expect(pluralize(2, 'test', 'tests')).toBe('tests'); + }); + }); +}); diff --git a/src/languages/__tests__/__snapshots__/langConfig.test.js.snap b/src/languages/__tests__/__snapshots__/langConfig.test.js.snap new file mode 100644 index 00000000..b178c09e --- /dev/null +++ b/src/languages/__tests__/__snapshots__/langConfig.test.js.snap @@ -0,0 +1,457 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`config cs should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "Kliknutím na „Přijmout vše“ dáváte souhlas společnostem test1, test2 a test3 k využívání souborů Cookies a dalších identifikátorů ve vašem zařízení. Použití těchto Cookies a dalších identifikátorů usnadní navigaci na stránkách, zobrazení personalizovaného obsahu, cílený marketing, analýzu využívání našich produktů a služeb. + Více informací naleznete na stránce Používání cookies.", + "primary_btn": Object { + "role": "accept_all", + "text": "Přijmout vše", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "Přijmout nezbytné", + }, + "title": "Tyto stránky využívají cookies", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; + +exports[`config de should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "Indem Sie auf „Alles akzeptieren“ klicken, stimmen Sie der Verwendung von Cookies und anderen Identifikatoren auf Ihrem Gerät durch test1, test2 und test3 zu. Die Verwendung dieser Cookies und anderer Identifikatoren erleichtert die Navigation auf der Website, die Anzeige personalisierter Inhalte, gezieltes Marketing und die Analyse der Nutzung unserer Produkte und Dienstleistungen. + Weitere Informationen finden Sie unter Verwendung von Cookies.", + "primary_btn": Object { + "role": "accept_all", + "text": "Alles akzeptieren", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "Das Notwendigste akzeptieren", + }, + "title": "Diese Website verwendet Cookies", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; + +exports[`config en should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "By clicking on \\"Accept all\\", you give your consent to test1, test2 and test3 to use cookies and other identifiers on your device. The use of these cookies and other identifiers will simplify navigation on the site, enable personalized content, targeted marketing, analysis of the usage of our products and services. + For more information read page Use of cookies.", + "primary_btn": Object { + "role": "accept_all", + "text": "Accept all", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "Accept necessary", + }, + "title": "This website uses cookies", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; + +exports[`config hu should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "A „Mindent elfogadok” gombra kattintva a hozzájárulását adja ahhoz, hogy az test1, test2 és test3 süti fájlokat és egyéb azonosítókat használjon az Ön eszközén. E süti fájlok és egyéb azonosítók használata megkönnyíti a weboldalon belüli navigációt, a személyre szabott tartalom megjelenítését, a célzott marketinget, valamint termékeink és szolgáltatásaink használatának elemzését. + Bővebb információkat a Sütihasználat oldalon talál.", + "primary_btn": Object { + "role": "accept_all", + "text": "Minden elfogadása", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "A legszükségesebbek elfogadása", + }, + "title": "Az oldalak süti fájlokat használnak", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; + +exports[`config pl should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "Klikając „Akceptuję wszystkie”, wyrażasz zgodę dla test1, test2 i test3 do wykorzystywania plików i innych identyfikatorów na Twoim urządzeniu. Korzystanie z tych plików cookie i innych identyfikatorów ułatwi nawigację w serwisie, wyświetlanie spersonalizowanych treści, marketing ukierunkowany, analizę korzystania z naszych produktów i usług. + Więcej informacji znajdziesz na stronie Korzystanie z plików Cookies.", + "primary_btn": Object { + "role": "accept_all", + "text": "Akceptuj wszystkie", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "Akceptuj niezbędne", + }, + "title": "Ta strona używa cookies", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; + +exports[`config ru should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "Нажав «Принять все», Вы даете свое согласие компаниям test1, test2 и test3 на использование файлов cookie и других идентификаторов на Вашем устройстве. Использование файлов cookie и других идентификаторов облегчит навигацию по сайту, отображения персонализированного контента, целевой маркетинг, анализ использования наших продуктов и услуг. + Для получения дополнительной информации см. раздел использование файлов cookie.", + "primary_btn": Object { + "role": "accept_all", + "text": "Принять все", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "Принятие необходимо", + }, + "title": "Этот сайт использует файлы cookie", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; + +exports[`config sk should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "Kliknutím na „Prijať všetky“ dávate súhlas spoločnostiam test1, test2 a test3 k využívaniu súborov Cookies a ďalších identifikátorov vo vašom zariadení. Použitie týchto cookies a ďalších identifikátorov uľahčí navigáciu na stránkach, zobrazenie personalizovaného obsahu, cielený marketing, analýzu využívania našich produktov a služieb. + Viac informácií nájdete na stránke Používanie cookies.", + "primary_btn": Object { + "role": "accept_all", + "text": "Prijať všetky", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "Prijať nevyhnutné", + }, + "title": "Tieto stránky používajú cookies", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; + +exports[`config uk should return localization object 1`] = ` +Object { + "consent_modal": Object { + "description": "Натиснувши «Прийняти все», Ви даєте свою згоду компаніям test1, test2 i test3 на використання файлів cookie та інших ідентифікаторів на Вашому пристрої. Використання цих файлів cookie та інших ідентифікаторів полегшить навігацію по сайту, відображення персоналізованого контенту, цільовий маркетинг, аналіз використання наших продуктів і послуг. + Для отримання додаткової інформації див. розділ Використання файлів cookie.", + "primary_btn": Object { + "role": "accept_all", + "text": "Прийняти все", + }, + "secondary_btn": Object { + "role": "accept_necessary", + "text": "Прийняття необхідно", + }, + "title": "Цей сайт використовує файли cookie", + }, + "settings_modal": Object { + "blocks": Array [ + Object { + "toggle": Object { + "enabled": true, + "readonly": true, + "value": "necessary", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "ad", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "analytics", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "functionality", + }, + }, + Object { + "toggle": Object { + "enabled": false, + "readonly": false, + "value": "personalization", + }, + }, + ], + }, +} +`; diff --git a/src/languages/__tests__/langConfig.test.js b/src/languages/__tests__/langConfig.test.js new file mode 100644 index 00000000..a463858c --- /dev/null +++ b/src/languages/__tests__/langConfig.test.js @@ -0,0 +1,24 @@ +import each from 'jest-each'; +import { config as configCs } from '../cs'; +import { config as configDe } from '../de'; +import { config as configEn } from '../en'; +import { config as configHu } from '../hu'; +import { config as configPl } from '../pl'; +import { config as configRu } from '../ru'; +import { config as configSk } from '../sk'; +import { config as configUk } from '../uk'; + +each([ + ['cs', configCs], + ['de', configDe], + ['en', configEn], + ['hu', configHu], + ['pl', configPl], + ['ru', configRu], + ['sk', configSk], + ['uk', configUk], +]).describe('config %s', (name, config) => { + it('should return localization object', () => { + expect(config({ companyNames: ['test1', 'test2', 'test3'] })).toMatchSnapshot(); + }); +}); diff --git a/src/languages/cs.js b/src/languages/cs.js index 36e96d4e..c2b95a4d 100644 --- a/src/languages/cs.js +++ b/src/languages/cs.js @@ -1,4 +1,4 @@ -import { addSeparators, plural } from '../utils'; +import { addSeparators, pluralize } from '../utils'; const extra = { and: 'a', @@ -17,7 +17,7 @@ export const config = (messages) => { return { consent_modal: { title: 'Tyto stránky využívají cookies', - description: `Kliknutím na „Přijmout vše“ dáváte souhlas ${plural( + description: `Kliknutím na „Přijmout vše“ dáváte souhlas ${pluralize( lang.companyNames.length, lang.company, lang.companies, diff --git a/src/languages/ru.js b/src/languages/ru.js index f72747e9..54604e0f 100644 --- a/src/languages/ru.js +++ b/src/languages/ru.js @@ -1,4 +1,4 @@ -import { addSeparators, plural } from '../utils'; +import { addSeparators, pluralize } from '../utils'; const extra = { and: 'и', @@ -17,7 +17,7 @@ export const config = (messages) => { return { consent_modal: { title: 'Этот сайт использует файлы cookie', - description: `Нажав «Принять все», Вы даете свое согласие ${plural( + description: `Нажав «Принять все», Вы даете свое согласие ${pluralize( lang.companyNames.length, lang.company, lang.companies, diff --git a/src/languages/sk.js b/src/languages/sk.js index 94c3cfce..cfd4261f 100644 --- a/src/languages/sk.js +++ b/src/languages/sk.js @@ -1,4 +1,4 @@ -import { addSeparators, plural } from '../utils'; +import { addSeparators, pluralize } from '../utils'; const extra = { and: 'a', @@ -17,7 +17,7 @@ export const config = (messages) => { return { consent_modal: { title: 'Tieto stránky používajú cookies', - description: `Kliknutím na „Prijať všetky“ dávate súhlas ${plural( + description: `Kliknutím na „Prijať všetky“ dávate súhlas ${pluralize( lang.companyNames.length, lang.company, lang.companies, diff --git a/src/languages/uk.js b/src/languages/uk.js index a045ce0b..f6999e8f 100644 --- a/src/languages/uk.js +++ b/src/languages/uk.js @@ -1,4 +1,4 @@ -import { addSeparators, plural } from '../utils'; +import { addSeparators, pluralize } from '../utils'; const extra = { and: 'i', @@ -17,7 +17,7 @@ export const config = (messages) => { return { consent_modal: { title: 'Цей сайт використовує файли cookie', - description: `Натиснувши «Прийняти все», Ви даєте свою згоду ${plural( + description: `Натиснувши «Прийняти все», Ви даєте свою згоду ${pluralize( lang.companyNames.length, lang.company, lang.companies, diff --git a/src/utils.js b/src/utils.js index 44a85346..35e8777c 100644 --- a/src/utils.js +++ b/src/utils.js @@ -5,10 +5,10 @@ export const addSeparators = (strings, and) => } if (i === strings.length - 1) { - return `${accumulator} ${and} ${string}`; + return `${accumulator} ${and} ${string}`; } return `${accumulator}, ${string}`; }); -export const plural = (count, singular, plural) => (count === 1 ? singular : plural); +export const pluralize = (count, singular, plural) => (count === 1 ? singular : plural);