import { describe, it, expect, beforeEach, vi } from 'vitest'; import { screen, waitFor } from '@testing-library/react'; import { renderWithProviders } from '../test/utils'; vi.mock('../lib/api', () => ({ api: { get: vi.fn(), post: vi.fn(), patch: vi.fn(), put: vi.fn(), delete: vi.fn() }, ApiError: class extends Error {}, })); import { api } from '../lib/api'; import { useServiceCategories } from './useServiceCategories'; const get = api.get as ReturnType; function Probe() { const { categories } = useServiceCategories(); return
{categories.map((c) => c.label).join('|')}
; } beforeEach(() => get.mockReset()); describe('useServiceCategories', () => { /** کنترلر با success(['data' => …]) پاسخ می‌دهد، پس آرایه یک لایه تودرتوست. */ it('آرایه را از پاسخ تودرتوی کنترلر بیرون می‌کشد', async () => { get.mockResolvedValue({ success: true, data: { data: [ { key: 'outpatient', label: 'خدمات سرپایی' }, { key: 'inpatient', label: 'خدمات بستری' }, ] } }); renderWithProviders(); await waitFor(() => expect(screen.getByTestId('labels')).toHaveTextContent('خدمات سرپایی|خدمات بستری')); }); it('پاسخ تخت (بدون لایهٔ اضافه) هم پذیرفته می‌شود', async () => { get.mockResolvedValue({ success: true, data: [{ key: 'outpatient', label: 'خدمات سرپایی' }] }); renderWithProviders(); await waitFor(() => expect(screen.getByTestId('labels')).toHaveTextContent('خدمات سرپایی')); }); it('پاسخ نامعتبر → لیست خالی، بدون خطا', async () => { get.mockResolvedValue({ success: true, data: { insurances: [] } }); renderWithProviders(); await waitFor(() => expect(screen.getByTestId('labels')).toHaveTextContent('')); }); });