mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-21 23:34:31 +00:00
## 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>
88 lines
2.7 KiB
TypeScript
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')
|
|
})
|
|
})
|