import React from 'react'; import { Text } from 'react-native'; import { render, screen, waitFor } from '@testing-library/react-native'; import type { MessageResponse } from 'stream-chat'; import { TranslationContextValue, TranslationProvider, } from '../../contexts/translationContext/TranslationContext'; import { useTranslatedMessage } from '../useTranslatedMessage'; type TestComponentProps = { message: MessageResponse; }; const TestComponent = ({ message }: TestComponentProps) => { const translatedMessage = useTranslatedMessage(message); return {translatedMessage?.text}; }; describe('useTranslatedMessage', () => { it("doesn't translate a message if there isn't a translation available for the userLanguage", async () => { const message = { i18n: { nl_text: 'Hallo wereld!', }, text: 'Hello world!', } as MessageResponse; render( , ); await waitFor(() => { expect(screen.getByText('Hello world!')).toBeTruthy(); }); }); it('returns a new message with the text translated if userLanguage is set and the translation exists', async () => { const message = { i18n: { no_text: 'Hallo verden!', }, text: 'Hello world!', } as MessageResponse; render( , ); await waitFor(() => { expect(screen.getByText('Hallo verden!')).toBeTruthy(); }); }); it("returns the original text if the message doesn't contain any translations", async () => { const message = { text: 'Hello world!', } as MessageResponse; render(); await waitFor(() => { expect(screen.getByText('Hello world!')).toBeTruthy(); }); }); it('uses userLanguage from messageOverlayData if it is set', async () => { const message = { i18n: { nl_text: 'Hallo wereld!', no_text: 'Hallo verden!', }, text: 'Hello world!', } as MessageResponse; /** * The reason for the as unknown as MessageOverlayContextValue is that the provider * uses useResettableState, wrapping the input to fit in the data structure. * * In practice, the userLanguage will be set with the setData call and not directly * in the provider. * */ render( , ); await waitFor(() => { expect(screen.getByText('Hallo wereld!')).toBeTruthy(); }); }); });