Files
calendar/apps/web/modules/form-builder/components/FormBuilderField.test.tsx
T
Benny JooandGitHub eba0635a07 refactor: eliminate all @calcom/trpc/react imports and tRPC hooks from @calcom/features (#27728)
* migrate booker layout selector

* move schedule hooks and types

* migrate feature opt in components

* migrate feedback dialog

* update

* migrate schedule hooks

* migrate useSegments

* update

* update import paths

* fix import paths

* mv useTimesForSchedule back to features

* fix

* add useEvent to web

* remove the old file

* update imports

* clean up

* migrate Segment

* update imports

* update imports

* fix name

* fix tests

* fix

* fix

* update imports

* remove trpc/react

* remove trpc dependency from package.json

* rm

* wip

* wip

* fix types

* fix

* migrate PhoneInput

* mv LocationInput

* remove dead file

* update import paths

* rm dead import

* rm useApp hook

* cleanup

* wip

* restore

* wip

* remove dead code

* fix

* simplify

* fix

* fix

* fix

* fix

* fix

* fix

* format

* format

* restore

* remove prop
2026-02-09 08:39:28 -03:00

85 lines
2.5 KiB
TypeScript

import { render, screen, fireEvent } from "@testing-library/react";
import * as React from "react";
import { FormProvider, useForm } from "react-hook-form";
import type { UseFormReturn } from "react-hook-form";
import { vi } from "vitest";
import { FormBuilderField } from "./FormBuilderField";
vi.mock("@formkit/auto-animate/react", () => ({
useAutoAnimate: () => [null],
}));
const renderComponent = ({
props: props,
formDefaultValues,
}: {
props: Parameters<typeof FormBuilderField>[0];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
formDefaultValues?: any;
}) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let formMethods: UseFormReturn<any> | undefined;
const Wrapper = ({ children }: { children: React.ReactNode }) => {
const form = useForm({
defaultValues: formDefaultValues,
});
formMethods = form;
return <FormProvider {...form}>{children}</FormProvider>;
};
render(<FormBuilderField {...props} />, { wrapper: Wrapper });
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return { formMethods: formMethods! };
};
describe("FormBuilderField", () => {
it("verify a text type input field", () => {
const { formMethods } = renderComponent({
props: {
field: {
name: "textInput1",
type: "text",
label: "Text Input 1",
placeholder: "Enter text",
},
readOnly: false,
className: "",
},
formDefaultValues: {},
});
expect(component.getFieldInput({ label: "Text Input 1" }).value).toEqual("");
component.fillFieldInput({ label: "Text Input 1", value: "test" });
expectScenario.toHaveFieldValue({
label: "Text Input 1",
identifier: "textInput1",
value: "test",
formMethods,
});
});
});
const component = {
getFieldInput: ({ label }: { label: string }) => screen.getByRole("textbox", { name: label }) as HTMLInputElement,
fillFieldInput: ({ label, value }: { label: string; value: string }) => {
fireEvent.change(component.getFieldInput({ label }), { target: { value } });
},
};
const expectScenario = {
toHaveFieldValue: ({
identifier,
label,
value,
formMethods,
}: {
identifier: string;
label: string;
value: string;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
formMethods: UseFormReturn<any>;
}) => {
expect(component.getFieldInput({ label }).value).toEqual(value);
expect(formMethods.getValues(`responses.${identifier}`)).toEqual(value);
},
};