diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 14:18:50 +0300 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /spec/frontend/vue_shared/translate_spec.js | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'spec/frontend/vue_shared/translate_spec.js')
-rw-r--r-- | spec/frontend/vue_shared/translate_spec.js | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/spec/frontend/vue_shared/translate_spec.js b/spec/frontend/vue_shared/translate_spec.js new file mode 100644 index 00000000000..42aa28a6309 --- /dev/null +++ b/spec/frontend/vue_shared/translate_spec.js @@ -0,0 +1,214 @@ +import { mount, createLocalVue } from '@vue/test-utils'; +import locale from '~/locale'; +import Translate from '~/vue_shared/translate'; + +const localVue = createLocalVue(); +localVue.use(Translate); + +describe('Vue translate filter', () => { + const createTranslationMock = (key, ...translations) => { + locale.textdomain('app'); + + locale.options.locale_data = { + app: { + '': { + domain: 'app', + lang: 'vo', + plural_forms: 'nplurals=2; plural=(n != 1);', + }, + [key]: translations, + }, + }; + }; + + it('translate singular text (`__`)', () => { + const key = 'singular'; + const translation = 'singular_translated'; + createTranslationMock(key, translation); + + const wrapper = mount( + { + template: ` + <span> + {{ __('${key}') }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe(translation); + }); + + it('translate plural text (`n__`) without any substituting text', () => { + const key = 'plural'; + const translationPlural = 'plural_multiple translation'; + createTranslationMock(key, 'plural_singular translation', translationPlural); + + const wrapper = mount( + { + template: ` + <span> + {{ n__('${key}', 'plurals', 2) }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe(translationPlural); + }); + + describe('translate plural text (`n__`) with substituting %d', () => { + const key = '%d day'; + + beforeEach(() => { + createTranslationMock(key, '%d singular translated', '%d plural translated'); + }); + + it('and n === 1', () => { + const wrapper = mount( + { + template: ` + <span> + {{ n__('${key}', '%d days', 1) }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe('1 singular translated'); + }); + + it('and n > 1', () => { + const wrapper = mount( + { + template: ` + <span> + {{ n__('${key}', '%d days', 2) }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe('2 plural translated'); + }); + }); + + describe('translates text with context `s__`', () => { + const key = 'Context|Foobar'; + const translation = 'Context|Foobar translated'; + const expectation = 'Foobar translated'; + + beforeEach(() => { + createTranslationMock(key, translation); + }); + + it('and using two parameters', () => { + const wrapper = mount( + { + template: ` + <span> + {{ s__('Context', 'Foobar') }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe(expectation); + }); + + it('and using the pipe syntax', () => { + const wrapper = mount( + { + template: ` + <span> + {{ s__('${key}') }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe(expectation); + }); + }); + + it('translate multi line text', () => { + const translation = 'multiline string translated'; + createTranslationMock('multiline string', translation); + + const wrapper = mount( + { + template: ` + <span> + {{ __(\` + multiline + string + \`) }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe(translation); + }); + + it('translate pluralized multi line text', () => { + const translation = 'multiline string plural'; + + createTranslationMock('multiline string', 'multiline string singular', translation); + + const wrapper = mount( + { + template: ` + <span> + {{ n__( + \` + multiline + string + \`, + \` + multiline + strings + \`, + 2 + ) }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe(translation); + }); + + it('translate pluralized multi line text with context', () => { + const translation = 'multiline string with context'; + + createTranslationMock('Context| multiline string', translation); + + const wrapper = mount( + { + template: ` + <span> + {{ s__( + \` + Context| + multiline + string + \` + ) }} + </span> + `, + }, + { localVue }, + ); + + expect(wrapper.text()).toBe(translation); + }); +}); |