Files
clinicpro/assets/admin/components/ui/appointmentStatusMeta.test.ts
T

43 lines
1.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { STATUS_META } from './AppointmentStatusDropdown';
/**
* Mirrors Appointment::STATUS_* on the backend. The dashboard used to keep its
* own copy of this map, which drifted and rendered `confirmed` / `expired` as
* raw English; every consumer now derives from STATUS_META, so this list is the
* one place that has to stay in sync with the entity.
*/
const BACKEND_STATUSES = [
'pending',
'confirmed',
'completed',
'cancelled_by_doctor',
'cancelled_by_user',
'expired',
'no_show',
'following_up',
'salon',
] as const;
describe('STATUS_META', () => {
it.each(BACKEND_STATUSES)('has a Persian label and colour for %s', (status) => {
expect(STATUS_META[status]).toBeDefined();
expect(STATUS_META[status].label.trim()).not.toBe('');
expect(STATUS_META[status].color).toMatch(/^#[0-9a-f]{6}$/i);
});
it('carries no label that is still English', () => {
const latin = Object.entries(STATUS_META)
.filter(([, v]) => /[A-Za-z]/.test(v.label))
.map(([k]) => k);
expect(latin).toEqual([]);
});
it('defines no status the backend does not know about', () => {
const unknown = Object.keys(STATUS_META).filter(
(k) => !BACKEND_STATUSES.includes(k as (typeof BACKEND_STATUSES)[number]),
);
expect(unknown).toEqual([]);
});
});