graph-to-log-struct.spec.ts 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import parseDSL from './graph-to-log-struct'
  2. describe('parseDSL', () => {
  3. it('should parse plain nodes correctly', () => {
  4. const dsl = 'plainNode1 -> plainNode2'
  5. const result = parseDSL(dsl)
  6. expect(result).toEqual([
  7. { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: {}, status: 'succeeded' },
  8. { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: {}, status: 'succeeded' },
  9. ])
  10. })
  11. it('should parse retry nodes correctly', () => {
  12. const dsl = '(retry, retryNode, 3)'
  13. const result = parseDSL(dsl)
  14. expect(result).toEqual([
  15. { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'succeeded' },
  16. { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
  17. { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
  18. { id: 'retryNode', node_id: 'retryNode', title: 'retryNode', execution_metadata: {}, status: 'retry' },
  19. ])
  20. })
  21. it('should parse iteration nodes correctly', () => {
  22. const dsl = '(iteration, iterationNode, plainNode1 -> plainNode2)'
  23. const result = parseDSL(dsl)
  24. expect(result).toEqual([
  25. { id: 'iterationNode', node_id: 'iterationNode', title: 'iterationNode', node_type: 'iteration', execution_metadata: {}, status: 'succeeded' },
  26. { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0 }, status: 'succeeded' },
  27. { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'iterationNode', iteration_index: 0 }, status: 'succeeded' },
  28. ])
  29. })
  30. it('should parse loop nodes correctly', () => {
  31. const dsl = '(loop, loopNode, plainNode1 -> plainNode2)'
  32. const result = parseDSL(dsl)
  33. expect(result).toEqual([
  34. { id: 'loopNode', node_id: 'loopNode', title: 'loopNode', node_type: 'loop', execution_metadata: {}, status: 'succeeded' },
  35. { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { loop_id: 'loopNode', loop_index: 0 }, status: 'succeeded' },
  36. { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { loop_id: 'loopNode', loop_index: 0 }, status: 'succeeded' },
  37. ])
  38. })
  39. it('should parse parallel nodes correctly', () => {
  40. const dsl = '(parallel, parallelNode, nodeA, nodeB -> nodeC)'
  41. const result = parseDSL(dsl)
  42. expect(result).toEqual([
  43. { id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
  44. { id: 'nodeA', node_id: 'nodeA', title: 'nodeA', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeA' }, status: 'succeeded' },
  45. { id: 'nodeB', node_id: 'nodeB', title: 'nodeB', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
  46. { id: 'nodeC', node_id: 'nodeC', title: 'nodeC', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
  47. ])
  48. })
  49. // TODO
  50. // it('should handle nested parallel nodes', () => {
  51. // const dsl = '(parallel, outerParallel, (parallel, innerParallel, plainNode1 -> plainNode2) -> plainNode3)'
  52. // const result = parseDSL(dsl)
  53. // expect(result).toEqual([
  54. // {
  55. // id: 'outerParallel',
  56. // node_id: 'outerParallel',
  57. // title: 'outerParallel',
  58. // execution_metadata: { parallel_id: 'outerParallel' },
  59. // status: 'succeeded',
  60. // },
  61. // {
  62. // id: 'innerParallel',
  63. // node_id: 'innerParallel',
  64. // title: 'innerParallel',
  65. // execution_metadata: { parallel_id: 'outerParallel', parallel_start_node_id: 'innerParallel' },
  66. // status: 'succeeded',
  67. // },
  68. // {
  69. // id: 'plainNode1',
  70. // node_id: 'plainNode1',
  71. // title: 'plainNode1',
  72. // execution_metadata: {
  73. // parallel_id: 'innerParallel',
  74. // parallel_start_node_id: 'plainNode1',
  75. // parent_parallel_id: 'outerParallel',
  76. // parent_parallel_start_node_id: 'innerParallel',
  77. // },
  78. // status: 'succeeded',
  79. // },
  80. // {
  81. // id: 'plainNode2',
  82. // node_id: 'plainNode2',
  83. // title: 'plainNode2',
  84. // execution_metadata: {
  85. // parallel_id: 'innerParallel',
  86. // parallel_start_node_id: 'plainNode1',
  87. // parent_parallel_id: 'outerParallel',
  88. // parent_parallel_start_node_id: 'innerParallel',
  89. // },
  90. // status: 'succeeded',
  91. // },
  92. // {
  93. // id: 'plainNode3',
  94. // node_id: 'plainNode3',
  95. // title: 'plainNode3',
  96. // execution_metadata: {
  97. // parallel_id: 'outerParallel',
  98. // parallel_start_node_id: 'innerParallel',
  99. // },
  100. // status: 'succeeded',
  101. // },
  102. // ])
  103. // })
  104. // iterations not support nested iterations
  105. // it('should handle nested iterations', () => {
  106. // const dsl = '(iteration, outerIteration, (iteration, innerIteration -> plainNode1 -> plainNode2))'
  107. // const result = parseDSL(dsl)
  108. // expect(result).toEqual([
  109. // { id: 'outerIteration', node_id: 'outerIteration', title: 'outerIteration', node_type: 'iteration', execution_metadata: {}, status: 'succeeded' },
  110. // { id: 'innerIteration', node_id: 'innerIteration', title: 'innerIteration', node_type: 'iteration', execution_metadata: { iteration_id: 'outerIteration', iteration_index: 0 }, status: 'succeeded' },
  111. // { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
  112. // { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
  113. // ])
  114. // })
  115. // it('should handle nested iterations within parallel nodes', () => {
  116. // const dsl = '(parallel, parallelNode, (iteration, iterationNode, plainNode1, plainNode2))'
  117. // const result = parseDSL(dsl)
  118. // expect(result).toEqual([
  119. // { id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
  120. // { id: 'iterationNode', node_id: 'iterationNode', title: 'iterationNode', node_type: 'iteration', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
  121. // { 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' },
  122. // { 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' },
  123. // ])
  124. // })
  125. it('should throw an error for unknown node types', () => {
  126. const dsl = '(unknown, nodeId)'
  127. expect(() => parseDSL(dsl)).toThrowError('Unknown nodeType: unknown')
  128. })
  129. })