- Refactor color palette in `ui-design-spec.md` to utilize CSS variables exclusively, eliminating fixed hex values and Tailwind utility classes. - Complete dark mode implementation in `uiStore.ts`, ensuring proper theme application via `applyTheme()` and `applyBrand()`. - Create `admin-theme-dark-light-audit.md` to document the transition process, outlining issues with inline styles and fixed colors. - Introduce `theme-tokens.test.ts` to enforce rules against fixed hex colors and ensure compliance with the design system. - Update various components and styles to replace inline styles and fixed colors with CSS variables, ensuring consistent theming across light and dark modes. - Ensure all changes maintain visual integrity in both light and dark modes, with a focus on accessibility and contrast standards.
43 lines
1.3 KiB
TypeScript
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(/^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([]);
|
|
});
|
|
});
|