Files
calendar/apps/web/modules/form-builder/components/FormBuilderField.test.tsx
Eunjae LeeGitHubClaude Opus 4.5Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
81e4241f85 refactor: apply biome formatting to apps/web (#27692)
* refactor: apply biome formatting to apps/web (batch 1)

Formats apps/web non-modules directories:
- apps/web/app
- apps/web/lib
- apps/web/pages
- apps/web/styles
- apps/web/server
- apps/web/test
- Root-level .ts and .mjs files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: apply biome formatting to apps/web/modules (batch 2)

Formats smaller apps/web/modules directories:
- onboarding, data-table, users, apps, auth
- integration-attribute-sync, shell, availability
- feature-flags, team, webhooks, getting-started
- feature-opt-in, troubleshooter, schedules, notifications
- signup-view.tsx

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: apply biome formatting to apps/web/modules (batch 3)

Formats medium apps/web/modules directories:
- bookings
- event-types
- insights
- embed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: apply biome formatting to apps/web/modules/ee (batch 4)

Formats apps/web/modules/ee directory.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: apply biome formatting to apps/web (batch 5)

Formats remaining apps/web directories:
- apps/web/modules/settings
- apps/web/modules/booking-audit
- apps/web/playwright

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: apply biome formatting to apps/web/components (batch 6)

Formats remaining apps/web/components files.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: apply biome formatting to new apps/web files from main

Formats newly added/modified files from main merge:
- WorkflowStepContainer.tsx (resolved merge conflicts)
- Newly moved files (blocklist, form-builder, schedules, etc.)
- Other files modified in main

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: apply biome formatting to new apps/web files from main

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-02-10 23:25:24 +05:30

86 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);
},
};