import { describe, it, expect, beforeEach, vi } from 'vitest'; import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import { QueryClientProvider } from '@tanstack/react-query'; import { MemoryRouter } from 'react-router'; import { makeClient } from '../test/utils'; import { useAuthStore } from '../stores/authStore'; import SelectContextPage from './SelectContextPage'; vi.mock('react-router', async () => { const actual = await vi.importActual('react-router'); return { ...actual, useNavigate: () => vi.fn() }; }); const initial = useAuthStore.getInitialState(); const CONTEXTS = [ { db_uuid: 'doc-1', db_key: 'k1', type: 'doctor', role: 'doctor', name: 'مطب شخصی' }, { db_uuid: 'clinic-1', db_key: 'k2', type: 'clinic', role: 'clinic', name: 'کلینیک تست' }, ]; beforeEach(() => { localStorage.clear(); useAuthStore.setState(initial, true); useAuthStore.setState({ availableContexts: CONTEXTS as any, switchContext: vi.fn() as any }); }); describe('SelectContextPage', () => { /** * هر پاسخِ cache شده متعلق به محیط قبلی است. اشتراک روی محیط می‌نشیند، پس بدون * پاک کردن cache، مطب شخصی پلن کلینیک را نشان می‌داد و برعکس. */ it('بعد از تعویض محیط، cache کوئری‌ها را پاک می‌کند', async () => { const client = makeClient(); client.setQueryData(['subscription-my', 'doc-1'], { stale: true }); render(, { wrapper: ({ children }) => ( {children} ), }); fireEvent.click(screen.getByText('کلینیک تست')); await waitFor(() => expect(client.getQueryData(['subscription-my', 'doc-1'])).toBeUndefined()); }); });