/* Copyright 2026 Marimo. All rights reserved. */ import { fireEvent, render, screen } from "@testing-library/react"; import { useForm, useWatch } from "react-hook-form"; import { describe, expect, test } from "vitest"; import { SetupMocks } from "@/__mocks__/common"; import { Form } from "@/components/ui/form"; import { SliderField } from "../components/form-fields"; SetupMocks.resizeObserver(); function Harness({ label = "Opacity" }: { label?: string }) { const form = useForm({ defaultValues: { xAxis: { width: 400 } } }); const value = useWatch({ control: form.control, name: "xAxis.width" }); return (
{value} ); } describe("SliderField", () => { test("names the chart-form thumb and preserves keyboard value updates", () => { const { rerender } = render(); fireEvent.keyDown(screen.getByRole("slider", { name: "Opacity" }), { key: "ArrowRight", }); expect(screen.getByLabelText("Current opacity")).toHaveTextContent("410"); rerender(); expect( screen.getByRole("slider", { name: "Updated opacity" }), ).toHaveAttribute("aria-valuenow", "410"); }); test("independently associates repeated chart form instances", () => { render( <> , ); const thumbs = screen.getAllByRole("slider", { name: "Opacity" }); expect(thumbs).toHaveLength(2); expect(thumbs[0].getAttribute("aria-labelledby")).not.toBe( thumbs[1].getAttribute("aria-labelledby"), ); }); });