import React from 'react' import { render, fireEvent } from '@testing-library/react' import { RouteFilter } from '../../src/components/RouteFilter' describe('RouteFilter', () => { it('应该正确渲染初始状态', () => { const { getByText } = render() expect(getByText('全部')).toBeTruthy() expect(getByText('去程')).toBeTruthy() expect(getByText('返程')).toBeTruthy() expect(getByText('筛选')).toBeTruthy() }) it('应该处理路线类型选择', () => { const mockOnRouteTypeChange = jest.fn() const { getByText } = render( ) const departureButton = getByText('去程') fireEvent.click(departureButton) expect(mockOnRouteTypeChange).toHaveBeenCalledWith('departure') }) it('应该展开和收起筛选面板', () => { const { getByText, queryByText } = render() const filterButton = getByText('筛选') fireEvent.click(filterButton) expect(getByText('车辆类型')).toBeTruthy() expect(getByText('排序方式')).toBeTruthy() fireEvent.click(filterButton) expect(queryByText('车辆类型')).toBeNull() expect(queryByText('排序方式')).toBeNull() }) it('应该处理车辆类型选择', () => { const mockOnVehicleTypeChange = jest.fn() const { getByText } = render( ) // 先展开筛选面板 const filterButton = getByText('筛选') fireEvent.click(filterButton) const busButton = getByText('大巴拼车') fireEvent.click(busButton) expect(mockOnVehicleTypeChange).toHaveBeenCalledWith('bus') }) it('应该处理排序选择', () => { const mockOnSortChange = jest.fn() const { getByText } = render( ) // 先展开筛选面板 const filterButton = getByText('筛选') fireEvent.click(filterButton) const priceSortButton = getByText('价格') fireEvent.click(priceSortButton) expect(mockOnSortChange).toHaveBeenCalledWith('price', 'asc') // 再次点击应该切换排序方向 fireEvent.click(priceSortButton) expect(mockOnSortChange).toHaveBeenCalledWith('price', 'desc') }) it('应该显示当前筛选状态', () => { const { getByText } = render( ) expect(getByText('去程')).toBeTruthy() expect(getByText('大巴拼车')).toBeTruthy() expect(getByText('价格↓')).toBeTruthy() }) it('应该正确显示排序图标', () => { const { getByText } = render( ) // 展开筛选面板 const filterButton = getByText('筛选') fireEvent.click(filterButton) const departureTimeSort = getByText('出发时间↑') expect(departureTimeSort).toBeTruthy() }) it('应该处理全部选项的选择', () => { const mockOnRouteTypeChange = jest.fn() const { getByText } = render( ) const allButton = getByText('全部') fireEvent.click(allButton) expect(mockOnRouteTypeChange).toHaveBeenCalledWith('all') }) it('应该正确显示激活状态的样式', () => { const { getByText } = render( ) const departureButton = getByText('去程') const allButton = getByText('全部') // 验证去程按钮有激活样式 expect(departureButton.className).toContain('bg-blue-500') expect(departureButton.className).toContain('text-white') // 验证全部按钮没有激活样式 expect(allButton.className).toContain('bg-white') expect(allButton.className).toContain('text-gray-600') }) it('应该支持自定义初始值', () => { const { getByText } = render( ) // 展开筛选面板 const filterButton = getByText('筛选') fireEvent.click(filterButton) // 验证车辆类型选择正确 const charterButton = getByText('包车') expect(charterButton.className).toContain('bg-green-500') // 验证排序选择正确 const priceSortButton = getByText('价格↓') expect(priceSortButton.className).toContain('bg-orange-500') }) })