70 lines
2.7 KiB
TypeScript
70 lines
2.7 KiB
TypeScript
import { changeField, openSelect } from '@/test-utils/select'
|
|
import { fireEvent, render, screen } from '@testing-library/react'
|
|
import MonthlyLaunchPeriodFilter from './MonthlyLaunchPeriodFilter'
|
|
|
|
const mockPush = jest.fn()
|
|
|
|
jest.mock('next/navigation', () => ({
|
|
usePathname: () => '/workspaces/dashboard/core-metrics/monthly-launches',
|
|
useRouter: () => ({ push: mockPush }),
|
|
}))
|
|
|
|
const summary = {
|
|
completed: 4,
|
|
ongoing: 2,
|
|
total: 6,
|
|
monthStart: '2026-07-31T16:00:00.000Z',
|
|
monthEnd: '2026-08-31T16:00:00.000Z',
|
|
lastSyncedAt: '2026-08-31T04:00:00.000Z',
|
|
syncStatus: 'ready' as const,
|
|
}
|
|
|
|
const options = [
|
|
{ value: '2026-08', label: '本月', startDate: '2026-08-01', endDate: '2026-08-31' },
|
|
{ value: '2026-07', label: '上月', startDate: '2026-07-01', endDate: '2026-07-31' },
|
|
]
|
|
|
|
describe('MonthlyLaunchPeriodFilter', () => {
|
|
beforeEach(() => mockPush.mockClear())
|
|
|
|
it('shows available month presets and navigates with a month query', () => {
|
|
render(<MonthlyLaunchPeriodFilter summary={summary} options={options} />)
|
|
|
|
openSelect(screen.getByRole('combobox', { name: '选择统计月份' }))
|
|
expect(screen.getByRole('option', { name: '本月' })).toBeInTheDocument()
|
|
expect(screen.getByRole('option', { name: '上月' })).toBeInTheDocument()
|
|
expect(screen.getByRole('option', { name: '自定义日期' })).toBeInTheDocument()
|
|
|
|
changeField(screen.getByRole('combobox', { name: '选择统计月份' }), {
|
|
target: { value: '2026-07' },
|
|
})
|
|
|
|
expect(mockPush).toHaveBeenCalledWith(
|
|
'/workspaces/dashboard/core-metrics/monthly-launches?month=2026-07',
|
|
)
|
|
})
|
|
|
|
it('submits an inclusive custom date range', () => {
|
|
render(<MonthlyLaunchPeriodFilter summary={summary} options={options} />)
|
|
|
|
changeField(screen.getByLabelText(/统计开始日期/), { target: { value: '2026-06-15' } })
|
|
changeField(screen.getByLabelText(/统计结束日期/), { target: { value: '2026-06-30' } })
|
|
expect(screen.getByRole('combobox', { name: '选择统计月份' })).toHaveValue('custom')
|
|
fireEvent.submit(screen.getByRole('form', { name: '本月上新日期筛选' }))
|
|
|
|
expect(mockPush).toHaveBeenCalledWith(
|
|
'/workspaces/dashboard/core-metrics/monthly-launches?startDate=2026-06-15&endDate=2026-06-30',
|
|
)
|
|
})
|
|
|
|
it('disables apply when the end date is before the start date', () => {
|
|
render(<MonthlyLaunchPeriodFilter summary={summary} options={options} />)
|
|
|
|
changeField(screen.getByLabelText(/统计开始日期/), { target: { value: '2026-08-20' } })
|
|
changeField(screen.getByLabelText(/统计结束日期/), { target: { value: '2026-08-10' } })
|
|
|
|
expect(screen.getByRole('button', { name: /应用筛选/ })).toBeDisabled()
|
|
expect(mockPush).not.toHaveBeenCalled()
|
|
})
|
|
})
|