feat(appointments): add support for doctors without schedules and display relevant notice
This commit is contained in:
@@ -85,6 +85,7 @@ describe('AppointmentsPage — پروفایل کلینیک چندپزشکه', ()
|
||||
{ uuid: 'r-1', name: 'اتاق ۱', type_name: 'اتاق درمان', supervisor: { uuid: 'd1', name: 'دکتر محمدی' } },
|
||||
{ uuid: 'r-2', name: 'لیزر CO2', type_name: 'دستگاه لیزر', supervisor: { uuid: 'd1', name: 'دکتر محمدی' } },
|
||||
{ uuid: 'r-3', name: 'لیزر دکتر رضایی', type_name: 'دستگاه لیزر', supervisor: { uuid: 'd2', name: 'دکتر رضایی' } },
|
||||
{ uuid: 'r-4', name: 'کندلا ۲۰۲۳', type_name: 'دستگاه لیزر', supervisor: { uuid: 'd3', name: 'دکتر بیبرنامه' } },
|
||||
] });
|
||||
return Promise.resolve({ success: true, data: [] });
|
||||
});
|
||||
@@ -122,12 +123,44 @@ describe('AppointmentsPage — پروفایل کلینیک چندپزشکه', ()
|
||||
expect(calls.some((u: string) => u.includes('doctor_uuid='))).toBe(false);
|
||||
});
|
||||
|
||||
/** پزشکی که در تنظیمات نوبتدهی روز کاری تعریف نکرده تب نمیگیرد. */
|
||||
it('پزشک بدون برنامهٔ کاری تب نمیگیرد', async () => {
|
||||
/**
|
||||
* پزشکِ بدون برنامهٔ هفتگی هم تب میگیرد — با برچسب «بدون ساعت کاری» — چون منابعِ
|
||||
* تحت نظرش تقویم مستقل دارند و پنهانکردنِ پزشک، نوبتدهی آن منابع را هم میبست.
|
||||
*/
|
||||
it('پزشک بدون برنامهٔ کاری تب میگیرد و برچسب میخورد', async () => {
|
||||
renderWithProviders(<AppointmentsPage />);
|
||||
expect(await screen.findByText('دکتر محمدی')).toBeInTheDocument();
|
||||
expect(screen.getByText('دکتر رضایی')).toBeInTheDocument();
|
||||
expect(screen.queryByText('دکتر بیبرنامه')).toBeNull();
|
||||
expect(screen.getByText('دکتر بیبرنامه')).toBeInTheDocument();
|
||||
expect(screen.getByText('بدون ساعت کاری')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('پزشک بدون برنامهٔ کاری: پیام «ساعت کاری تنظیم نشده است» و منابعِ قابل نوبتدهی', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderWithProviders(<AppointmentsPage />);
|
||||
|
||||
await user.click(await screen.findByRole('button', { name: /دکتر بیبرنامه/ }));
|
||||
|
||||
expect(await screen.findByText('ساعت کاری تنظیم نشده است')).toBeInTheDocument();
|
||||
// منبعِ همان پزشک هم در نوار تبها و هم در میانبُرِ رزرو دیده میشود.
|
||||
expect(screen.getAllByRole('button', { name: 'کندلا ۲۰۲۳' }).length).toBeGreaterThan(0);
|
||||
expect(screen.getByRole('button', { name: 'ثبت نوبت' })).toBeInTheDocument();
|
||||
// برای پزشکِ بدون برنامه اسلات درخواست نمیشود.
|
||||
expect(get.mock.calls.some(
|
||||
(c: any[]) => typeof c[0] === 'string' && c[0].includes('appointment-slots') && c[0].includes('doctor_uuid=d3'),
|
||||
)).toBe(false);
|
||||
});
|
||||
|
||||
it('منبعِ پزشکِ بدون برنامه، تایملاین تقویم خودش را میدهد', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderWithProviders(<AppointmentsPage />, { route: '/admin/appointments?resource=r-4' });
|
||||
|
||||
await user.click(await screen.findByRole('button', { name: /دکتر بیبرنامه/ }));
|
||||
await user.click((await screen.findAllByRole('button', { name: 'کندلا ۲۰۲۳' }))[0]);
|
||||
|
||||
expect(await screen.findByText(/نوبتها بر اساس مدت سرویس چیده میشوند/)).toBeInTheDocument();
|
||||
expect(get.mock.calls.some(
|
||||
(c: any[]) => typeof c[0] === 'string' && c[0].includes('/api/v1/resource/r-4/day-slots'),
|
||||
)).toBe(true);
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -175,7 +208,8 @@ describe('AppointmentsPage — پروفایل کلینیک چندپزشکه', ()
|
||||
|
||||
expect(await screen.findByText(/نوبتها بر اساس مدت سرویس چیده میشوند/)).toBeInTheDocument();
|
||||
expect(await screen.findByText('افزودن نوبت سریع')).toBeInTheDocument();
|
||||
expect(screen.getByText(/ساعت کاری/)).toBeInTheDocument();
|
||||
// «ساعت کاری: …» بازهٔ منبع است؛ برچسبِ تبِ «بدون ساعت کاری» نباید اینجا بیفتد.
|
||||
expect(screen.getByText(/^ساعت کاری:/)).toBeInTheDocument();
|
||||
// بازهٔ کاری از تقویم منبع خوانده میشود، نه از اسلاتهای پزشک.
|
||||
const askedResourceDay = get.mock.calls.some(
|
||||
(c: any[]) => typeof c[0] === 'string' && c[0].includes('/api/v1/resource/r-2/day-slots'),
|
||||
|
||||
Reference in New Issue
Block a user