43 lines
1.8 KiB
TypeScript
43 lines
1.8 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { render, screen } from '@testing-library/react';
|
|
import Stepper from './Stepper';
|
|
|
|
const STEPS = [
|
|
{ key: 'cost', title: 'بیمه و هزینه' },
|
|
{ key: 'payment', title: 'پرداخت' },
|
|
{ key: 'review', title: 'تأیید' },
|
|
];
|
|
|
|
const items = () => screen.getAllByRole('listitem');
|
|
|
|
describe('Stepper', () => {
|
|
it('همهٔ مراحل را با شمارهٔ خودشان نشان میدهد', () => {
|
|
render(<Stepper steps={STEPS} current="payment" ariaLabel="مراحل" />);
|
|
|
|
expect(items()).toHaveLength(3);
|
|
expect(items()[0].textContent).toBe('1بیمه و هزینه');
|
|
expect(items()[2].textContent).toBe('3تأیید');
|
|
});
|
|
|
|
it('مرحلهٔ جاری با aria-current اعلام میشود', () => {
|
|
render(<Stepper steps={STEPS} current="payment" ariaLabel="مراحل" />);
|
|
|
|
// فقط یکی؛ وگرنه صفحهخوان دو «مرحلهٔ فعلی» میخواند.
|
|
const marked = items().filter(li => li.getAttribute('aria-current') === 'step');
|
|
expect(marked).toHaveLength(1);
|
|
expect(marked[0].textContent).toBe('2پرداخت');
|
|
});
|
|
|
|
it('نوار با برچسبِ دادهشده قابل پیدا شدن است', () => {
|
|
render(<Stepper steps={STEPS} current="cost" ariaLabel="مراحل قطعی کردن نوبت" />);
|
|
|
|
expect(screen.getByRole('list', { name: 'مراحل قطعی کردن نوبت' })).toBeInTheDocument();
|
|
});
|
|
|
|
it('مرحلهٔ ناشناخته هیچکدام را فعال نمیکند و خطا نمیدهد', () => {
|
|
render(<Stepper steps={STEPS} current="unknown" ariaLabel="مراحل" />);
|
|
|
|
expect(items().filter(li => li.getAttribute('aria-current') === 'step')).toHaveLength(0);
|
|
});
|
|
});
|