import { render, screen } from "@solidjs/testing-library"; import { JSXElement } from "solid-js"; import { describe, it, expect } from "vitest"; import { SubmitButton } from "../../../../src/ts/components/ui/form/SubmitButton"; type FormState = { canSubmit: boolean; isSubmitting: boolean; isValid: boolean; isDirty: boolean; }; function makeForm(state: Partial = {}) { const fullState: FormState = { canSubmit: true, isSubmitting: false, isValid: true, isDirty: true, ...state, }; return { Subscribe: (props: { selector: (state: FormState) => FormState; children: (state: () => FormState) => JSXElement; }) => props.children(() => props.selector(fullState)), }; } describe("SubmitButton", () => { it("renders enabled when form is dirty, valid, and can submit", () => { render(() => ); expect(screen.getByRole("button", { name: "Save" })).not.toBeDisabled(); }); it("renders as submit type", () => { render(() => ); expect(screen.getByRole("button")).toHaveAttribute("type", "submit"); }); it("disables when form is not dirty", () => { render(() => ( )); expect(screen.getByRole("button")).toBeDisabled(); }); it("disables when form cannot submit", () => { render(() => ( )); expect(screen.getByRole("button")).toBeDisabled(); }); it("disables when form is submitting", () => { render(() => ( )); expect(screen.getByRole("button")).toBeDisabled(); }); it("disables when form is not valid", () => { render(() => ( )); expect(screen.getByRole("button")).toBeDisabled(); }); it("disables when disabled prop is true even if form is ready", () => { render(() => ); expect(screen.getByRole("button")).toBeDisabled(); }); });