import { describe, it, expect, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import SearchableSelect from './SearchableSelect'; vi.mock('../../stores/uiStore', () => ({ useUiStore: () => false })); const insuranceOpts = [ { value: '176', label: 'تامین اجتماعی' }, { value: '178', label: 'بیمه ارتش' }, ]; describe('SearchableSelect — تطبیق مقدار', () => { it('مقدار number با گزینهٔ string تطبیق می‌خورد (id بیمه)', () => { render( {}} />); expect(screen.getByText('تامین اجتماعی')).toBeInTheDocument(); }); it('مقدار string با گزینهٔ string تطبیق می‌خورد', () => { render( {}} />); expect(screen.getByText('بیمه ارتش')).toBeInTheDocument(); }); it('مقدار number با گزینهٔ number تطبیق می‌خورد', () => { render( {}} />); expect(screen.getByText('یزد')).toBeInTheDocument(); }); it('null/خالی → هیچ گزینه‌ای انتخاب نمی‌شود (placeholder)', () => { render( {}} placeholder="انتخاب کنید..." />); expect(screen.getByText('انتخاب کنید...')).toBeInTheDocument(); expect(screen.queryByText('تامین اجتماعی')).not.toBeInTheDocument(); }); }); describe('SearchableSelect — نام دسترس‌پذیر', () => { it('در نبود ariaLabel، از placeholder به‌عنوان نام استفاده می‌کند', () => { render( {}} placeholder="نوع بیمه" />); expect(screen.getByRole('combobox', { name: 'نوع بیمه' })).toBeInTheDocument(); }); it('ariaLabel بر placeholder اولویت دارد', () => { render( {}} placeholder="انتخاب کنید..." ariaLabel="بیمه پایه" />); expect(screen.getByRole('combobox', { name: 'بیمه پایه' })).toBeInTheDocument(); }); it('ariaLabelledBy به label قابل‌مشاهده وصل می‌شود', () => { render( <> شهر {}} ariaLabelledBy="lbl-city" /> , ); expect(screen.getByRole('combobox', { name: 'شهر' })).toBeInTheDocument(); }); });