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(/^var\(--[a-z0-9-]+\)$/); }); 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([]); }); });