@@ -13,10 +13,16 @@ const EXPECTED_DEFAULT_TYPES = [
13
13
'loras' ,
14
14
'vae' ,
15
15
'controlnet' ,
16
- 'unet ' ,
16
+ 'diffusion_models ' ,
17
17
'upscale_models' ,
18
18
'style_models' ,
19
- 'gligen'
19
+ 'gligen' ,
20
+ 'clip_vision' ,
21
+ 'text_encoders' ,
22
+ 'audio_encoders' ,
23
+ 'model_patches' ,
24
+ 'animatediff_models' ,
25
+ 'animatediff_motion_lora'
20
26
] as const
21
27
22
28
type NodeDefStoreType = ReturnType < typeof useNodeDefStore >
@@ -48,7 +54,13 @@ const MOCK_NODE_NAMES = [
48
54
'UNETLoader' ,
49
55
'UpscaleModelLoader' ,
50
56
'StyleModelLoader' ,
51
- 'GLIGENLoader'
57
+ 'GLIGENLoader' ,
58
+ 'CLIPVisionLoader' ,
59
+ 'CLIPLoader' ,
60
+ 'AudioEncoderLoader' ,
61
+ 'ModelPatchLoader' ,
62
+ 'ADE_LoadAnimateDiffModel' ,
63
+ 'ADE_AnimateDiffLoRALoader'
52
64
] as const
53
65
54
66
const mockNodeDefsByName = Object . fromEntries (
@@ -84,7 +96,7 @@ describe('useModelToNodeStore', () => {
84
96
const modelToNodeStore = useModelToNodeStore ( )
85
97
modelToNodeStore . registerDefaults ( )
86
98
expect ( Object . keys ( modelToNodeStore . modelToNodeMap ) ) . toEqual (
87
- expect . arrayContaining ( [ 'checkpoints' , 'unet ' ] )
99
+ expect . arrayContaining ( [ 'checkpoints' , 'diffusion_models ' ] )
88
100
)
89
101
} )
90
102
} )
@@ -153,9 +165,10 @@ describe('useModelToNodeStore', () => {
153
165
const modelToNodeStore = useModelToNodeStore ( )
154
166
modelToNodeStore . registerDefaults ( )
155
167
156
- const unetProviders = modelToNodeStore . getAllNodeProviders ( 'unet' )
157
- expect ( unetProviders ) . toHaveLength ( 1 )
158
- expect ( unetProviders [ 0 ] . nodeDef . name ) . toBe ( 'UNETLoader' )
168
+ const diffusionModelProviders =
169
+ modelToNodeStore . getAllNodeProviders ( 'diffusion_models' )
170
+ expect ( diffusionModelProviders ) . toHaveLength ( 1 )
171
+ expect ( diffusionModelProviders [ 0 ] . nodeDef . name ) . toBe ( 'UNETLoader' )
159
172
} )
160
173
161
174
it ( 'should return empty array for unregistered model type' , ( ) => {
@@ -173,6 +186,22 @@ describe('useModelToNodeStore', () => {
173
186
} )
174
187
175
188
describe ( 'registerNodeProvider' , ( ) => {
189
+ it ( 'should not register provider when nodeDef is undefined' , ( ) => {
190
+ const modelToNodeStore = useModelToNodeStore ( )
191
+ const providerWithoutNodeDef = new ModelNodeProvider (
192
+ undefined as any ,
193
+ 'custom_key'
194
+ )
195
+
196
+ modelToNodeStore . registerNodeProvider (
197
+ 'custom_type' ,
198
+ providerWithoutNodeDef
199
+ )
200
+
201
+ const retrieved = modelToNodeStore . getNodeProvider ( 'custom_type' )
202
+ expect ( retrieved ) . toBeUndefined ( )
203
+ } )
204
+
176
205
it ( 'should register provider directly' , ( ) => {
177
206
const modelToNodeStore = useModelToNodeStore ( )
178
207
const nodeDefStore = useNodeDefStore ( )
@@ -250,8 +279,20 @@ describe('useModelToNodeStore', () => {
250
279
} ) . not . toThrow ( )
251
280
252
281
const provider = modelToNodeStore . getNodeProvider ( 'test_type' )
253
- // Optional chaining needed since getNodeProvider() can return undefined
254
282
expect ( provider ?. nodeDef ) . toBeUndefined ( )
283
+
284
+ expect ( ( ) => modelToNodeStore . getRegisteredNodeTypes ( ) ) . not . toThrow ( )
285
+ expect ( ( ) =>
286
+ modelToNodeStore . getCategoryForNodeType ( 'NonExistentLoader' )
287
+ ) . not . toThrow ( )
288
+
289
+ // Non-existent nodes are filtered out from registered types
290
+ const types = modelToNodeStore . getRegisteredNodeTypes ( )
291
+ expect ( types . has ( 'NonExistentLoader' ) ) . toBe ( false )
292
+
293
+ expect (
294
+ modelToNodeStore . getCategoryForNodeType ( 'NonExistentLoader' )
295
+ ) . toBeUndefined ( )
255
296
} )
256
297
257
298
it ( 'should allow multiple node classes for same model type' , ( ) => {
0 commit comments