mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* refactor: move feature-flags, calendars, and schedules components from packages/features to apps/web/modules Co-Authored-By: [email protected] <[email protected]> * fix * fix * fix * fix: move DatePicker and DateOverrideInputDialog to apps/web/modules and update imports Co-Authored-By: [email protected] <[email protected]> * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * rename * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * wip * wip * wip * fix unit tests --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
123 lines
3.5 KiB
TypeScript
123 lines
3.5 KiB
TypeScript
import { TooltipProvider } from "@radix-ui/react-tooltip";
|
|
import { render, renderHook, screen } from "@testing-library/react";
|
|
// eslint-disable-next-line no-restricted-imports
|
|
import { noop } from "lodash";
|
|
import { useFieldArray, useForm, FormProvider } from "react-hook-form";
|
|
import { vi } from "vitest";
|
|
|
|
import dayjs from "@calcom/dayjs";
|
|
import DateOverrideList from "@calcom/features/schedules/components/DateOverrideList";
|
|
import type { TimeRange } from "@calcom/types/schedule";
|
|
|
|
vi.mock("next/navigation", async (importOriginal) => {
|
|
const actual = await importOriginal<typeof import("next/navigation")>();
|
|
return {
|
|
...actual,
|
|
useRouter: vi.fn(() => ({
|
|
push: vi.fn(() => {
|
|
return;
|
|
}),
|
|
})),
|
|
};
|
|
});
|
|
|
|
type FormValues = {
|
|
dateOverrides: { ranges: TimeRange[] }[];
|
|
};
|
|
|
|
describe("DateOverrideList", () => {
|
|
it("renders DateOverrideList component in military time", () => {
|
|
const { result } = renderHook(() =>
|
|
useForm<FormValues>({
|
|
values: {
|
|
dateOverrides: [
|
|
{
|
|
ranges: [
|
|
{
|
|
start: dayjs.utc().startOf("day").add(540, "minute").toDate(),
|
|
end: dayjs.utc().startOf("day").add(1020, "minute").toDate(),
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
})
|
|
);
|
|
const methods = result.current;
|
|
const { control } = methods;
|
|
|
|
const { result: fieldArrayResult } = renderHook(() => useFieldArray({ control, name: "dateOverrides" }));
|
|
render(
|
|
<TooltipProvider>
|
|
<FormProvider {...methods}>
|
|
<DateOverrideList
|
|
hour12={false}
|
|
userTimeFormat={24}
|
|
fields={fieldArrayResult.current.fields}
|
|
replace={fieldArrayResult.current.replace}
|
|
workingHours={[]}
|
|
handleAvailabilityUpdate={noop}
|
|
/>
|
|
</FormProvider>
|
|
</TooltipProvider>
|
|
);
|
|
|
|
const dateString = new Intl.DateTimeFormat("en", {
|
|
weekday: "long",
|
|
month: "long",
|
|
day: "numeric",
|
|
timeZone: "UTC",
|
|
}).format(new Date());
|
|
|
|
expect(screen.getByText(dateString)).toBeInTheDocument();
|
|
expect(screen.getByText(`09:00 - 17:00`)).toBeInTheDocument();
|
|
});
|
|
|
|
it("renders DateOverrideList component in AM/PM", () => {
|
|
const { result } = renderHook(() =>
|
|
useForm<FormValues>({
|
|
values: {
|
|
dateOverrides: [
|
|
{
|
|
ranges: [
|
|
{
|
|
start: dayjs.utc().startOf("day").add(540, "minute").toDate(),
|
|
end: dayjs.utc().startOf("day").add(1020, "minute").toDate(),
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
})
|
|
);
|
|
const methods = result.current;
|
|
const { control } = methods;
|
|
|
|
const { result: fieldArrayResult } = renderHook(() => useFieldArray({ control, name: "dateOverrides" }));
|
|
render(
|
|
<TooltipProvider>
|
|
<FormProvider {...methods}>
|
|
<DateOverrideList
|
|
hour12={true}
|
|
userTimeFormat={12}
|
|
fields={fieldArrayResult.current.fields}
|
|
replace={fieldArrayResult.current.replace}
|
|
workingHours={[]}
|
|
handleAvailabilityUpdate={noop}
|
|
/>
|
|
</FormProvider>
|
|
</TooltipProvider>
|
|
);
|
|
|
|
const dateString = new Intl.DateTimeFormat("en", {
|
|
weekday: "long",
|
|
month: "long",
|
|
day: "numeric",
|
|
timeZone: "UTC",
|
|
}).format(new Date());
|
|
|
|
expect(screen.getByText(dateString)).toBeInTheDocument();
|
|
expect(screen.getByText(`9:00 AM - 5:00 PM`)).toBeInTheDocument();
|
|
});
|
|
});
|