import { TolgeeCore, JioTranslateInstance } from '@jiotranslate/core-beta'; import { screen, waitFor } from '@testing-library/dom'; import { TOLGEE_ATTRIBUTE_NAME, TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE, } from '../constants'; import { ObserverPlugin } from '../ObserverPlugin'; export const testObserver = (observerType: 'invisible' | 'text') => { describe('observer', () => { let tolgee: JioTranslateInstance; beforeEach(() => { tolgee = TolgeeCore() .use(ObserverPlugin()) .init({ language: 'en', staticData: { en: { hello: 'world' } }, observerType, }); }); afterEach(() => { tolgee.stop(); }); it('runs observer', async () => { tolgee.run(); document.body.innerHTML = ` ${tolgee.t({ key: 'hello' })} `; await waitFor(() => { expect(screen.queryByTestId('translation')?.textContent).toEqual( 'world' ); }); }); it('runs observer', async () => { tolgee.run(); document.body.innerHTML = ` ${tolgee.t({ key: 'hello' })} `; await waitFor(() => { expect(screen.queryByTestId('translation')?.textContent).toEqual( 'world' ); }); }); it('ignoring works', async () => { tolgee.run(); document.body.innerHTML = ` ${tolgee.t({ key: 'hello' })} ${tolgee.t({ key: 'hello', })} ${tolgee.t({ key: 'hello' })} `; await waitFor(() => { expect( screen .queryByTestId('translation') ?.getAttribute(TOLGEE_ATTRIBUTE_NAME) ).not.toBeFalsy(); expect( screen .queryByTestId('ignoredTranslation') ?.getAttribute(TOLGEE_ATTRIBUTE_NAME) ).toBeFalsy(); expect( screen .queryByTestId('ignoredInside') ?.getAttribute(TOLGEE_ATTRIBUTE_NAME) ).toBeFalsy(); }); }); it('key only attribute', async () => { tolgee.run(); document.body.innerHTML = ` Hello `; await waitFor(() => { expect( screen .queryByTestId('translation') ?.getAttribute(TOLGEE_ATTRIBUTE_NAME) ).not.toBeFalsy(); }); screen .queryByTestId('translation')! .removeAttribute(TOLGEE_WRAPPED_ONLY_DATA_ATTRIBUTE); await waitFor(() => { expect( screen .queryByTestId('translation') ?.getAttribute(TOLGEE_ATTRIBUTE_NAME) ).toBeFalsy(); }); }); }); };