mirror of
https://github.com/n8n-io/n8n.git
synced 2026-05-27 06:45:26 +02:00
Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: yehorkardash <yehor.kardash@n8n.io> Co-authored-by: Daria <daria.staferova@n8n.io> Co-authored-by: Svetoslav Dekov <svetoslav.dekov@n8n.io> Co-authored-by: Nikhil Kuriakose <nikhilkuria@gmail.com> Co-authored-by: Charlie Kolb <charlie@n8n.io>
129 lines
3.4 KiB
TypeScript
129 lines
3.4 KiB
TypeScript
import {
|
|
mockInstance,
|
|
testDb,
|
|
createWorkflowWithTriggerAndHistory,
|
|
createManyActiveWorkflows,
|
|
getAllWorkflows,
|
|
} from '@n8n/backend-test-utils';
|
|
import { WorkflowRepository } from '@n8n/db';
|
|
import { Container } from '@n8n/di';
|
|
|
|
import { UpdateWorkflowCommand } from '@/commands/update/workflow';
|
|
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
|
|
import { setupTestCommand } from '@test-integration/utils/test-command';
|
|
|
|
mockInstance(LoadNodesAndCredentials);
|
|
const command = setupTestCommand(UpdateWorkflowCommand);
|
|
|
|
beforeEach(async () => {
|
|
await testDb.truncate(['WorkflowEntity', 'WorkflowHistory']);
|
|
});
|
|
|
|
test('update:workflow does not publish when trying to publish all workflows', async () => {
|
|
//
|
|
// ARRANGE
|
|
//
|
|
const workflows = await Promise.all([
|
|
createWorkflowWithTriggerAndHistory({}),
|
|
createWorkflowWithTriggerAndHistory({}),
|
|
]);
|
|
|
|
//
|
|
// ACT
|
|
//
|
|
await command.run(['--all', '--active=true']);
|
|
|
|
//
|
|
// ASSERT
|
|
//
|
|
// Verify workflows were NOT published (publishing all is no longer supported)
|
|
const workflowRepo = Container.get(WorkflowRepository);
|
|
const workflow1 = await workflowRepo.findOneBy({ id: workflows[0].id });
|
|
const workflow2 = await workflowRepo.findOneBy({ id: workflows[1].id });
|
|
|
|
expect(workflow1?.activeVersionId).toBeNull();
|
|
expect(workflow2?.activeVersionId).toBeNull();
|
|
});
|
|
|
|
test('update:workflow can unpublish all workflows', async () => {
|
|
//
|
|
// ARRANGE
|
|
//
|
|
const workflows = await createManyActiveWorkflows(2);
|
|
|
|
// Verify activeVersionId is set
|
|
const workflowRepo = Container.get(WorkflowRepository);
|
|
let workflow1 = await workflowRepo.findOneBy({ id: workflows[0].id });
|
|
let workflow2 = await workflowRepo.findOneBy({ id: workflows[1].id });
|
|
expect(workflow1?.activeVersionId).toBe(workflows[0].versionId);
|
|
expect(workflow2?.activeVersionId).toBe(workflows[1].versionId);
|
|
|
|
//
|
|
// ACT
|
|
//
|
|
await command.run(['--all', '--active=false']);
|
|
|
|
//
|
|
// ASSERT
|
|
//
|
|
// Verify activeVersionId is cleared
|
|
workflow1 = await workflowRepo.findOne({
|
|
where: { id: workflows[0].id },
|
|
relations: ['activeVersion'],
|
|
});
|
|
workflow2 = await workflowRepo.findOne({
|
|
where: { id: workflows[1].id },
|
|
relations: ['activeVersion'],
|
|
});
|
|
|
|
expect(workflow1?.activeVersionId).toBeNull();
|
|
expect(workflow1?.activeVersion).toBeNull();
|
|
expect(workflow2?.activeVersionId).toBeNull();
|
|
expect(workflow2?.activeVersion).toBeNull();
|
|
});
|
|
|
|
test('update:workflow publishes current version when --active=true (backwards compatibility)', async () => {
|
|
//
|
|
// ARRANGE
|
|
//
|
|
const workflow = await createWorkflowWithTriggerAndHistory();
|
|
|
|
//
|
|
// ACT
|
|
//
|
|
await command.run([`--id=${workflow.id}`, '--active=true']);
|
|
|
|
//
|
|
// ASSERT
|
|
//
|
|
// Verify workflow was published with current version
|
|
const workflowRepo = Container.get(WorkflowRepository);
|
|
const updatedWorkflow = await workflowRepo.findOneBy({ id: workflow.id });
|
|
|
|
expect(updatedWorkflow?.activeVersionId).toBe(workflow.versionId);
|
|
expect(updatedWorkflow?.active).toBe(true);
|
|
});
|
|
|
|
test('update:workflow can unpublish a specific workflow', async () => {
|
|
//
|
|
// ARRANGE
|
|
//
|
|
const workflows = (await createManyActiveWorkflows(2)).sort((wf1, wf2) =>
|
|
wf1.id.localeCompare(wf2.id),
|
|
);
|
|
|
|
//
|
|
// ACT
|
|
//
|
|
await command.run([`--id=${workflows[0].id}`, '--active=false']);
|
|
|
|
//
|
|
// ASSERT
|
|
//
|
|
const after = (await getAllWorkflows()).sort((wf1, wf2) => wf1.id.localeCompare(wf2.id));
|
|
expect(after).toMatchObject([
|
|
{ activeVersionId: null },
|
|
{ activeVersionId: workflows[1].versionId },
|
|
]);
|
|
});
|