Skip to content

Commit

Permalink
fix: Changes to workflow staticData erroneously updating updatedAt (n…
Browse files Browse the repository at this point in the history
  • Loading branch information
valya authored Jun 19, 2024
1 parent 4ac9266 commit adbd0d1
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 3 deletions.
18 changes: 15 additions & 3 deletions packages/cli/src/workflows/workflowStaticData.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { type IDataObject, type Workflow, ErrorReporterProxy as ErrorReporter }
import { Logger } from '@/Logger';
import { WorkflowRepository } from '@db/repositories/workflow.repository';
import { isWorkflowIdValid } from '@/utils';
import config from '@/config';

@Service()
export class WorkflowStaticDataService {
Expand Down Expand Up @@ -43,8 +44,19 @@ export class WorkflowStaticDataService {

/** Saves the given static data on workflow */
async saveStaticDataById(workflowId: string, newStaticData: IDataObject): Promise<void> {
await this.workflowRepository.update(workflowId, {
staticData: newStaticData,
});
const qb = this.workflowRepository.createQueryBuilder('workflow');
await qb
.update()
.set({
staticData: newStaticData,
updatedAt: () => {
if (['mysqldb', 'mariadb'].includes(config.getEnv('database.type'))) {
return 'updatedAt';
}
return '"updatedAt"';
},
})
.where('id = :id', { id: workflowId })
.execute();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { WorkflowStaticDataService } from '@/workflows/workflowStaticData.service';
import * as testDb from '@test-integration/testDb';
import Container from 'typedi';
import { createWorkflow } from '@test-integration/db/workflows';
import { Workflow } from 'n8n-workflow';
import { mockInstance } from '@test/mocking';
import { NodeTypes } from '@/NodeTypes';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';

const nodeTypes = mockInstance(NodeTypes);
let workflowStaticDataService: WorkflowStaticDataService;
let workflowRepository: WorkflowRepository;

beforeAll(async () => {
await testDb.init();

workflowStaticDataService = Container.get(WorkflowStaticDataService);
workflowRepository = Container.get(WorkflowRepository);
});

afterAll(async () => {
await testDb.terminate();
});

describe('WorkflowStaticDataService', () => {
it('should not change workflow updatedAt when calling saveStaticData', async () => {
const workflowEntityOriginal = await createWorkflow();

const workflow = new Workflow({
id: workflowEntityOriginal.id,
active: false,
connections: {},
nodeTypes,
nodes: [],
});

workflow.staticData.testValue = 1;

await workflowStaticDataService.saveStaticData(workflow);

const workflowEntityNew = await workflowRepository.get({
id: workflowEntityOriginal.id,
});

expect(workflowEntityNew?.staticData).toEqual(workflow.staticData);
expect(workflowEntityNew?.updatedAt).toEqual(workflowEntityOriginal.updatedAt);
});

it('should not change workflow updatedAt when calling saveStaticDataById', async () => {
const workflowEntityOriginal = await createWorkflow();
const staticData = { testValue: 1 };

await workflowStaticDataService.saveStaticDataById(workflowEntityOriginal.id, staticData);

const workflowEntityNew = await workflowRepository.get({
id: workflowEntityOriginal.id,
});

expect(workflowEntityNew?.staticData).toEqual(staticData);
expect(workflowEntityNew?.updatedAt).toEqual(workflowEntityOriginal.updatedAt);
});
});

0 comments on commit adbd0d1

Please sign in to comment.