Files
ComfyUI_frontend/src/utils/categoryUtil.test.ts
pythongosssss 6902e38e6a V2 Node Search (+ hidden Node Library changes) (#8987)
## Summary

Redesigned node search with categories

## Changes

- **What**: Adds a v2 search component, leaving the existing
implementation untouched
- It also brings onboard the incomplete node library & preview changes,
disabled and behind a hidden setting
- **Breaking**: Changes the 'default' value of the node search setting
to v2, adding v1 (legacy) as an option

## Screenshots (if applicable)




https://github.com/user-attachments/assets/2ab797df-58f0-48e8-8b20-2a1809e3735f

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8987-V2-Node-Search-hidden-Node-Library-changes-30c6d73d36508160902bcb92553f147c)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Yourz <crazilou@vip.qq.com>
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2026-02-20 01:10:03 -08:00

88 lines
2.7 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
generateCategoryId,
getCategoryIcon,
getProviderBorderStyle,
getProviderIcon
} from './categoryUtil'
describe('getCategoryIcon', () => {
it('returns mapped icon for known category', () => {
expect(getCategoryIcon('all')).toBe('icon-[lucide--list]')
expect(getCategoryIcon('image')).toBe('icon-[lucide--image]')
expect(getCategoryIcon('video')).toBe('icon-[lucide--film]')
})
it('returns folder icon for unknown category', () => {
expect(getCategoryIcon('unknown-category')).toBe('icon-[lucide--folder]')
})
it('is case insensitive', () => {
expect(getCategoryIcon('ALL')).toBe('icon-[lucide--list]')
expect(getCategoryIcon('Image')).toBe('icon-[lucide--image]')
})
})
describe('getProviderIcon', () => {
it('returns icon class for simple provider name', () => {
expect(getProviderIcon('BFL')).toBe('icon-[comfy--bfl]')
expect(getProviderIcon('OpenAI')).toBe('icon-[comfy--openai]')
})
it('converts spaces to hyphens', () => {
expect(getProviderIcon('Stability AI')).toBe('icon-[comfy--stability-ai]')
expect(getProviderIcon('Moonvalley Marey')).toBe(
'icon-[comfy--moonvalley-marey]'
)
})
it('converts to lowercase', () => {
expect(getProviderIcon('GEMINI')).toBe('icon-[comfy--gemini]')
})
})
describe('getProviderBorderStyle', () => {
it('returns solid color for single-color providers', () => {
expect(getProviderBorderStyle('BFL')).toBe('#ffffff')
expect(getProviderBorderStyle('OpenAI')).toBe('#B6B6B6')
expect(getProviderBorderStyle('Bria')).toBe('#B6B6B6')
})
it('returns gradient for dual-color providers', () => {
expect(getProviderBorderStyle('Gemini')).toBe(
'linear-gradient(90deg, #3186FF, #FABC12)'
)
expect(getProviderBorderStyle('Stability AI')).toBe(
'linear-gradient(90deg, #9D39FF, #E80000)'
)
})
it('returns fallback color for unknown providers', () => {
expect(getProviderBorderStyle('Unknown Provider')).toBe('#525252')
})
it('handles provider names with spaces', () => {
expect(getProviderBorderStyle('Stability AI')).toBe(
'linear-gradient(90deg, #9D39FF, #E80000)'
)
expect(getProviderBorderStyle('Moonvalley Marey')).toBe('#DAD9C5')
})
})
describe('generateCategoryId', () => {
it('generates category ID from group and title', () => {
expect(generateCategoryId('Generation', 'Image')).toBe('generation-image')
})
it('converts spaces to hyphens', () => {
expect(generateCategoryId('API Nodes', 'Open Source')).toBe(
'api-nodes-open-source'
)
})
it('converts to lowercase', () => {
expect(generateCategoryId('GENERATION', 'VIDEO')).toBe('generation-video')
})
})