mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-05-01 19:51:54 +00:00
[feat] Add BadgedNumberInput Vue widget with state indicators
- Create BadgedNumberInput.vue component using PrimeVue InputNumber - Add badges for random, lock, increment, decrement states - Implement useBadgedNumberInput composable with proper DOM widget integration - Register BADGED_NUMBER widget type in widgets registry - Include comprehensive unit tests for widget functionality - Widget spans node width with padding and rounded corners as specified
This commit is contained in:
73
tests-ui/tests/composables/useBadgedNumberInput.test.ts
Normal file
73
tests-ui/tests/composables/useBadgedNumberInput.test.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import type { LGraphNode } from '@comfyorg/litegraph'
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
|
||||
import { useBadgedNumberInput } from '@/composables/widgets/useBadgedNumberInput'
|
||||
import type { InputSpec } from '@/schemas/nodeDef/nodeDefSchemaV2'
|
||||
|
||||
// Mock dependencies
|
||||
vi.mock('@/scripts/domWidget', () => ({
|
||||
ComponentWidgetImpl: vi.fn().mockImplementation((config) => ({
|
||||
...config,
|
||||
value: config.options.getValue(),
|
||||
setValue: config.options.setValue,
|
||||
options: config.options,
|
||||
props: config.props
|
||||
})),
|
||||
addWidget: vi.fn()
|
||||
}))
|
||||
|
||||
describe('useBadgedNumberInput', () => {
|
||||
const createMockNode = (): LGraphNode =>
|
||||
({
|
||||
id: 1,
|
||||
title: 'Test Node',
|
||||
widgets: [],
|
||||
addWidget: vi.fn()
|
||||
}) as any
|
||||
|
||||
const createInputSpec = (overrides: Partial<InputSpec> = {}): InputSpec => ({
|
||||
name: 'test_input',
|
||||
type: 'number',
|
||||
...overrides
|
||||
})
|
||||
|
||||
it('creates widget constructor with default options', () => {
|
||||
const constructor = useBadgedNumberInput()
|
||||
expect(constructor).toBeDefined()
|
||||
expect(typeof constructor).toBe('function')
|
||||
})
|
||||
|
||||
it('creates widget with default options', () => {
|
||||
const constructor = useBadgedNumberInput()
|
||||
const node = createMockNode()
|
||||
const inputSpec = createInputSpec()
|
||||
|
||||
const widget = constructor(node, inputSpec)
|
||||
|
||||
expect(widget).toBeDefined()
|
||||
expect(widget.name).toBe(inputSpec.name)
|
||||
})
|
||||
|
||||
it('creates widget with custom badge state', () => {
|
||||
const constructor = useBadgedNumberInput({ badgeState: 'random' })
|
||||
const node = createMockNode()
|
||||
const inputSpec = createInputSpec()
|
||||
|
||||
const widget = constructor(node, inputSpec)
|
||||
|
||||
expect(widget).toBeDefined()
|
||||
// Widget is created with the props, but accessing them requires the mock structure
|
||||
expect((widget as any).props.badgeState).toBe('random')
|
||||
})
|
||||
|
||||
it('creates widget with disabled state', () => {
|
||||
const constructor = useBadgedNumberInput({ disabled: true })
|
||||
const node = createMockNode()
|
||||
const inputSpec = createInputSpec()
|
||||
|
||||
const widget = constructor(node, inputSpec)
|
||||
|
||||
expect(widget).toBeDefined()
|
||||
expect((widget as any).props.disabled).toBe(true)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user