Skip to content

Commit 09e785c

Browse files
Merge pull request #6157 from Hacker0x01/docs/opentodate-with-showtimeselectonly
test: add tests for openToDate with showTimeSelectOnly
2 parents 8b66e0d + 0398e79 commit 09e785c

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)