import React from 'react';
import {useTranslate} from '../translate';
import {mount} from './mount';
describe('useTranslate', () => {
it('returns string translation', async () => {
const simpleTranslation = 'This is a simple string translation';
const translateInSandbox = jest.fn(() => simpleTranslation);
const extensionApi = {
i18n: {
translate: translateInSandbox,
},
};
const {value} = mount.hook(() => useTranslate(), {extensionApi});
const translate = value;
expect(translate('exampleKey')).toStrictEqual(simpleTranslation);
});
it('returns array with strings, numbers, and components', async () => {
function Name() {
return
Fred
;
}
const simpleTranslation = [
'Hello, ',
// eslint-disable-next-line react/jsx-key
,
' . You are applicant #',
1,
];
const translateInSandbox = jest.fn(() => simpleTranslation);
const extensionApi = {
i18n: {
translate: translateInSandbox,
},
};
const {value} = mount.hook(() => useTranslate(), {extensionApi});
const translate = value;
// Expect that a the same array is returned, with any valid components wrapped in a React.Fragment
expect(translate('exampleKey')).toMatchObject([
'Hello, ',
expect.objectContaining({type: Name}),
' . You are applicant #',
1,
]);
});
it('returns array with an element that is not a string, number, or component', async () => {
const simpleTranslation = ['Hello, ', undefined, ' .'];
const translateInSandbox = jest.fn(() => simpleTranslation);
const extensionApi = {
i18n: {
translate: translateInSandbox,
},
};
const {value} = mount.hook(() => useTranslate(), {extensionApi});
const translate = value;
expect(translate('exampleKey')).toStrictEqual(simpleTranslation);
});
});