@@ -163,3 +163,80 @@ test('calls onChange with RGB object when resolveThemeTokens is false', async ()
163163
164164 expect ( onChange ) . toHaveBeenCalledWith ( { r : 0 , g : 150 , b : 0 , a : 0.2 } ) ;
165165} ) ;
166+
167+ test ( 'resolves colorSuccess theme token correctly when matching color is selected' , async ( ) => {
168+ const onChange = jest . fn ( ) ;
169+
170+ jest
171+ . spyOn ( require ( '@apache-superset/core/theme' ) , 'useTheme' )
172+ . mockReturnValue ( {
173+ colors : {
174+ colorSuccess : 'rgba(82, 196, 26, 1)' ,
175+ } ,
176+ } ) ;
177+
178+ render (
179+ < ColorPickerControl
180+ { ...defaultProps }
181+ onChange = { onChange }
182+ resolveThemeTokens
183+ presets = { [ { label : 'Theme Tokens' , colors : [ 'colorSuccess' ] } ] }
184+ /> ,
185+ ) ;
186+
187+ const colorPickerTrigger = document . querySelector (
188+ '.ant-color-picker-trigger' ,
189+ ) ;
190+ expect ( colorPickerTrigger ) . toBeInTheDocument ( ) ;
191+ await userEvent . click ( colorPickerTrigger ! ) ;
192+
193+ await waitFor ( ( ) => {
194+ expect (
195+ document . querySelector ( '.ant-color-picker-presets-items' ) ,
196+ ) . toBeInTheDocument ( ) ;
197+ } ) ;
198+
199+ const successPreset = document . querySelector (
200+ '.ant-color-picker-presets-color [style*="82, 196, 26"]' ,
201+ ) as HTMLElement | null ;
202+
203+ expect ( successPreset ) . toBeInTheDocument ( ) ;
204+
205+ await userEvent . click ( successPreset ! ) ;
206+
207+ expect ( onChange ) . toHaveBeenCalledWith ( 'colorSuccess' ) ;
208+ } ) ;
209+
210+ test ( 'handles theme with nested colors object' , ( ) => {
211+ jest
212+ . spyOn ( require ( '@apache-superset/core/theme' ) , 'useTheme' )
213+ . mockReturnValue ( {
214+ colors : { primary : '#007bff' } ,
215+ } ) ;
216+
217+ const { container } = render ( < ColorPickerControl { ...defaultProps } /> ) ;
218+ expect (
219+ container . querySelector ( '.ant-color-picker-trigger' ) ,
220+ ) . toBeInTheDocument ( ) ;
221+ } ) ;
222+
223+ test ( 'handles theme without colors field' , ( ) => {
224+ jest
225+ . spyOn ( require ( '@apache-superset/core/theme' ) , 'useTheme' )
226+ . mockReturnValue ( {
227+ primary : '#007bff' ,
228+ } ) ;
229+
230+ const { container } = render ( < ColorPickerControl { ...defaultProps } /> ) ;
231+ expect (
232+ container . querySelector ( '.ant-color-picker-trigger' ) ,
233+ ) . toBeInTheDocument ( ) ;
234+ } ) ;
235+
236+ test ( 'handles undefined theme gracefully' , ( ) => {
237+ jest
238+ . spyOn ( require ( '@apache-superset/core/theme' ) , 'useTheme' )
239+ . mockReturnValue ( undefined ) ;
240+
241+ expect ( ( ) => render ( < ColorPickerControl { ...defaultProps } /> ) ) . not . toThrow ( ) ;
242+ } ) ;
0 commit comments