| import { SharedWorkflowRepository } from '@n8n/db'; | |
| import { WorkflowRepository } from '@n8n/db'; | |
| import { Container } from '@n8n/di'; | |
| import { mock } from 'jest-mock-extended'; | |
| import { ActiveWorkflowManager } from '@/active-workflow-manager'; | |
| import { MessageEventBus } from '@/eventbus/message-event-bus/message-event-bus'; | |
| import { Telemetry } from '@/telemetry'; | |
| import { WorkflowFinderService } from '@/workflows/workflow-finder.service'; | |
| import { WorkflowService } from '@/workflows/workflow.service'; | |
| import { mockInstance } from '../../shared/mocking'; | |
| import { createOwner } from '../shared/db/users'; | |
| import { createWorkflow } from '../shared/db/workflows'; | |
| import * as testDb from '../shared/test-db'; | |
| let workflowService: WorkflowService; | |
| const activeWorkflowManager = mockInstance(ActiveWorkflowManager); | |
| mockInstance(MessageEventBus); | |
| mockInstance(Telemetry); | |
| beforeAll(async () => { | |
| await testDb.init(); | |
| workflowService = new WorkflowService( | |
| mock(), | |
| Container.get(SharedWorkflowRepository), | |
| Container.get(WorkflowRepository), | |
| mock(), | |
| mock(), | |
| mock(), | |
| mock(), | |
| mock(), | |
| mock(), | |
| activeWorkflowManager, | |
| mock(), | |
| mock(), | |
| mock(), | |
| mock(), | |
| mock(), | |
| mock(), | |
| mock(), | |
| Container.get(WorkflowFinderService), | |
| ); | |
| }); | |
| afterEach(async () => { | |
| await testDb.truncate(['WorkflowEntity']); | |
| jest.restoreAllMocks(); | |
| }); | |
| describe('update()', () => { | |
| test('should remove and re-add to active workflows on `active: true` payload', async () => { | |
| const owner = await createOwner(); | |
| const workflow = await createWorkflow({ active: true }, owner); | |
| const removeSpy = jest.spyOn(activeWorkflowManager, 'remove'); | |
| const addSpy = jest.spyOn(activeWorkflowManager, 'add'); | |
| await workflowService.update(owner, workflow, workflow.id); | |
| expect(removeSpy).toHaveBeenCalledTimes(1); | |
| const [removedWorkflowId] = removeSpy.mock.calls[0]; | |
| expect(removedWorkflowId).toBe(workflow.id); | |
| expect(addSpy).toHaveBeenCalledTimes(1); | |
| const [addedWorkflowId, activationMode] = addSpy.mock.calls[0]; | |
| expect(addedWorkflowId).toBe(workflow.id); | |
| expect(activationMode).toBe('update'); | |
| }); | |
| test('should remove from active workflows on `active: false` payload', async () => { | |
| const owner = await createOwner(); | |
| const workflow = await createWorkflow({ active: true }, owner); | |
| const removeSpy = jest.spyOn(activeWorkflowManager, 'remove'); | |
| const addSpy = jest.spyOn(activeWorkflowManager, 'add'); | |
| workflow.active = false; | |
| await workflowService.update(owner, workflow, workflow.id); | |
| expect(removeSpy).toHaveBeenCalledTimes(1); | |
| const [removedWorkflowId] = removeSpy.mock.calls[0]; | |
| expect(removedWorkflowId).toBe(workflow.id); | |
| expect(addSpy).not.toHaveBeenCalled(); | |
| }); | |
| }); | |