Skip to content

Commit 0398e79

Browse files
test: add tests for openToDate with showTimeSelectOnly
Added tests to verify that openToDate can be used to specify the default date when showTimeSelectOnly is true and selected is null. This documents the existing behavior that addresses the feature request in #6032. Tests added: - openToDate as base date with showTimeSelectOnly and null selected - Current date fallback when neither selected nor openToDate provided - openToDate with showTimeInput and null selected Closes #6032 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 8b66e0d commit 0398e79

1 file changed

Lines changed: 105 additions & 0 deletions

File tree

src/test/show_time_test.test.tsx

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,109 @@ describe("DatePicker", () => {
185185
expect(onChange).toHaveBeenCalledWith(expectedDate);
186186
});
187187
});
188+
189+
describe("Time Select Only with openToDate", () => {
190+
it("should use openToDate as the base date when selecting time with showTimeSelectOnly and selected is null", () => {
191+
const onChange = jest.fn();
192+
const openToDate = new Date("2025-11-01T00:00:00");
193+
194+
const { container } = render(
195+
<DatePicker
196+
selected={null}
197+
openToDate={openToDate}
198+
onChange={onChange}
199+
showTimeSelect
200+
showTimeSelectOnly
201+
/>,
202+
);
203+
204+
const input = safeQuerySelector(container, "input");
205+
fireEvent.click(input);
206+
207+
// Find and click a time option (e.g., 09:00)
208+
const timeListItems = container.querySelectorAll(
209+
".react-datepicker__time-list-item",
210+
);
211+
expect(timeListItems.length).toBeGreaterThan(0);
212+
213+
// Click on a time option
214+
fireEvent.click(timeListItems[0]!);
215+
216+
expect(onChange).toHaveBeenCalled();
217+
const selectedDate = onChange.mock.calls[0][0] as Date;
218+
219+
// Verify the date part comes from openToDate
220+
expect(selectedDate.getFullYear()).toBe(2025);
221+
expect(selectedDate.getMonth()).toBe(10); // November is month 10 (0-indexed)
222+
expect(selectedDate.getDate()).toBe(1);
223+
});
224+
225+
it("should use current date when showTimeSelectOnly is true and neither selected nor openToDate is provided", () => {
226+
const onChange = jest.fn();
227+
const today = new Date();
228+
229+
const { container } = render(
230+
<DatePicker
231+
selected={null}
232+
onChange={onChange}
233+
showTimeSelect
234+
showTimeSelectOnly
235+
/>,
236+
);
237+
238+
const input = safeQuerySelector(container, "input");
239+
fireEvent.click(input);
240+
241+
const timeListItems = container.querySelectorAll(
242+
".react-datepicker__time-list-item",
243+
);
244+
expect(timeListItems.length).toBeGreaterThan(0);
245+
246+
fireEvent.click(timeListItems[0]!);
247+
248+
expect(onChange).toHaveBeenCalled();
249+
const selectedDate = onChange.mock.calls[0][0] as Date;
250+
251+
// Verify the date part comes from today
252+
expect(selectedDate.getFullYear()).toBe(today.getFullYear());
253+
expect(selectedDate.getMonth()).toBe(today.getMonth());
254+
expect(selectedDate.getDate()).toBe(today.getDate());
255+
});
256+
257+
it("should use openToDate for showTimeInput when selected is null", () => {
258+
const onChange = jest.fn();
259+
const openToDate = new Date("2025-11-01T00:00:00");
260+
261+
const { container } = render(
262+
<DatePicker
263+
selected={null}
264+
openToDate={openToDate}
265+
onChange={onChange}
266+
showTimeInput
267+
/>,
268+
);
269+
270+
const input = safeQuerySelector(container, "input");
271+
fireEvent.focus(input);
272+
273+
const timeInput = safeQuerySelector<HTMLInputElement>(
274+
container,
275+
'input[type="time"].react-datepicker-time__input',
276+
);
277+
278+
fireEvent.change(timeInput, {
279+
target: { value: "14:30" },
280+
});
281+
282+
expect(onChange).toHaveBeenCalled();
283+
const selectedDate = onChange.mock.calls[0][0] as Date;
284+
285+
// Verify the date part comes from openToDate
286+
expect(selectedDate.getFullYear()).toBe(2025);
287+
expect(selectedDate.getMonth()).toBe(10); // November
288+
expect(selectedDate.getDate()).toBe(1);
289+
expect(selectedDate.getHours()).toBe(14);
290+
expect(selectedDate.getMinutes()).toBe(30);
291+
});
292+
});
188293
});

0 commit comments

Comments
 (0)