1+ import React from "react"
12// npx jest src/components/settings/__tests__/ApiOptions.test.ts
23
34import { render , screen , fireEvent } from "@testing-library/react"
@@ -15,13 +16,23 @@ jest.mock("@vscode/webview-ui-toolkit/react", () => ({
1516 VSCodeTextField : ( { children, value, onBlur } : any ) => (
1617 < div >
1718 { children }
18- < input type = "text" value = { value } onChange = { onBlur } />
19+ < input type = "text" value = { value } onChange = { onBlur || ( ( ) => { } ) } />
1920 </ div >
2021 ) ,
2122 VSCodeLink : ( { children, href } : any ) => < a href = { href } > { children } </ a > ,
2223 VSCodeRadio : ( { value, checked } : any ) => < input type = "radio" value = { value } checked = { checked } /> ,
2324 VSCodeRadioGroup : ( { children } : any ) => < div > { children } </ div > ,
2425 VSCodeButton : ( { children } : any ) => < div > { children } </ div > ,
26+ VSCodeCheckbox : ( { children, checked, onChange, ...props } : any ) => (
27+ < div { ...props } >
28+ < input
29+ type = "checkbox"
30+ checked = { checked }
31+ onChange = { ( e ) => onChange && onChange ( { target : { checked : e . target . checked } } ) }
32+ />
33+ { children }
34+ </ div >
35+ ) ,
2536} ) )
2637
2738// Mock other components
@@ -42,15 +53,32 @@ jest.mock("vscrui", () => ({
4253// Mock @shadcn /ui components
4354jest . mock ( "@/components/ui" , ( ) => ( {
4455 Select : ( { children, value, onValueChange } : any ) => (
45- < div className = "select-mock" >
46- < select value = { value } onChange = { ( e ) => onValueChange && onValueChange ( e . target . value ) } >
47- { children }
48- </ select >
56+ < div className = "select-mock" data-testid = "shadcn-select-root" >
57+ { React . Children . map ( children , ( child ) => {
58+ if ( React . isValidElement ( child ) ) {
59+ // Pass down onValueChange and value to direct children
60+ return React . cloneElement ( child as React . ReactElement < any > , {
61+ __rootValue : value ,
62+ __onRootValueChange : onValueChange ,
63+ } )
64+ }
65+ return child
66+ } ) }
4967 </ div >
5068 ) ,
51- SelectTrigger : ( { children } : any ) => < div className = "select-trigger-mock" > { children } </ div > ,
52- SelectValue : ( { children } : any ) => < div className = "select-value-mock" > { children } </ div > ,
53- SelectContent : ( { children } : any ) => < div className = "select-content-mock" > { children } </ div > ,
69+ SelectTrigger : ( { children } : any ) => < button className = "select-trigger-mock" > { children } </ button > ,
70+ SelectValue : ( { children, placeholder, __rootValue } : any ) => (
71+ < span className = "select-value-mock" > { __rootValue || placeholder || children } </ span >
72+ ) ,
73+ SelectContent : ( { children, __rootValue, __onRootValueChange } : any ) => (
74+ < select
75+ className = "select-content-mock"
76+ value = { __rootValue }
77+ onChange = { ( e ) => __onRootValueChange && __onRootValueChange ( e . target . value ) }
78+ data-testid = "shadcn-select-content" >
79+ { children }
80+ </ select >
81+ ) ,
5482 SelectItem : ( { children, value } : any ) => (
5583 < option value = { value } className = "select-item-mock" >
5684 { children }
@@ -66,14 +94,15 @@ jest.mock("@/components/ui", () => ({
6694 Command : ( { children } : any ) => < div className = "command-mock" > { children } </ div > ,
6795 CommandEmpty : ( { children } : any ) => < div className = "command-empty-mock" > { children } </ div > ,
6896 CommandGroup : ( { children } : any ) => < div className = "command-group-mock" > { children } </ div > ,
69- CommandInput : ( { value, onValueChange, placeholder, className, _ref } : any ) => (
97+ CommandInput : React . forwardRef ( ( { value, onValueChange, placeholder, className } : any , ref : any ) => (
7098 < input
99+ ref = { ref }
71100 value = { value }
72101 onChange = { ( e ) => onValueChange && onValueChange ( e . target . value ) }
73102 placeholder = { placeholder }
74103 className = { className }
75104 />
76- ) ,
105+ ) ) ,
77106 CommandItem : ( { children, value, onSelect } : any ) => (
78107 < div className = "command-item-mock" onClick = { ( ) => onSelect && onSelect ( value ) } >
79108 { children }
@@ -167,6 +196,7 @@ jest.mock("../ReasoningEffort", () => ({
167196 ReasoningEffort : ( { apiConfiguration, setApiConfigurationField, value } : any ) => (
168197 < div data-testid = "reasoning-effort-select" >
169198 < select
199+ role = "combobox"
170200 value = { value ?? apiConfiguration . openAiCustomModelInfo ?. reasoningEffort }
171201 onChange = { ( e ) => setApiConfigurationField ( "reasoningEffort" , e . target . value ) } >
172202 < option value = "auto" > Auto</ option >
0 commit comments