import { NodeSearchService } from '@/services/nodeSearchService' import { ComfyNodeDefImpl } from '@/stores/nodeDefStore' import { plainToClass } from 'class-transformer' const EXAMPLE_NODE_DEFS: ComfyNodeDefImpl[] = [ { input: { required: { ckpt_name: [['model1.safetensors', 'model2.ckpt'], {}] } }, output: ['MODEL', 'CLIP', 'VAE'], output_is_list: [false, false, false], output_name: ['MODEL', 'CLIP', 'VAE'], name: 'CheckpointLoaderSimple', display_name: 'Load Checkpoint', description: '', python_module: 'nodes', category: 'loaders', output_node: false }, { input: { required: { samples: ['LATENT'], batch_index: [ 'INT', { default: 0, min: 0, max: 63 } ], length: [ 'INT', { default: 1, min: 1, max: 64 } ] } }, output: ['LATENT'], output_is_list: [false], output_name: ['LATENT'], name: 'LatentFromBatch', display_name: 'Latent From Batch', description: '', python_module: 'nodes', category: 'latent/batch', output_node: false } ].map((nodeDef) => plainToClass(ComfyNodeDefImpl, nodeDef)) describe('nodeSearchService', () => { it('searches with input filter', () => { const service = new NodeSearchService(EXAMPLE_NODE_DEFS) const inputFilter = service.getFilterById('input') expect(service.searchNode('L', [[inputFilter, 'LATENT']])).toHaveLength(1) // Wildcard should match all. expect(service.searchNode('L', [[inputFilter, '*']])).toHaveLength(2) expect(service.searchNode('L')).toHaveLength(2) }) })