fix: Changes to workflow staticData erroneously updating updatedAt (#9790)

This commit is contained in:
Val 2024-06-19 14:44:55 +01:00 committed by GitHub
parent 4ac9266820
commit adbd0d17ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 77 additions and 3 deletions

View file

@ -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 {
@ -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();
}
}

View file

@ -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);
});
});