import { render } from "@testing-library/react"; import React from "react"; import { addHours, addMinutes, addSeconds, getStartOfDay, newDate, } from "../date_utils"; import TimeComponent from "../time"; describe("TimeComponent", () => { let today: Date, includeTimes: Date[]; beforeEach(() => { today = getStartOfDay(newDate()); includeTimes = [ addMinutes(today, 60), addMinutes(today, 120), addMinutes(today, 150), ]; }); it("should only enable times specified in includeTimes props", () => { const { container: timeComponent } = render( , ); const allTimeItems = timeComponent.querySelectorAll( ".react-datepicker__time-list-item", ); const disabledTimeItems = timeComponent.querySelectorAll( ".react-datepicker__time-list-item--disabled", ); const expectedDisabledTimeItems = allTimeItems.length - includeTimes.length; expect(disabledTimeItems.length).toBe(expectedDisabledTimeItems); }); it("should not add aria-disabled attribute on all the enabled times", () => { const { container: timeComponent } = render( , ); const allTimeItems = timeComponent.querySelectorAll( ".react-datepicker__time-list-item", ); const enabledTimeItems = Array.from(allTimeItems).filter( (timeItem) => !timeItem.classList.contains( "react-datepicker__time-list-item--disabled", ), ); const enabledTimeItemsHasNoAriaDisabled = Array.from( enabledTimeItems, ).every((timeItem) => { const ariaDisabledValue = timeItem.getAttribute("aria-disabled"); return !ariaDisabledValue || ariaDisabledValue.toLowerCase() === "false"; }); expect(enabledTimeItemsHasNoAriaDisabled).toBe(true); }); it("should factor in seconds", () => { const includeHoursMinutesSeconds = [ addHours(addSeconds(today, 30), 1), //01:00:30 addSeconds(today, 30), //00:00:30 ]; const { container: timeComponent } = render( , ); const disabledTimeItems = timeComponent.querySelectorAll( ".react-datepicker__time-list-item--disabled", ); // 01:00:00 and 00:00:00 should be correctly disabled because they are not included expect( Array.from(disabledTimeItems).map((node) => node.textContent), ).toContain("01:00:00"); expect( Array.from(disabledTimeItems).map((node) => node.textContent), ).toContain("00:00:00"); }); });