import { describe, expect, it, vi } from 'vitest' import { mount } from '@vue/test-utils' import { ref } from 'vue' import DateRangePicker from '../DateRangePicker.vue' const messages: Record = { 'dates.today': 'Today', 'dates.yesterday': 'Yesterday', 'dates.last24Hours': 'Last 24 Hours', 'dates.last7Days': 'Last 7 Days', 'dates.last14Days': 'Last 14 Days', 'dates.last30Days': 'Last 30 Days', 'dates.thisMonth': 'This Month', 'dates.lastMonth': 'Last Month', 'dates.startDate': 'Start Date', 'dates.endDate': 'End Date', 'dates.apply': 'Apply', 'dates.selectDateRange': 'Select date range' } vi.mock('vue-i18n', () => ({ useI18n: () => ({ t: (key: string) => messages[key] ?? key, locale: ref('en') }) })) const formatLocalDate = (date: Date): string => { const year = date.getFullYear() const month = String(date.getMonth() + 1).padStart(2, '0') const day = String(date.getDate()).padStart(2, '0') return `${year}-${month}-${day}` } describe('DateRangePicker', () => { it('uses last 24 hours as the default recognized preset', () => { const now = new Date() const yesterday = new Date(now.getTime() - 24 * 60 * 60 * 1000) const wrapper = mount(DateRangePicker, { props: { startDate: formatLocalDate(yesterday), endDate: formatLocalDate(now) }, global: { stubs: { Icon: true } } }) expect(wrapper.text()).toContain('Last 24 Hours') }) it('emits range updates with last24Hours preset when applied', async () => { const now = new Date() const today = formatLocalDate(now) const wrapper = mount(DateRangePicker, { props: { startDate: today, endDate: today }, global: { stubs: { Icon: true } } }) await wrapper.find('.date-picker-trigger').trigger('click') const presetButton = wrapper.findAll('.date-picker-preset').find((node) => node.text().includes('Last 24 Hours') ) expect(presetButton).toBeDefined() await presetButton!.trigger('click') await wrapper.find('.date-picker-apply').trigger('click') const nowAfterClick = new Date() const yesterdayAfterClick = new Date(nowAfterClick.getTime() - 24 * 60 * 60 * 1000) const expectedStart = formatLocalDate(yesterdayAfterClick) const expectedEnd = formatLocalDate(nowAfterClick) expect(wrapper.emitted('update:startDate')?.[0]).toEqual([expectedStart]) expect(wrapper.emitted('update:endDate')?.[0]).toEqual([expectedEnd]) expect(wrapper.emitted('change')?.[0]).toEqual([ { startDate: expectedStart, endDate: expectedEnd, preset: 'last24Hours' } ]) }) })