import { cleanup, fireEvent, render, screen, within } from '@testing-library/react' import { afterEach, describe, expect, it } from 'vitest' import { I18nProvider } from '@/i18n/context' import { TR_SURFACES } from '@/i18n/tr-surfaces' import { decodeShareCode, shareCodeErrorText } from './share-code' import { ShareControls } from './share-controls' describe('ShareControls', () => { afterEach(() => { cleanup() }) it.each([ ['en', 'Import / export map'], ['tr', 'Haritayı içe / dışa aktar'] ])('opens its dialog with a tooltip in %s', async (locale, title) => { render() const trigger = screen.getByRole('button', { name: title }) fireEvent.pointerMove(trigger, { pointerType: 'mouse' }) expect((await screen.findByRole('tooltip')).textContent).toContain(title) fireEvent.click(trigger) const dialog = await screen.findByRole('dialog') expect(within(dialog).getByRole('heading', { name: title })).toBeTruthy() }) it('keeps an invalid pasted code editable and displays the Turkish decoder error', async () => { render( { try { decodeShareCode(code); return null } catch (error) { return shareCodeErrorText(error, TR_SURFACES.mapErrors) } }} />) fireEvent.click(screen.getByRole('button', { name: 'Haritayı içe / dışa aktar' })) const dialog = await screen.findByRole('dialog') const input = within(dialog).getByRole('textbox') fireEvent.change(input, { target: { value: 'not a valid code !!!' } }) fireEvent.click(within(dialog).getByRole('button', { name: 'Yükle', exact: true })) expect(within(dialog).getByText('Bu metin bir harita koduna benzemiyor.')).toBeTruthy() expect((input as HTMLTextAreaElement).value).toBe('not a valid code !!!') }) })