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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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 parallel nodes correctly', () => {
  31. const dsl = '(parallel, parallelNode, nodeA, nodeB -> nodeC)'
  32. const result = parseDSL(dsl)
  33. expect(result).toEqual([
  34. { id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
  35. { id: 'nodeA', node_id: 'nodeA', title: 'nodeA', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeA' }, status: 'succeeded' },
  36. { id: 'nodeB', node_id: 'nodeB', title: 'nodeB', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
  37. { id: 'nodeC', node_id: 'nodeC', title: 'nodeC', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'nodeB' }, status: 'succeeded' },
  38. ])
  39. })
  40. // TODO
  41. // it('should handle nested parallel nodes', () => {
  42. // const dsl = '(parallel, outerParallel, (parallel, innerParallel, plainNode1 -> plainNode2) -> plainNode3)'
  43. // const result = parseDSL(dsl)
  44. // expect(result).toEqual([
  45. // {
  46. // id: 'outerParallel',
  47. // node_id: 'outerParallel',
  48. // title: 'outerParallel',
  49. // execution_metadata: { parallel_id: 'outerParallel' },
  50. // status: 'succeeded',
  51. // },
  52. // {
  53. // id: 'innerParallel',
  54. // node_id: 'innerParallel',
  55. // title: 'innerParallel',
  56. // execution_metadata: { parallel_id: 'outerParallel', parallel_start_node_id: 'innerParallel' },
  57. // status: 'succeeded',
  58. // },
  59. // {
  60. // id: 'plainNode1',
  61. // node_id: 'plainNode1',
  62. // title: 'plainNode1',
  63. // execution_metadata: {
  64. // parallel_id: 'innerParallel',
  65. // parallel_start_node_id: 'plainNode1',
  66. // parent_parallel_id: 'outerParallel',
  67. // parent_parallel_start_node_id: 'innerParallel',
  68. // },
  69. // status: 'succeeded',
  70. // },
  71. // {
  72. // id: 'plainNode2',
  73. // node_id: 'plainNode2',
  74. // title: 'plainNode2',
  75. // execution_metadata: {
  76. // parallel_id: 'innerParallel',
  77. // parallel_start_node_id: 'plainNode1',
  78. // parent_parallel_id: 'outerParallel',
  79. // parent_parallel_start_node_id: 'innerParallel',
  80. // },
  81. // status: 'succeeded',
  82. // },
  83. // {
  84. // id: 'plainNode3',
  85. // node_id: 'plainNode3',
  86. // title: 'plainNode3',
  87. // execution_metadata: {
  88. // parallel_id: 'outerParallel',
  89. // parallel_start_node_id: 'innerParallel',
  90. // },
  91. // status: 'succeeded',
  92. // },
  93. // ])
  94. // })
  95. // iterations not support nested iterations
  96. // it('should handle nested iterations', () => {
  97. // const dsl = '(iteration, outerIteration, (iteration, innerIteration -> plainNode1 -> plainNode2))'
  98. // const result = parseDSL(dsl)
  99. // expect(result).toEqual([
  100. // { id: 'outerIteration', node_id: 'outerIteration', title: 'outerIteration', node_type: 'iteration', execution_metadata: {}, status: 'succeeded' },
  101. // { id: 'innerIteration', node_id: 'innerIteration', title: 'innerIteration', node_type: 'iteration', execution_metadata: { iteration_id: 'outerIteration', iteration_index: 0 }, status: 'succeeded' },
  102. // { id: 'plainNode1', node_id: 'plainNode1', title: 'plainNode1', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
  103. // { id: 'plainNode2', node_id: 'plainNode2', title: 'plainNode2', execution_metadata: { iteration_id: 'innerIteration', iteration_index: 0 }, status: 'succeeded' },
  104. // ])
  105. // })
  106. // it('should handle nested iterations within parallel nodes', () => {
  107. // const dsl = '(parallel, parallelNode, (iteration, iterationNode, plainNode1, plainNode2))'
  108. // const result = parseDSL(dsl)
  109. // expect(result).toEqual([
  110. // { id: 'parallelNode', node_id: 'parallelNode', title: 'parallelNode', execution_metadata: { parallel_id: 'parallelNode' }, status: 'succeeded' },
  111. // { id: 'iterationNode', node_id: 'iterationNode', title: 'iterationNode', node_type: 'iteration', execution_metadata: { parallel_id: 'parallelNode', parallel_start_node_id: 'iterationNode' }, status: 'succeeded' },
  112. // { 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' },
  113. // { 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' },
  114. // ])
  115. // })
  116. it('should throw an error for unknown node types', () => {
  117. const dsl = '(unknown, nodeId)'
  118. expect(() => parseDSL(dsl)).toThrowError('Unknown nodeType: unknown')
  119. })
  120. })