Compare commits

..

1 Commits

Author SHA1 Message Date
CodeRabbit Fixer
feadb3b6cb fix: Add component-level test for DomWidget disabled state logic (#9290)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:23:05 +01:00
3 changed files with 60 additions and 71 deletions

View File

@@ -113,4 +113,62 @@ describe('DomWidget disabled style', () => {
expect(root.style.pointerEvents).toBe('none')
expect(root.style.opacity).toBe('0.5')
})
it('uses enabled style when promoted override widget is not computedDisabled', async () => {
const widgetState = createWidgetState(false)
const wrapper = mount(DomWidget, {
props: {
widgetState
}
})
widgetState.zIndex = 3
await wrapper.vm.$nextTick()
const root = wrapper.get('.dom-widget').element as HTMLElement
expect(root.style.pointerEvents).toBe('auto')
expect(root.style.opacity).toBe('1')
})
it('falls back to widget.computedDisabled when no position override exists', async () => {
const domWidgetStore = useDomWidgetStore()
const node = createMockLGraphNode({
id: 3,
constructor: {
nodeData: {}
}
})
const widget = {
id: 'dom-widget-no-override',
name: 'test_widget',
type: 'custom',
value: '',
options: {},
node,
computedDisabled: true
} as unknown as BaseDOMWidget<object | string>
domWidgetStore.registerWidget(widget)
const state = domWidgetStore.widgetStates.get(widget.id)
if (!state) throw new Error('Expected registered DomWidgetState')
state.zIndex = 2
state.size = [100, 40]
const widgetState = reactive(state)
const wrapper = mount(DomWidget, {
props: {
widgetState
}
})
widgetState.zIndex = 3
await wrapper.vm.$nextTick()
const root = wrapper.get('.dom-widget').element as HTMLElement
expect(root.style.pointerEvents).toBe('none')
expect(root.style.opacity).toBe('0.5')
})
})

View File

@@ -1,62 +0,0 @@
import { describe, expect, it, vi } from 'vitest'
import type { CanvasPointerEvent } from '@/lib/litegraph/src/litegraph'
import { LGraphCanvas } from '@/lib/litegraph/src/litegraph'
import { ChangeTracker } from './changeTracker'
vi.mock('@/platform/workflow/management/stores/workflowStore', () => ({
useWorkflowStore: vi.fn(() => ({
activeWorkflow: null
})),
ComfyWorkflow: vi.fn()
}))
vi.mock('./api', () => ({
api: {
addEventListener: vi.fn(),
apiURL: vi.fn((path: string) => path)
}
}))
vi.mock('./app', () => ({
app: {
ui: { autoQueueEnabled: false, autoQueueMode: 'instant' },
canvas: { ds: { scale: 1, offset: [0, 0] } },
constructor: { maskeditor_is_opended: undefined }
},
ComfyApp: vi.fn()
}))
describe('ChangeTracker.init', () => {
it('forwards multiline argument to original prompt', () => {
const originalPrompt = vi.fn()
LGraphCanvas.prototype.prompt = originalPrompt
ChangeTracker.init()
const wrappedPrompt = LGraphCanvas.prototype.prompt
expect(wrappedPrompt).not.toBe(originalPrompt)
const mockCallback = vi.fn()
const mockEvent = {} as CanvasPointerEvent
const multilineValue = true
wrappedPrompt.call(
{} as LGraphCanvas,
'Title',
'value',
mockCallback,
mockEvent,
multilineValue
)
expect(originalPrompt).toHaveBeenCalledWith(
'Title',
'value',
expect.any(Function),
mockEvent,
true
)
})
})

View File

@@ -307,21 +307,14 @@ export class ChangeTracker {
title: string,
value: string | number,
callback: (v: string) => void,
event: CanvasPointerEvent,
multiline?: boolean
event: CanvasPointerEvent
) {
const extendedCallback = (v: string) => {
callback(v)
checkState()
}
logger.debug('checkState on prompt')
return prompt.apply(this, [
title,
value,
extendedCallback,
event,
multiline
])
return prompt.apply(this, [title, value, extendedCallback, event])
}
// Handle litegraph context menu for COMBO widgets