import React, { act } from 'react';
import '@testing-library/jest-dom';
import {
DevTools,
Tolgee,
TolgeeInstance,
TolgeeProvider,
useTranslate,
} from '..';
import { render, screen, waitFor } from '@testing-library/react';
import { mockCoreFetchAsync } from '@tolgee/testing/fetchMock';
const API_URL = 'http://localhost';
const API_KEY = 'dummyApiKey';
describe('TolgeeProvider integration', () => {
const TestComponent = () => {
const { t } = useTranslate();
return (
<>
{t('hello_world')}
{t('english_fallback', 'Default value')}
{t('non_existant', 'Default value')}
>
);
};
describe('regular settings', () => {
let resolveEnglish: any;
let resolveCzech: any;
let tolgee: TolgeeInstance;
beforeEach(async () => {
const fetchMock = mockCoreFetchAsync();
resolveCzech = fetchMock.csTranslations.resolve;
resolveEnglish = fetchMock.enTranslations.resolve;
fetchMock.fetch.enableMocks();
tolgee = Tolgee().use(DevTools()).init({
apiUrl: API_URL,
apiKey: API_KEY,
language: 'cs',
fallbackLanguage: 'en',
});
act(() => {
render(
);
});
});
afterEach(() => {
tolgee.stop();
});
it('shows correctly loading, fallback and default value', async () => {
expect(screen.queryByText('Loading...')).toBeInTheDocument();
act(() => {
resolveCzech();
});
await waitFor(() => {
expect(screen.queryByText('Loading...')).toBeInTheDocument();
});
act(() => {
resolveEnglish();
});
await waitFor(() => {
expect(screen.queryByTestId('hello_world')).toContainHTML(
'Ahoj světe!'
);
expect(screen.queryByTestId('english_fallback')).toContainHTML(
'English fallback'
);
expect(screen.queryByTestId('non_existant')).toContainHTML(
'Default value'
);
});
});
});
describe('with fallback', () => {
let resolveEnglish: any;
let resolveCzech: any;
let tolgee: TolgeeInstance;
beforeEach(async () => {
const fetchMock = mockCoreFetchAsync();
resolveCzech = fetchMock.csTranslations.resolve;
resolveEnglish = fetchMock.enTranslations.resolve;
fetchMock.fetch.enableMocks();
tolgee = Tolgee().use(DevTools()).init({
apiUrl: API_URL,
apiKey: API_KEY,
language: 'cs',
fallbackLanguage: 'en',
});
act(() => {
render(
);
});
});
it('shows correctly loading, fallback and default value', async () => {
expect(screen.queryByText('Loading...')).toBeInTheDocument();
act(() => {
resolveCzech();
});
await waitFor(() => {
expect(screen.queryByText('Loading...')).toBeInTheDocument();
expect(screen.queryByTestId('hello_world')).not.toBeInTheDocument();
});
act(() => {
resolveEnglish();
});
await waitFor(() => {
expect(screen.queryByTestId('hello_world')).toContainHTML(
'Ahoj světe!'
);
expect(screen.queryByTestId('english_fallback')).toContainHTML(
'English fallback'
);
expect(screen.queryByTestId('non_existant')).toContainHTML(
'Default value'
);
});
});
});
});