Skip to content

Commit e3fbfb7

Browse files
committed
Add tests
1 parent dd82148 commit e3fbfb7

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

webview-ui/src/components/settings/TemperatureControl.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export const TemperatureControl = ({ value, onChange, maxValue = 1 }: Temperatur
5151
min="0"
5252
max={maxValue}
5353
step="0.05"
54-
value={value}
54+
value={value ?? 0}
5555
onChange={(e) => {
5656
const newValue = parseFloat(e.target.value)
5757
onChange(isNaN(newValue) ? undefined : newValue)
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { render, screen, fireEvent } from "@testing-library/react"
2+
import { TemperatureControl } from "../TemperatureControl"
3+
4+
describe("TemperatureControl", () => {
5+
it("renders with default temperature disabled", () => {
6+
const onChange = jest.fn()
7+
render(<TemperatureControl value={undefined} onChange={onChange} />)
8+
9+
const checkbox = screen.getByRole("checkbox")
10+
expect(checkbox).not.toBeChecked()
11+
expect(screen.queryByRole("slider")).not.toBeInTheDocument()
12+
})
13+
14+
it("renders with custom temperature enabled", () => {
15+
const onChange = jest.fn()
16+
render(<TemperatureControl value={0.7} onChange={onChange} />)
17+
18+
const checkbox = screen.getByRole("checkbox")
19+
expect(checkbox).toBeChecked()
20+
21+
const slider = screen.getByRole("slider")
22+
expect(slider).toBeInTheDocument()
23+
expect(slider).toHaveValue("0.7")
24+
})
25+
26+
it("updates when checkbox is toggled", () => {
27+
const onChange = jest.fn()
28+
render(<TemperatureControl value={0.7} onChange={onChange} />)
29+
30+
const checkbox = screen.getByRole("checkbox")
31+
32+
// Uncheck - should clear temperature
33+
fireEvent.click(checkbox)
34+
expect(onChange).toHaveBeenCalledWith(undefined)
35+
36+
// Check - should restore previous temperature
37+
fireEvent.click(checkbox)
38+
expect(onChange).toHaveBeenCalledWith(0.7)
39+
})
40+
41+
it("updates temperature when slider changes", () => {
42+
const onChange = jest.fn()
43+
render(<TemperatureControl value={0.7} onChange={onChange} />)
44+
45+
const slider = screen.getByRole("slider")
46+
fireEvent.change(slider, { target: { value: "0.8" } })
47+
48+
expect(onChange).toHaveBeenCalledWith(0.8)
49+
})
50+
51+
it("respects maxValue prop", () => {
52+
const onChange = jest.fn()
53+
render(<TemperatureControl value={1.5} onChange={onChange} maxValue={2} />)
54+
55+
const slider = screen.getByRole("slider")
56+
expect(slider).toHaveAttribute("max", "2")
57+
})
58+
59+
it("syncs checkbox state when value prop changes", () => {
60+
const onChange = jest.fn()
61+
const { rerender } = render(<TemperatureControl value={0.7} onChange={onChange} />)
62+
63+
// Initially checked
64+
const checkbox = screen.getByRole("checkbox")
65+
expect(checkbox).toBeChecked()
66+
67+
// Update to undefined
68+
rerender(<TemperatureControl value={undefined} onChange={onChange} />)
69+
expect(checkbox).not.toBeChecked()
70+
71+
// Update back to a value
72+
rerender(<TemperatureControl value={0.5} onChange={onChange} />)
73+
expect(checkbox).toBeChecked()
74+
})
75+
})

0 commit comments

Comments
 (0)