@@ -88,8 +88,8 @@ describe('useComboWidget', () => {
8888 } )
8989
9090 it ( 'should create normal combo widget when asset API is disabled' , ( ) => {
91- mockSettingStoreGet . mockReturnValue ( false )
92- vi . mocked ( assetService . isAssetBrowserEligible ) . mockReturnValue ( true )
91+ mockSettingStoreGet . mockReturnValue ( false ) // Asset API disabled
92+ vi . mocked ( assetService . isAssetBrowserEligible ) . mockReturnValue ( true ) // Widget is eligible
9393
9494 const constructor = useComboWidget ( )
9595 const mockWidget = createMockWidget ( )
@@ -101,6 +101,7 @@ describe('useComboWidget', () => {
101101 } )
102102
103103 const widget = constructor ( mockNode , inputSpec )
104+ expect ( widget ) . toBe ( mockWidget )
104105
105106 expect ( mockNode . addWidget ) . toHaveBeenCalledWith (
106107 'combo' ,
@@ -142,15 +143,15 @@ describe('useComboWidget', () => {
142143 expect ( widget ) . toBe ( mockWidget )
143144 } )
144145
145- it ( 'should create asset browser button widget when API enabled and widget eligible' , ( ) => {
146+ it ( 'should create asset browser widget when API enabled and widget eligible' , ( ) => {
146147 mockSettingStoreGet . mockReturnValue ( true )
147148 vi . mocked ( assetService . isAssetBrowserEligible ) . mockReturnValue ( true )
148149
149150 const constructor = useComboWidget ( )
150151 const mockWidget = createMockWidget ( {
151- type : 'button ' ,
152+ type : 'asset ' ,
152153 name : 'ckpt_name' ,
153- value : 'Select model '
154+ value : 'model1.safetensors '
154155 } )
155156 const mockNode = createMockNode ( 'CheckpointLoaderSimple' )
156157 vi . mocked ( mockNode . addWidget ) . mockReturnValue ( mockWidget )
@@ -162,9 +163,9 @@ describe('useComboWidget', () => {
162163 const widget = constructor ( mockNode , inputSpec )
163164
164165 expect ( mockNode . addWidget ) . toHaveBeenCalledWith (
165- 'button ' ,
166+ 'asset ' ,
166167 'ckpt_name' ,
167- 'Select model ' ,
168+ 'model1.safetensors ' ,
168169 expect . any ( Function )
169170 )
170171 expect ( mockSettingStoreGet ) . toHaveBeenCalledWith ( 'Comfy.Assets.UseAssetAPI' )
@@ -175,15 +176,48 @@ describe('useComboWidget', () => {
175176 expect ( widget ) . toBe ( mockWidget )
176177 } )
177178
178- it ( 'should use asset browser button even when inputSpec has a default value but no options ' , ( ) => {
179+ it ( 'should create asset browser widget with options when API enabled and widget eligible ' , ( ) => {
179180 mockSettingStoreGet . mockReturnValue ( true )
180181 vi . mocked ( assetService . isAssetBrowserEligible ) . mockReturnValue ( true )
181182
182183 const constructor = useComboWidget ( )
183184 const mockWidget = createMockWidget ( {
184- type : 'button ' ,
185+ type : 'asset ' ,
185186 name : 'ckpt_name' ,
186- value : 'Select model'
187+ value : 'model1.safetensors'
188+ } )
189+ const mockNode = createMockNode ( 'CheckpointLoaderSimple' )
190+ vi . mocked ( mockNode . addWidget ) . mockReturnValue ( mockWidget )
191+ const inputSpec = createMockInputSpec ( {
192+ name : 'ckpt_name' ,
193+ options : [ 'model1.safetensors' , 'model2.safetensors' ]
194+ } )
195+
196+ const widget = constructor ( mockNode , inputSpec )
197+
198+ expect ( mockNode . addWidget ) . toHaveBeenCalledWith (
199+ 'asset' ,
200+ 'ckpt_name' ,
201+ 'model1.safetensors' ,
202+ expect . any ( Function )
203+ )
204+ expect ( mockSettingStoreGet ) . toHaveBeenCalledWith ( 'Comfy.Assets.UseAssetAPI' )
205+ expect ( vi . mocked ( assetService . isAssetBrowserEligible ) ) . toHaveBeenCalledWith (
206+ 'ckpt_name' ,
207+ 'CheckpointLoaderSimple'
208+ )
209+ expect ( widget ) . toBe ( mockWidget )
210+ } )
211+
212+ it ( 'should use asset browser widget even when inputSpec has a default value but no options' , ( ) => {
213+ mockSettingStoreGet . mockReturnValue ( true )
214+ vi . mocked ( assetService . isAssetBrowserEligible ) . mockReturnValue ( true )
215+
216+ const constructor = useComboWidget ( )
217+ const mockWidget = createMockWidget ( {
218+ type : 'asset' ,
219+ name : 'ckpt_name' ,
220+ value : 'fallback.safetensors'
187221 } )
188222 const mockNode = createMockNode ( 'CheckpointLoaderSimple' )
189223 vi . mocked ( mockNode . addWidget ) . mockReturnValue ( mockWidget )
@@ -196,9 +230,42 @@ describe('useComboWidget', () => {
196230 const widget = constructor ( mockNode , inputSpec )
197231
198232 expect ( mockNode . addWidget ) . toHaveBeenCalledWith (
199- 'button' ,
233+ 'asset' ,
234+ 'ckpt_name' ,
235+ 'fallback.safetensors' ,
236+ expect . any ( Function )
237+ )
238+ expect ( mockSettingStoreGet ) . toHaveBeenCalledWith ( 'Comfy.Assets.UseAssetAPI' )
239+ expect ( vi . mocked ( assetService . isAssetBrowserEligible ) ) . toHaveBeenCalledWith (
240+ 'ckpt_name' ,
241+ 'CheckpointLoaderSimple'
242+ )
243+ expect ( widget ) . toBe ( mockWidget )
244+ } )
245+
246+ it ( 'should show Select model when asset widget has undefined current value' , ( ) => {
247+ mockSettingStoreGet . mockReturnValue ( true )
248+ vi . mocked ( assetService . isAssetBrowserEligible ) . mockReturnValue ( true )
249+
250+ const constructor = useComboWidget ( )
251+ const mockWidget = createMockWidget ( {
252+ type : 'asset' ,
253+ name : 'ckpt_name' ,
254+ value : 'Select model'
255+ } )
256+ const mockNode = createMockNode ( 'CheckpointLoaderSimple' )
257+ vi . mocked ( mockNode . addWidget ) . mockReturnValue ( mockWidget )
258+ const inputSpec = createMockInputSpec ( {
259+ name : 'ckpt_name'
260+ // Note: no default, no options, not remote - getDefaultValue returns undefined
261+ } )
262+
263+ const widget = constructor ( mockNode , inputSpec )
264+
265+ expect ( mockNode . addWidget ) . toHaveBeenCalledWith (
266+ 'asset' ,
200267 'ckpt_name' ,
201- 'Select model' ,
268+ 'Select model' , // Should fallback to this instead of undefined
202269 expect . any ( Function )
203270 )
204271 expect ( mockSettingStoreGet ) . toHaveBeenCalledWith ( 'Comfy.Assets.UseAssetAPI' )
0 commit comments