From e3fbfb7186947375280142a1fcda59165f0b325f Mon Sep 17 00:00:00 2001 From: Joe Manley Date: Fri, 7 Feb 2025 22:54:18 -0800 Subject: [PATCH] Add tests --- .../settings/TemperatureControl.tsx | 2 +- .../__tests__/TemperatureControl.test.tsx | 75 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx diff --git a/webview-ui/src/components/settings/TemperatureControl.tsx b/webview-ui/src/components/settings/TemperatureControl.tsx index 321f25f1b7..ed5bc1b098 100644 --- a/webview-ui/src/components/settings/TemperatureControl.tsx +++ b/webview-ui/src/components/settings/TemperatureControl.tsx @@ -51,7 +51,7 @@ export const TemperatureControl = ({ value, onChange, maxValue = 1 }: Temperatur min="0" max={maxValue} step="0.05" - value={value} + value={value ?? 0} onChange={(e) => { const newValue = parseFloat(e.target.value) onChange(isNaN(newValue) ? undefined : newValue) diff --git a/webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx b/webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx new file mode 100644 index 0000000000..8401f3d5fb --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx @@ -0,0 +1,75 @@ +import { render, screen, fireEvent } from "@testing-library/react" +import { TemperatureControl } from "../TemperatureControl" + +describe("TemperatureControl", () => { + it("renders with default temperature disabled", () => { + const onChange = jest.fn() + render() + + const checkbox = screen.getByRole("checkbox") + expect(checkbox).not.toBeChecked() + expect(screen.queryByRole("slider")).not.toBeInTheDocument() + }) + + it("renders with custom temperature enabled", () => { + const onChange = jest.fn() + render() + + const checkbox = screen.getByRole("checkbox") + expect(checkbox).toBeChecked() + + const slider = screen.getByRole("slider") + expect(slider).toBeInTheDocument() + expect(slider).toHaveValue("0.7") + }) + + it("updates when checkbox is toggled", () => { + const onChange = jest.fn() + render() + + const checkbox = screen.getByRole("checkbox") + + // Uncheck - should clear temperature + fireEvent.click(checkbox) + expect(onChange).toHaveBeenCalledWith(undefined) + + // Check - should restore previous temperature + fireEvent.click(checkbox) + expect(onChange).toHaveBeenCalledWith(0.7) + }) + + it("updates temperature when slider changes", () => { + const onChange = jest.fn() + render() + + const slider = screen.getByRole("slider") + fireEvent.change(slider, { target: { value: "0.8" } }) + + expect(onChange).toHaveBeenCalledWith(0.8) + }) + + it("respects maxValue prop", () => { + const onChange = jest.fn() + render() + + const slider = screen.getByRole("slider") + expect(slider).toHaveAttribute("max", "2") + }) + + it("syncs checkbox state when value prop changes", () => { + const onChange = jest.fn() + const { rerender } = render() + + // Initially checked + const checkbox = screen.getByRole("checkbox") + expect(checkbox).toBeChecked() + + // Update to undefined + rerender() + expect(checkbox).not.toBeChecked() + + // Update back to a value + rerender() + expect(checkbox).toBeChecked() + }) +})