feat: add transform node to node data
parent
228cd1cdbe
commit
61d2f70927
@ -1,95 +1,128 @@
|
|||||||
import { parseDSL } from './graph-to-log-struct-2'
|
import { parseDSL } from './graph-to-log-struct-2'
|
||||||
|
|
||||||
describe('parseDSL', () => {
|
describe('parseDSL', () => {
|
||||||
test('parse plain flow', () => {
|
it('should parse plain nodes correctly', () => {
|
||||||
const dsl = 'a -> b -> c'
|
const dsl = 'plainNode1 -> plainNode2'
|
||||||
const result = parseDSL(dsl)
|
const result = parseDSL(dsl)
|
||||||
expect(result).toEqual([
|
expect(result).toEqual([
|
||||||
{ nodeType: 'plain', nodeId: 'a' },
|
{ id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: {}, status: 'succeeded' },
|
||||||
{ nodeType: 'plain', nodeId: 'b' },
|
{ id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: {}, status: 'succeeded' },
|
||||||
{ nodeType: 'plain', nodeId: 'c' },
|
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
test('parse iteration node with flow', () => {
|
it('should parse retry nodes correctly', () => {
|
||||||
const dsl = '(iteration, a, b -> c)'
|
const dsl = '(retry, retryNode, 3)'
|
||||||
const result = parseDSL(dsl)
|
const result = parseDSL(dsl)
|
||||||
expect(result).toEqual([
|
expect(result).toEqual([
|
||||||
{
|
{ id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'succeeded' },
|
||||||
nodeType: 'iteration',
|
{ id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
|
||||||
nodeId: 'a',
|
{ id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
|
||||||
params: [
|
{ id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
|
||||||
[
|
|
||||||
{ nodeType: 'plain', nodeId: 'b', iterationId: 'a', iterationIndex: 0 },
|
|
||||||
{ nodeType: 'plain', nodeId: 'c', iterationId: 'a', iterationIndex: 0 },
|
|
||||||
],
|
|
||||||
],
|
|
||||||
},
|
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
test('parse parallel node with flow', () => {
|
it('should parse iteration nodes correctly', () => {
|
||||||
const dsl = 'a -> (parallel, b, c -> d, e)'
|
const dsl = '(iteration, iterationNode, plainNode1 -> plainNode2)'
|
||||||
const result = parseDSL(dsl)
|
const result = parseDSL(dsl)
|
||||||
expect(result).toEqual([
|
expect(result).toEqual([
|
||||||
{
|
{ id: 'iterationNode', node_id: 'iterationNode', title: 'iterationNode', node_type: 'iteration', execution_metadata: {}, status: 'succeeded' },
|
||||||
nodeType: 'plain',
|
{ id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0 }, status: 'succeeded' },
|
||||||
nodeId: 'a',
|
{ id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0 }, status: 'succeeded' },
|
||||||
},
|
|
||||||
{
|
|
||||||
nodeType: 'parallel',
|
|
||||||
nodeId: 'b',
|
|
||||||
params: [
|
|
||||||
[
|
|
||||||
{ nodeType: 'plain', nodeId: 'c' },
|
|
||||||
{ nodeType: 'plain', nodeId: 'd' },
|
|
||||||
],
|
|
||||||
// single node don't need to be wrapped in an array
|
|
||||||
{ nodeType: 'plain', nodeId: 'e' },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
test('parse retry', () => {
|
it('should parse parallel nodes correctly', () => {
|
||||||
const dsl = '(retry, a, 3)'
|
const dsl = '(parallel, parallelNode, nodeA, nodeB -> nodeC)'
|
||||||
const result = parseDSL(dsl)
|
const result = parseDSL(dsl)
|
||||||
expect(result).toEqual([
|
expect(result).toEqual([
|
||||||
{
|
{ id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
|
||||||
nodeType: 'retry',
|
{ id: 'nodeA', node_id: 'nodeA', title: 'nodeA', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeA' }, status: 'succeeded' },
|
||||||
nodeId: 'a',
|
{ id: 'nodeB', node_id: 'nodeB', title: 'nodeB', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
|
||||||
params: [3],
|
{ id: 'nodeC', node_id: 'nodeC', title: 'nodeC', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
|
||||||
},
|
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
test('parse nested complex nodes', () => {
|
// TODO
|
||||||
const dsl = '(iteration, a, b -> (parallel, e, f -> g, h))'
|
it('should handle nested parallel nodes', () => {
|
||||||
|
const dsl = '(parallel, outerParallel, (parallel, innerParallel, plainNode1 -> plainNode2) -> plainNode3)'
|
||||||
const result = parseDSL(dsl)
|
const result = parseDSL(dsl)
|
||||||
expect(result).toEqual([
|
expect(result).toEqual([
|
||||||
{
|
{
|
||||||
nodeType: 'iteration',
|
id: 'outerParallel',
|
||||||
nodeId: 'a',
|
node_id: 'outerParallel',
|
||||||
params: [
|
title: 'outerParallel',
|
||||||
[
|
execution_metadata: { parallel_id: 'outerParallel' },
|
||||||
{ nodeType: 'plain', nodeId: 'b', iterationId: 'a', iterationIndex: 0 },
|
status: 'succeeded',
|
||||||
{
|
},
|
||||||
nodeType: 'parallel',
|
{
|
||||||
nodeId: 'e',
|
id: 'innerParallel',
|
||||||
iterationId: 'a',
|
node_id: 'innerParallel',
|
||||||
iterationIndex: 0,
|
title: 'innerParallel',
|
||||||
params: [
|
execution_metadata: { parallel_id: 'outerParallel', parallel_start_node_id: 'innerParallel' },
|
||||||
[
|
status: 'succeeded',
|
||||||
{ nodeType: 'plain', nodeId: 'f', iterationId: 'a', iterationIndex: 0 },
|
},
|
||||||
{ nodeType: 'plain', nodeId: 'g', iterationId: 'a', iterationIndex: 0 },
|
{
|
||||||
],
|
id: 'plainNode1',
|
||||||
// single node don't need to be wrapped in an array
|
node_id: 'plainNode1',
|
||||||
{ nodeType: 'plain', nodeId: 'h', iterationId: 'a', iterationIndex: 0 },
|
title: 'plainNode1',
|
||||||
],
|
execution_metadata: {
|
||||||
},
|
parallel_id: 'innerParallel',
|
||||||
],
|
parallel_start_node_id: 'plainNode1',
|
||||||
],
|
parent_parallel_id: 'outerParallel',
|
||||||
|
parent_parallel_start_node_id: 'innerParallel',
|
||||||
|
},
|
||||||
|
status: 'succeeded',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'plainNode2',
|
||||||
|
node_id: 'plainNode2',
|
||||||
|
title: 'plainNode2',
|
||||||
|
execution_metadata: {
|
||||||
|
parallel_id: 'innerParallel',
|
||||||
|
parallel_start_node_id: 'plainNode1',
|
||||||
|
parent_parallel_id: 'outerParallel',
|
||||||
|
parent_parallel_start_node_id: 'innerParallel',
|
||||||
|
},
|
||||||
|
status: 'succeeded',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'plainNode3',
|
||||||
|
node_id: 'plainNode3',
|
||||||
|
title: 'plainNode3',
|
||||||
|
execution_metadata: {
|
||||||
|
parallel_id: 'outerParallel',
|
||||||
|
parallel_start_node_id: 'plainNode3',
|
||||||
|
},
|
||||||
|
status: 'succeeded',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
// iterations not support nested iterations
|
||||||
|
// it('should handle nested iterations', () => {
|
||||||
|
// const dsl = '(iteration, outerIteration, (iteration, innerIteration -> plainNode1 -> plainNode2))'
|
||||||
|
// const result = parseDSL(dsl)
|
||||||
|
// expect(result).toEqual([
|
||||||
|
// { id: 'outerIteration', node_id: 'outerIteration', title: 'outerIteration', node_type: 'iteration', execution_metadata: {}, status: 'succeeded' },
|
||||||
|
// { id: 'innerIteration', node_id: 'innerIteration', title: 'innerIteration', node_type: 'iteration', execution_metadata: { iteration_id: 'outerIteration', iteration_index: 0 }, status: 'succeeded' },
|
||||||
|
// { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
|
||||||
|
// { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
|
||||||
|
// ])
|
||||||
|
// })
|
||||||
|
|
||||||
|
it('should handle nested iterations within parallel nodes', () => {
|
||||||
|
const dsl = '(parallel, parallelNode, (iteration, iterationNode, plainNode1, plainNode2))'
|
||||||
|
const result = parseDSL(dsl)
|
||||||
|
expect(result).toEqual([
|
||||||
|
{ id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
|
||||||
|
{ id: 'iterationNode', node_id: 'iterationNode', title: 'iterationNode', node_type: 'iteration', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
|
||||||
|
{ id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0, parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
|
||||||
|
{ id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0, parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should throw an error for unknown node types', () => {
|
||||||
|
const dsl = '(unknown, nodeId)'
|
||||||
|
expect(() => parseDSL(dsl)).toThrowError('Unknown nodeType: unknown')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
Reference in New Issue