import { describe, it, expect, beforeEach } from 'vitest'; import { adaptSlots, hasAvailable } from '@/lib/appointmentSlots'; import { getAccessToken, setAccessToken, clearAccessToken } from '@/lib/tokenStore'; import { sanitizeHtml, safeJsonParse } from '@/lib/sanitize'; import { defineAbilitiesFor } from '@/lib/ability'; import { setRefreshCookie, clearRefreshCookie, COOKIE_NAME } from '@/lib/refreshCookie'; import { buildPatientUser } from '@/lib/representationAdapters'; describe('appointmentSlots', () => { const resp = { sessions: [ { slots: [ { start_time: '09:00', is_available: true }, { start_time: '11:30', is_available: false }, { start_time: '14:00', is_available: true }, ] }, ], }; it('adaptSlots اسلاتها را بر اساس 12:00 به صبح/عصر تقسیم میکند', () => { const { morning, evening } = adaptSlots(resp); expect(morning).toHaveLength(2); expect(evening).toHaveLength(1); expect(evening[0].start_time).toBe('14:00'); }); it('ساختار data.sessions را هم میپذیرد', () => { const { morning } = adaptSlots({ data: resp }); expect(morning).toHaveLength(2); }); it('ورودی خالی → آرایههای خالی', () => { expect(adaptSlots(null)).toEqual({ morning: [], evening: [] }); }); it('hasAvailable', () => { expect(hasAvailable([{ is_available: false }, { is_available: true }])).toBe(true); expect(hasAvailable([{ is_available: false }])).toBe(false); expect(hasAvailable([])).toBe(false); expect(hasAvailable(null)).toBe(false); }); }); describe('tokenStore', () => { beforeEach(() => clearAccessToken()); it('set/get/clear', () => { expect(getAccessToken()).toBeNull(); setAccessToken('tok'); expect(getAccessToken()).toBe('tok'); clearAccessToken(); expect(getAccessToken()).toBeNull(); }); it('set با مقدار falsy → null', () => { setAccessToken(''); expect(getAccessToken()).toBeNull(); }); }); describe('sanitize', () => { it('غیررشته → رشته خالی', () => { expect(sanitizeHtml(null)).toBe(''); expect(sanitizeHtml(123)).toBe(''); }); it('تگ مجاز حفظ، اسکریپت حذف', () => { const out = sanitizeHtml('
سلام
'); expect(out).toContain('سلام
'); expect(out).not.toContain('