mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -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 { Logger } from '@/Logger';
|
||||||
import { WorkflowRepository } from '@db/repositories/workflow.repository';
|
import { WorkflowRepository } from '@db/repositories/workflow.repository';
|
||||||
import { isWorkflowIdValid } from '@/utils';
|
import { isWorkflowIdValid } from '@/utils';
|
||||||
|
import config from '@/config';
|
||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
export class WorkflowStaticDataService {
|
export class WorkflowStaticDataService {
|
||||||
|
@ -43,8 +44,19 @@ export class WorkflowStaticDataService {
|
||||||
|
|
||||||
/** Saves the given static data on workflow */
|
/** Saves the given static data on workflow */
|
||||||
async saveStaticDataById(workflowId: string, newStaticData: IDataObject): Promise<void> {
|
async saveStaticDataById(workflowId: string, newStaticData: IDataObject): Promise<void> {
|
||||||
await this.workflowRepository.update(workflowId, {
|
const qb = this.workflowRepository.createQueryBuilder('workflow');
|
||||||
|
await qb
|
||||||
|
.update()
|
||||||
|
.set({
|
||||||
staticData: newStaticData,
|
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