mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 02:21:13 +00:00
Saving execution data is one of the slowest DB operations in the application, and is likely behind some of the sqlite transaction concurrency issues we've been seeing. This not only remove the 2 separate transactions for saving `ExecutionEntity` and `ExecutionData`, but also remove fields from `ExecutionData.workflowData` that don't need to be saved (like `tags`, `shared`, `statistics`, `triggerCount`, etc).
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import Container from 'typedi';
|
|
import { ExecutionRepository } from '@db/repositories/execution.repository';
|
|
import { ExecutionDataRepository } from '@db/repositories/executionData.repository';
|
|
import * as testDb from '../../shared/testDb';
|
|
import { createWorkflow } from '../../shared/db/workflows';
|
|
|
|
describe('ExecutionRepository', () => {
|
|
beforeAll(async () => {
|
|
await testDb.init();
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
await testDb.truncate(['Workflow', 'Execution']);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await testDb.terminate();
|
|
});
|
|
|
|
describe('createNewExecution', () => {
|
|
it('should save execution data', async () => {
|
|
const executionRepo = Container.get(ExecutionRepository);
|
|
const workflow = await createWorkflow();
|
|
const executionId = await executionRepo.createNewExecution({
|
|
workflowId: workflow.id,
|
|
data: {
|
|
resultData: {},
|
|
},
|
|
workflowData: workflow,
|
|
mode: 'manual',
|
|
startedAt: new Date(),
|
|
status: 'new',
|
|
finished: false,
|
|
});
|
|
|
|
expect(executionId).toBeDefined();
|
|
|
|
const executionEntity = await executionRepo.findOneBy({ id: executionId });
|
|
expect(executionEntity?.id).toEqual(executionId);
|
|
expect(executionEntity?.workflowId).toEqual(workflow.id);
|
|
expect(executionEntity?.status).toEqual('new');
|
|
|
|
const executionDataRepo = Container.get(ExecutionDataRepository);
|
|
const executionData = await executionDataRepo.findOneBy({ executionId });
|
|
expect(executionData?.workflowData).toEqual({
|
|
connections: workflow.connections,
|
|
nodes: workflow.nodes,
|
|
name: workflow.name,
|
|
});
|
|
expect(executionData?.data).toEqual('[{"resultData":"1"},{}]');
|
|
});
|
|
});
|
|
});
|