mirror of
https://github.com/n8n-io/n8n.git
synced 2025-01-11 21:07:28 -08:00
fix: Changes to workflow staticData erroneously updating updatedAt (#9790)
This commit is contained in:
parent
4ac9266820
commit
adbd0d17ab
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue