import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { describe, expect, it, vi } from 'vitest'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; vi.mock('@/lib/analytics-api', () => ({ analyticsApi: { getProjectAiAdvice: vi.fn().mockReturnValue(new Promise(() => {})) }, })); vi.mock('@/lib/api-client', () => ({ ApiError: class extends Error { status = 500; }, })); vi.mock('@/lib/auth-store', () => ({ useAuthStore: (selector: (s: { user: null }) => unknown) => selector({ user: null }), })); import { ProjectAiAdviceCard } from '../project-ai-advice-card'; function wrapper({ children }: { children: React.ReactNode }) { const qc = new QueryClient({ defaultOptions: { queries: { retry: false } } }); return {children}; } describe('ProjectAiAdviceCard', () => { it('renders trigger button initially', () => { render(, { wrapper }); expect(screen.getByText('Xem phân tích AI về dự án')).toBeInTheDocument(); }); it('shows loading state when clicked', async () => { const user = userEvent.setup(); render(, { wrapper }); await user.click(screen.getByText('Xem phân tích AI về dự án')); expect(screen.getByText(/AI đang phân tích/)).toBeInTheDocument(); }); });