Ctrl K
ComunidadGuías…

components/LocaleSwitcher.test.tsx

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { describe, it, expect, vi } from 'vitest';
import LocaleSwitcher from './LocaleSwitcher';
import { changeLocale } from '@/lib/locale';
import { locales } from '@/i18n/config';

vi.mock('@/lib/locale', () => ({
  changeLocale: vi.fn(),
}));

describe('LocaleSwitcher', () => {
  it('lists every configured locale with the current one checked', async () => {
    const user = userEvent.setup();
    render(<LocaleSwitcher />);

    await user.click(screen.getByRole('button', { name: 'Switch language' }));

    const items = await screen.findAllByRole('menuitemradio');
    expect(items).toHaveLength(locales.length);
    expect(screen.getByRole('menuitemradio', { name: 'English' })).toBeChecked();
    expect(screen.getByRole('menuitemradio', { name: 'Spanish' })).not.toBeChecked();
  });

  it('calls changeLocale with the selected and current locale and disables the trigger', async () => {
    vi.mocked(changeLocale).mockReturnValue(new Promise(() => {}));
    const user = userEvent.setup();
    render(<LocaleSwitcher />);

    await user.click(screen.getByRole('button', { name: 'Switch language' }));
    await user.click(await screen.findByRole('menuitemradio', { name: 'Spanish' }));

    expect(changeLocale).toHaveBeenCalledWith('es', 'en');
    expect(screen.getByRole('button', { name: 'Switch language' })).toBeDisabled();
  });
});