| 1 |
import dateRangeReducer, { |
| 2 |
selectDateRange, |
| 3 |
selectDateRangeParams, |
| 4 |
setDateRange, |
| 5 |
} from '../../features/dateRange/dateRangeSlice'; |
| 6 |
|
| 7 |
describe('dateRangeSlice', () => { |
| 8 |
describe('Reducer', () => { |
| 9 |
it('has correct initial state with defaults', () => { |
| 10 |
const state = dateRangeReducer(undefined, { type: 'init' }); |
| 11 |
|
| 12 |
expect(state).toHaveProperty('startDate'); |
| 13 |
expect(state).toHaveProperty('endDate'); |
| 14 |
// Should be valid date strings |
| 15 |
expect(state.startDate).toMatch(/^\d{4}-\d{2}-\d{2}$/); |
| 16 |
expect(state.endDate).toMatch(/^\d{4}-\d{2}-\d{2}$/); |
| 17 |
}); |
| 18 |
|
| 19 |
it('sets date range with setDateRange action', () => { |
| 20 |
const state = dateRangeReducer( |
| 21 |
undefined, |
| 22 |
setDateRange({ |
| 23 |
startDate: '2025-01-01', |
| 24 |
endDate: '2025-01-31', |
| 25 |
}) |
| 26 |
); |
| 27 |
|
| 28 |
expect(state.startDate).toBe('2025-01-01'); |
| 29 |
expect(state.endDate).toBe('2025-01-31'); |
| 30 |
}); |
| 31 |
|
| 32 |
it('overwrites previous date range', () => { |
| 33 |
const state1 = dateRangeReducer( |
| 34 |
undefined, |
| 35 |
setDateRange({ |
| 36 |
startDate: '2025-01-01', |
| 37 |
endDate: '2025-01-31', |
| 38 |
}) |
| 39 |
); |
| 40 |
|
| 41 |
const state2 = dateRangeReducer( |
| 42 |
state1, |
| 43 |
setDateRange({ |
| 44 |
startDate: '2025-06-01', |
| 45 |
endDate: '2025-06-30', |
| 46 |
}) |
| 47 |
); |
| 48 |
|
| 49 |
expect(state2.startDate).toBe('2025-06-01'); |
| 50 |
expect(state2.endDate).toBe('2025-06-30'); |
| 51 |
}); |
| 52 |
}); |
| 53 |
|
| 54 |
describe('Selectors', () => { |
| 55 |
const mockState = { |
| 56 |
dateRange: { |
| 57 |
startDate: '2025-03-01', |
| 58 |
endDate: '2025-03-31', |
| 59 |
}, |
| 60 |
}; |
| 61 |
|
| 62 |
it('selectDateRange returns the date range state', () => { |
| 63 |
const result = selectDateRange(mockState); |
| 64 |
expect(result).toEqual({ |
| 65 |
startDate: '2025-03-01', |
| 66 |
endDate: '2025-03-31', |
| 67 |
}); |
| 68 |
}); |
| 69 |
|
| 70 |
it('selectDateRangeParams returns API-formatted params', () => { |
| 71 |
const result = selectDateRangeParams(mockState); |
| 72 |
expect(result).toEqual({ |
| 73 |
date_from: '2025-03-01', |
| 74 |
date_to: '2025-03-31', |
| 75 |
}); |
| 76 |
}); |
| 77 |
}); |
| 78 |
|
| 79 |
describe('Default range', () => { |
| 80 |
it('default end date is today', () => { |
| 81 |
const state = dateRangeReducer(undefined, { type: 'init' }); |
| 82 |
const today = new Date().toISOString().split('T')[0]; |
| 83 |
expect(state.endDate).toBe(today); |
| 84 |
}); |
| 85 |
|
| 86 |
it('default start date is 27 days before today', () => { |
| 87 |
const state = dateRangeReducer(undefined, { type: 'init' }); |
| 88 |
const start = new Date(); |
| 89 |
start.setDate(start.getDate() - 27); |
| 90 |
const expected = start.toISOString().split('T')[0]; |
| 91 |
expect(state.startDate).toBe(expected); |
| 92 |
}); |
| 93 |
}); |
| 94 |
}); |
| 95 |
|