// Unmock react-i18next for this test file since we're testing actual i18n functionality jest.unmock('react-i18next'); import i18n from './i18n'; import English from './en/translation.json'; import French from './fr/translation.json'; import Spanish from './es/translation.json'; describe('i18next translation tests', () => { // Ensure i18next is initialized before any tests run beforeAll(async () => { if (!i18n.isInitialized) { await i18n.init(); } }); it('should return the correct translation for a valid key in English', () => { i18n.changeLanguage('en'); expect(i18n.t('com_ui_cancel')).toBe(English.com_ui_cancel); }); it('should return the correct translation for a valid key in French', () => { i18n.changeLanguage('fr'); expect(i18n.t('com_ui_cancel')).toBe(French.com_ui_cancel); }); it('should return the correct translation for a valid key in Spanish', () => { i18n.changeLanguage('es'); expect(i18n.t('com_ui_cancel')).toBe(Spanish.com_ui_cancel); }); it('should fallback to English for an invalid language code', () => { // When an invalid language is provided, i18next should fallback to English i18n.changeLanguage('invalid-code'); expect(i18n.t('com_ui_cancel')).toBe(English.com_ui_cancel); }); it('should return the key itself for an invalid key', () => { i18n.changeLanguage('en'); expect(i18n.t('invalid-key')).toBe('invalid-key'); // Returns the key itself }); it('should correctly format placeholders in the translation', () => { i18n.changeLanguage('en'); // The translation uses {count} syntax (not standard i18next {{count}}) // Verify i18next returns the template string with the placeholder expect(i18n.t('com_ui_selected_count', { count: 5 })).toBe('{count} selected'); }); });