import { renderHook } from '@testing-library/react' import { useDaysOfWeek, useMonths, useTimeOptions, useYearOptions } from './hooks' import { Period } from './types' import dayjs from './utils/dayjs' describe('date-and-time-picker hooks', () => { // Tests for useDaysOfWeek hook describe('useDaysOfWeek', () => { it('should return 7 days of the week', () => { const { result } = renderHook(() => useDaysOfWeek()) expect(result.current).toHaveLength(7) }) it('should return translated day keys with namespace prefix', () => { const { result } = renderHook(() => useDaysOfWeek()) // Global i18n mock returns "time.daysInWeek." format expect(result.current[0]).toContain('daysInWeek.Sun') expect(result.current[6]).toContain('daysInWeek.Sat') }) }) // Tests for useMonths hook describe('useMonths', () => { it('should return 12 months', () => { const { result } = renderHook(() => useMonths()) expect(result.current).toHaveLength(12) }) it('should return translated month keys with namespace prefix', () => { const { result } = renderHook(() => useMonths()) expect(result.current[0]).toContain('months.January') expect(result.current[11]).toContain('months.December') }) }) // Tests for useYearOptions hook describe('useYearOptions', () => { it('should return 200 year options', () => { const { result } = renderHook(() => useYearOptions()) expect(result.current).toHaveLength(200) }) it('should center around the current year', () => { const { result } = renderHook(() => useYearOptions()) const currentYear = dayjs().year() expect(result.current).toContain(currentYear) // First year should be currentYear - 50 (YEAR_RANGE/2 = 50) expect(result.current[0]).toBe(currentYear - 50) // Last year should be currentYear + 149 expect(result.current[199]).toBe(currentYear + 149) }) }) // Tests for useTimeOptions hook describe('useTimeOptions', () => { it('should return 12 hour options', () => { const { result } = renderHook(() => useTimeOptions()) expect(result.current.hourOptions).toHaveLength(12) }) it('should return hours from 01 to 12 zero-padded', () => { const { result } = renderHook(() => useTimeOptions()) expect(result.current.hourOptions[0]).toBe('01') expect(result.current.hourOptions[11]).toBe('12') }) it('should return 60 minute options', () => { const { result } = renderHook(() => useTimeOptions()) expect(result.current.minuteOptions).toHaveLength(60) }) it('should return minutes from 00 to 59 zero-padded', () => { const { result } = renderHook(() => useTimeOptions()) expect(result.current.minuteOptions[0]).toBe('00') expect(result.current.minuteOptions[59]).toBe('59') }) it('should return AM and PM period options', () => { const { result } = renderHook(() => useTimeOptions()) expect(result.current.periodOptions).toEqual([Period.AM, Period.PM]) }) }) })