import { describe, it, expect, vi, beforeEach } from 'vitest'; import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import { ToastProvider, useToast } from '@/components/ui/Toast'; import { I18nProvider, useI18n } from '@/lib/i18n'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Card } from '@/components/ui/Card'; // Test Button component describe('Button', () => { it('renders children', () => { render(); expect(screen.getByText('Click me')).toBeInTheDocument(); }); it('shows loading spinner', () => { render(); expect(screen.getByText('Submit')).toBeInTheDocument(); expect(screen.getByRole('button')).toBeDisabled(); }); it('handles click events', () => { const onClick = vi.fn(); render(); fireEvent.click(screen.getByText('Click')); expect(onClick).toHaveBeenCalledTimes(1); }); }); // Test Input component describe('Input', () => { it('renders label and input', () => { render(); expect(screen.getByText('Email')).toBeInTheDocument(); expect(screen.getByPlaceholderText('test@test.com')).toBeInTheDocument(); }); it('shows error message', () => { render(); expect(screen.getByText('Invalid email')).toBeInTheDocument(); }); }); // Test Card component describe('Card', () => { it('renders title and children', () => { render(

Card content

); expect(screen.getByText('Test Title')).toBeInTheDocument(); expect(screen.getByText('Card content')).toBeInTheDocument(); }); }); // Test Toast describe('Toast', () => { it('shows toast on action', async () => { function TestComponent() { const { showToast } = useToast(); return ( ); } render( ); fireEvent.click(screen.getByTestId('trigger')); await waitFor(() => { expect(screen.getByText('Test message')).toBeInTheDocument(); }); }); }); // Test i18n describe('i18n', () => { it('translates keys in German', () => { function TestComponent() { const { t } = useI18n(); return {t('login.title')}; } render( ); expect(screen.getByTestId('translated').textContent).toBe('Anmelden'); }); it('translates keys in English', () => { function TestComponent() { const { t } = useI18n(); return {t('login.title')}; } render( ); expect(screen.getByTestId('translated').textContent).toBe('Sign In'); }); it('switches locale live', () => { function TestComponent() { const { t, locale, setLocale } = useI18n(); return (
{t('login.submit')}
); } render( ); expect(screen.getByTestId('translated').textContent).toBe('Anmelden'); fireEvent.click(screen.getByTestId('switch')); expect(screen.getByTestId('translated').textContent).toBe('Sign In'); }); });