diff --git a/src/platform/workflow/templates/composables/useTemplateWorkflows.test.ts b/src/platform/workflow/templates/composables/useTemplateWorkflows.test.ts index 54c48243e5..6b7af3b2f7 100644 --- a/src/platform/workflow/templates/composables/useTemplateWorkflows.test.ts +++ b/src/platform/workflow/templates/composables/useTemplateWorkflows.test.ts @@ -1,8 +1,18 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' +import { setTemplateBaseline } from '@/platform/telemetry/utils/templateBaselineStore' import { useTemplateWorkflows } from '@/platform/workflow/templates/composables/useTemplateWorkflows' import { useWorkflowTemplatesStore } from '@/platform/workflow/templates/repositories/workflowTemplatesStore' +const hoisted = vi.hoisted(() => ({ + mockActiveWorkflow: { + changeTracker: { activeState: { nodes: [], links: [] } as unknown } + } as + | { changeTracker?: { activeState?: unknown } | undefined } + | null + | undefined +})) + async function flushPromises() { await new Promise((r) => setTimeout(r, 0)) } @@ -51,7 +61,9 @@ vi.mock('@/stores/dialogStore', () => ({ vi.mock('@/platform/workflow/management/stores/workflowStore', () => ({ useWorkflowStore: () => ({ - activeWorkflow: { changeTracker: { activeState: { nodes: [], links: [] } } } + get activeWorkflow() { + return hoisted.mockActiveWorkflow + } }) })) @@ -125,6 +137,11 @@ describe('useTemplateWorkflows', () => { vi.mocked(fetch).mockResolvedValue({ json: vi.fn().mockResolvedValue({ workflow: 'data' }) } as Partial as Response) + + hoisted.mockActiveWorkflow = { + changeTracker: { activeState: { nodes: [], links: [] } as unknown } + } + vi.mocked(setTemplateBaseline).mockClear() }) it('should load templates from store', async () => { @@ -295,6 +312,40 @@ describe('useTemplateWorkflows', () => { expect(fetch).toHaveBeenCalledWith('mock-file-url/templates/template1.json') }) + it('captures the normalized active state as the template baseline', async () => { + const { loadWorkflowTemplate } = useTemplateWorkflows() + mockWorkflowTemplatesStore.isLoaded = true + + const normalizedState = { + nodes: [{ id: 1, type: 'KSampler', widgets_values: [42] }], + links: [] + } + hoisted.mockActiveWorkflow = { + changeTracker: { activeState: normalizedState } + } + + await loadWorkflowTemplate('template1', 'default') + await flushPromises() + + expect(setTemplateBaseline).toHaveBeenCalledWith( + 'template1', + normalizedState + ) + }) + + it('falls back to fetched JSON when no active state is available', async () => { + const { loadWorkflowTemplate } = useTemplateWorkflows() + mockWorkflowTemplatesStore.isLoaded = true + hoisted.mockActiveWorkflow = undefined + + await loadWorkflowTemplate('template1', 'default') + await flushPromises() + + expect(setTemplateBaseline).toHaveBeenCalledWith('template1', { + workflow: 'data' + }) + }) + it('should handle errors when loading templates', async () => { const { loadWorkflowTemplate, loadingTemplateId } = useTemplateWorkflows()