diff --git a/src/components/rightSidePanel/parameters/TabSubgraphInputs.test.ts b/src/components/rightSidePanel/parameters/TabSubgraphInputs.test.ts index 3194ed775a..114d939b06 100644 --- a/src/components/rightSidePanel/parameters/TabSubgraphInputs.test.ts +++ b/src/components/rightSidePanel/parameters/TabSubgraphInputs.test.ts @@ -1,5 +1,5 @@ import { createTestingPinia } from '@pinia/testing' -import { render } from '@testing-library/vue' +import { render, waitFor } from '@testing-library/vue' import { fromAny } from '@total-typescript/shoehorn' import { setActivePinia } from 'pinia' import { beforeEach, describe, expect, it, vi } from 'vitest' @@ -45,6 +45,11 @@ vi.mock('@atlaskit/pragmatic-drag-and-drop/element/adapter', () => ({ dropTargetForElements: mockDropTargetForElements })) +const mockSetDirty = vi.hoisted(() => vi.fn()) +vi.mock('@/renderer/core/canvas/canvasStore', () => ({ + useCanvasStore: () => ({ canvas: { setDirty: mockSetDirty } }) +})) + vi.mock( '@/renderer/extensions/vueNodes/widgets/components/form/FormSearchInput.vue', () => ({ default: { template: '
' } }) @@ -170,4 +175,37 @@ describe('TabSubgraphInputs drag-and-drop', () => { expect(promotionStore.movePromotion).not.toHaveBeenCalled() }) + + it('ignores drop when source index is not a number', () => { + renderComponent() + + const promotionStore = usePromotionStore() + vi.spyOn(promotionStore, 'movePromotion') + + capturedDropHandlers[1]({ source: { data: { index: 'invalid' } } }) + + expect(promotionStore.movePromotion).not.toHaveBeenCalled() + }) + + it('calls canvas setDirty after a successful drop', () => { + const node = createMockNode() + renderComponent(node) + + capturedDropHandlers[1]({ source: { data: { index: 0 } } }) + + expect(mockSetDirty).toHaveBeenCalledWith(true, true) + }) + + it('re-registers drag handlers when promotionEntries changes', async () => { + const node = createMockNode() + renderComponent(node) + mockDraggable.mockClear() + + const promotionStore = usePromotionStore() + promotionStore.setPromotions('graph-1', '1', [ + fromAny({ sourceNodeId: 'node-1', widgetName: 'seed' }) + ]) + + await waitFor(() => expect(mockDraggable).toHaveBeenCalledTimes(2)) + }) })