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