import { describe, it, expect, vi, beforeEach } from 'vitest'; import { renderHook } from '@testing-library/react'; import { useDateFnsLocale } from '../useDateFnsLocale'; import { enUS, de, es, fr } from 'date-fns/locale'; // Mock react-i18next vi.mock('react-i18next', () => ({ useTranslation: vi.fn(), })); import { useTranslation } from 'react-i18next'; describe('useDateFnsLocale', () => { beforeEach(() => { vi.clearAllMocks(); }); it('returns English locale by default', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: 'en' }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(enUS); }); it('returns German locale for de', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: 'de' }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(de); }); it('returns Spanish locale for es', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: 'es' }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(es); }); it('returns French locale for fr', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: 'fr' }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(fr); }); it('handles language with region code (en-US)', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: 'en-US' }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(enUS); }); it('handles language with region code (de-DE)', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: 'de-DE' }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(de); }); it('returns English locale for unknown language', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: 'xx' }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(enUS); }); it('returns English locale when language is undefined', () => { vi.mocked(useTranslation).mockReturnValue({ i18n: { language: undefined }, t: vi.fn(), ready: true, } as ReturnType); const { result } = renderHook(() => useDateFnsLocale()); expect(result.current).toBe(enUS); }); });