import { mockStaticDataAsync } from '@tolgee/testing/mockStaticData';
import React, { act } from 'react';
import '@testing-library/jest-dom';
import { DevTools, useTranslate } from '..';
import { render, screen, waitFor } from '@testing-library/react';
import { Tolgee, TolgeeInstance } from '@tolgee/web';
import { FormatIcu } from '@tolgee/format-icu';
import { GlobalContextPlugin } from '../GlobalContextPlugin';
jest.autoMockOff();
const API_URL = 'http://localhost';
describe('useTranslations namespaces', () => {
let tolgee: TolgeeInstance;
const TestComponent = () => {
const { t, isLoading } = useTranslate('test');
return (
<>
{isLoading &&
Loading...
}
{t('test')}
{t('test_english_fallback')}
{t('non_existant', 'Non existant')}
{t('fallback', { ns: 'invalid' })}
>
);
};
let staticDataMock: ReturnType;
beforeEach(async () => {
staticDataMock = mockStaticDataAsync();
tolgee = Tolgee()
.use(GlobalContextPlugin())
.use(DevTools())
.use(FormatIcu())
.init({
apiUrl: API_URL,
language: 'cs',
fallbackLanguage: 'en',
fallbackNs: 'fallback',
staticData: staticDataMock.promises,
});
await act(async () => {
const runPromise = tolgee.run();
staticDataMock.resolvePending();
await runPromise;
render();
});
});
afterEach(() => {
tolgee.stop();
});
it('loads namespace after render', async () => {
expect(screen.queryByTestId('loading')).toContainHTML('Loading...');
staticDataMock.resolvePending();
await waitFor(() => {
expect(screen.queryByTestId('loading')).toBeFalsy();
expect(screen.queryByTestId('test')).toContainHTML('Český test');
expect(screen.queryByTestId('test')).toHaveAttribute('_tolgee');
});
});
it('works with english fallback', async () => {
staticDataMock.resolvePending();
await waitFor(() => {
expect(screen.queryByTestId('test_english_fallback')).toContainHTML(
'Test english fallback'
);
expect(screen.queryByTestId('test_english_fallback')).toHaveAttribute(
'_tolgee'
);
});
});
it('works with ns fallback', async () => {
expect(screen.queryByTestId('ns_fallback')).toContainHTML('fallback');
staticDataMock.resolvePending();
await waitFor(() => {
expect(screen.queryByTestId('ns_fallback')).toContainHTML('Fallback');
expect(screen.queryByTestId('ns_fallback')).toHaveAttribute('_tolgee');
});
});
it('works with language and ns fallback', async () => {
expect(screen.queryByTestId('ns_fallback')).toContainHTML(
'Fallback fallback'
);
await act(async () => {
const changePromise = tolgee.changeLanguage('en');
staticDataMock.resolvePending();
await changePromise;
});
expect(screen.queryByTestId('ns_fallback')).toContainHTML(
'Fallback fallback'
);
});
it('works with default value', async () => {
staticDataMock.resolvePending();
await waitFor(() => {
expect(screen.queryByTestId('non_existant')).toContainHTML(
'Non existant'
);
expect(screen.queryByTestId('non_existant')).toHaveAttribute('_tolgee');
});
});
});