fix(plugin-workflow): fix revision bug (#603)
This commit is contained in:
parent
39a3146f14
commit
15d7f17fb5
@ -156,7 +156,7 @@ describe('workflow > Plugin', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('revisions', () => {
|
describe('revision', () => {
|
||||||
it('create revision', async () => {
|
it('create revision', async () => {
|
||||||
const w1 = await WorkflowModel.create({
|
const w1 = await WorkflowModel.create({
|
||||||
enabled: true,
|
enabled: true,
|
||||||
@ -166,7 +166,6 @@ describe('workflow > Plugin', () => {
|
|||||||
collection: 'posts'
|
collection: 'posts'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
expect(w1.current).toBe(true);
|
|
||||||
|
|
||||||
const { body, status } = await agent.resource(`workflows`).revision({
|
const { body, status } = await agent.resource(`workflows`).revision({
|
||||||
filterByTk: w1.id
|
filterByTk: w1.id
|
||||||
@ -207,5 +206,84 @@ describe('workflow > Plugin', () => {
|
|||||||
expect(e1.workflowId).toBe(w1.id);
|
expect(e1.workflowId).toBe(w1.id);
|
||||||
expect(e2.workflowId).toBe(w2.id);
|
expect(e2.workflowId).toBe(w2.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('revision with nodes', async () => {
|
||||||
|
const w1 = await WorkflowModel.create({
|
||||||
|
enabled: true,
|
||||||
|
type: 'collection',
|
||||||
|
config: {
|
||||||
|
mode: 1,
|
||||||
|
collection: 'posts'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const n1 = await w1.createNode({
|
||||||
|
type: 'echo'
|
||||||
|
});
|
||||||
|
const n2 = await w1.createNode({
|
||||||
|
type: 'calculation',
|
||||||
|
config: {
|
||||||
|
calculation: {
|
||||||
|
calculator: 'add',
|
||||||
|
operands: [
|
||||||
|
{
|
||||||
|
type: '$jobsMapByNodeId',
|
||||||
|
options: {
|
||||||
|
nodeId: n1.id,
|
||||||
|
path: 'data.read'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: `{{$jobsMapByNodeId.${n1.id}.data.read}}`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
upstreamId: n1.id
|
||||||
|
});
|
||||||
|
await n1.setDownstream(n2);
|
||||||
|
|
||||||
|
const { body } = await agent.resource(`workflows`).revision({
|
||||||
|
filterByTk: w1.id
|
||||||
|
});
|
||||||
|
const w2 = await WorkflowModel.findByPk(body.data.id, {
|
||||||
|
include: [
|
||||||
|
'nodes'
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const n1_2 = w2.nodes.find(n => !n.upstreamId);
|
||||||
|
const n2_2 = w2.nodes.find(n => !n.downstreamId);
|
||||||
|
|
||||||
|
expect(n1_2.type).toBe('echo');
|
||||||
|
expect(n2_2.type).toBe('calculation');
|
||||||
|
expect(n2_2.config).toMatchObject({
|
||||||
|
calculation: {
|
||||||
|
calculator: 'add',
|
||||||
|
operands: [
|
||||||
|
{
|
||||||
|
type: '$jobsMapByNodeId',
|
||||||
|
options: {
|
||||||
|
nodeId: n1_2.id,
|
||||||
|
path: 'data.read'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: `{{$jobsMapByNodeId.${n1_2.id}.data.read}}`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await w2.update({ enabled: true });
|
||||||
|
|
||||||
|
await PostRepo.create({
|
||||||
|
values: { title: 't1', read: 1 }
|
||||||
|
});
|
||||||
|
|
||||||
|
const [execution] = await w2.getExecutions();
|
||||||
|
const [echo, calculation] = await execution.getJobs({ order: [['id', 'ASC']] });
|
||||||
|
expect(calculation.result).toBe(2);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -18,6 +18,15 @@ function migrateConfig(config, oldToNew) {
|
|||||||
function migrate(value) {
|
function migrate(value) {
|
||||||
switch (typeOf(value)) {
|
switch (typeOf(value)) {
|
||||||
case 'object':
|
case 'object':
|
||||||
|
if (value.type === '$jobsMapByNodeId') {
|
||||||
|
return {
|
||||||
|
...value,
|
||||||
|
options: {
|
||||||
|
...value.options,
|
||||||
|
nodeId: oldToNew.get(value.options?.nodeId)?.id
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
return Object.keys(value).reduce((result, key) => ({ ...result, [key]: migrate(value[key]) }), {});
|
return Object.keys(value).reduce((result, key) => ({ ...result, [key]: migrate(value[key]) }), {});
|
||||||
case 'array':
|
case 'array':
|
||||||
return value.map(item => migrate(item));
|
return value.map(item => migrate(item));
|
||||||
|
Loading…
Reference in New Issue
Block a user