task-pipeliner 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/README.ko.md +17 -1
  2. package/README.md +17 -1
  3. package/dist/index.cjs +18 -16
  4. package/dist/index.js +18 -16
  5. package/dist/task-pipeliner-rs.node +0 -0
  6. package/package.json +10 -1
  7. package/dist/cli/index.d.ts +0 -19
  8. package/dist/cli/index.d.ts.map +0 -1
  9. package/dist/cli/index.js +0 -305
  10. package/dist/cli/index.js.map +0 -1
  11. package/dist/cli/prompts.d.ts +0 -48
  12. package/dist/cli/prompts.d.ts.map +0 -1
  13. package/dist/cli/prompts.js +0 -75
  14. package/dist/cli/prompts.js.map +0 -1
  15. package/dist/cli/ui.d.ts +0 -39
  16. package/dist/cli/ui.d.ts.map +0 -1
  17. package/dist/cli/ui.js +0 -84
  18. package/dist/cli/ui.js.map +0 -1
  19. package/dist/core/__tests__/actual-execution.test.d.ts +0 -2
  20. package/dist/core/__tests__/actual-execution.test.d.ts.map +0 -1
  21. package/dist/core/__tests__/actual-execution.test.js +0 -147
  22. package/dist/core/__tests__/actual-execution.test.js.map +0 -1
  23. package/dist/core/__tests__/base-dir.test.d.ts +0 -2
  24. package/dist/core/__tests__/base-dir.test.d.ts.map +0 -1
  25. package/dist/core/__tests__/base-dir.test.js +0 -146
  26. package/dist/core/__tests__/base-dir.test.js.map +0 -1
  27. package/dist/core/__tests__/built-code-execution.test.d.ts +0 -2
  28. package/dist/core/__tests__/built-code-execution.test.d.ts.map +0 -1
  29. package/dist/core/__tests__/built-code-execution.test.js +0 -48
  30. package/dist/core/__tests__/built-code-execution.test.js.map +0 -1
  31. package/dist/core/__tests__/choose-as-var-condition.test.d.ts +0 -2
  32. package/dist/core/__tests__/choose-as-var-condition.test.d.ts.map +0 -1
  33. package/dist/core/__tests__/choose-as-var-condition.test.js +0 -308
  34. package/dist/core/__tests__/choose-as-var-condition.test.js.map +0 -1
  35. package/dist/core/__tests__/cli-integration.test.d.ts +0 -2
  36. package/dist/core/__tests__/cli-integration.test.d.ts.map +0 -1
  37. package/dist/core/__tests__/cli-integration.test.js +0 -83
  38. package/dist/core/__tests__/cli-integration.test.js.map +0 -1
  39. package/dist/core/__tests__/comprehensive-basic-yaml.test.d.ts +0 -2
  40. package/dist/core/__tests__/comprehensive-basic-yaml.test.d.ts.map +0 -1
  41. package/dist/core/__tests__/comprehensive-basic-yaml.test.js +0 -114
  42. package/dist/core/__tests__/comprehensive-basic-yaml.test.js.map +0 -1
  43. package/dist/core/__tests__/condition-evaluator.test.d.ts +0 -2
  44. package/dist/core/__tests__/condition-evaluator.test.d.ts.map +0 -1
  45. package/dist/core/__tests__/condition-evaluator.test.js +0 -164
  46. package/dist/core/__tests__/condition-evaluator.test.js.map +0 -1
  47. package/dist/core/__tests__/debug-basic-yaml.test.d.ts +0 -2
  48. package/dist/core/__tests__/debug-basic-yaml.test.d.ts.map +0 -1
  49. package/dist/core/__tests__/debug-basic-yaml.test.js +0 -126
  50. package/dist/core/__tests__/debug-basic-yaml.test.js.map +0 -1
  51. package/dist/core/__tests__/example-files.test.d.ts +0 -2
  52. package/dist/core/__tests__/example-files.test.d.ts.map +0 -1
  53. package/dist/core/__tests__/example-files.test.js +0 -199
  54. package/dist/core/__tests__/example-files.test.js.map +0 -1
  55. package/dist/core/__tests__/executor-choice-integration.test.d.ts +0 -2
  56. package/dist/core/__tests__/executor-choice-integration.test.d.ts.map +0 -1
  57. package/dist/core/__tests__/executor-choice-integration.test.js +0 -169
  58. package/dist/core/__tests__/executor-choice-integration.test.js.map +0 -1
  59. package/dist/core/__tests__/executor-choice.test.d.ts +0 -2
  60. package/dist/core/__tests__/executor-choice.test.d.ts.map +0 -1
  61. package/dist/core/__tests__/executor-choice.test.js +0 -170
  62. package/dist/core/__tests__/executor-choice.test.js.map +0 -1
  63. package/dist/core/__tests__/executor-parallel.test.d.ts +0 -2
  64. package/dist/core/__tests__/executor-parallel.test.d.ts.map +0 -1
  65. package/dist/core/__tests__/executor-parallel.test.js +0 -129
  66. package/dist/core/__tests__/executor-parallel.test.js.map +0 -1
  67. package/dist/core/__tests__/executor-prompt.test.d.ts +0 -2
  68. package/dist/core/__tests__/executor-prompt.test.d.ts.map +0 -1
  69. package/dist/core/__tests__/executor-prompt.test.js +0 -147
  70. package/dist/core/__tests__/executor-prompt.test.js.map +0 -1
  71. package/dist/core/__tests__/executor-real-scenario.test.d.ts +0 -2
  72. package/dist/core/__tests__/executor-real-scenario.test.d.ts.map +0 -1
  73. package/dist/core/__tests__/executor-real-scenario.test.js +0 -169
  74. package/dist/core/__tests__/executor-real-scenario.test.js.map +0 -1
  75. package/dist/core/__tests__/file-condition.test.d.ts +0 -2
  76. package/dist/core/__tests__/file-condition.test.d.ts.map +0 -1
  77. package/dist/core/__tests__/file-condition.test.js +0 -172
  78. package/dist/core/__tests__/file-condition.test.js.map +0 -1
  79. package/dist/core/__tests__/final-verification.test.d.ts +0 -2
  80. package/dist/core/__tests__/final-verification.test.d.ts.map +0 -1
  81. package/dist/core/__tests__/final-verification.test.js +0 -56
  82. package/dist/core/__tests__/final-verification.test.js.map +0 -1
  83. package/dist/core/__tests__/parallel-when-condition.test.d.ts +0 -2
  84. package/dist/core/__tests__/parallel-when-condition.test.d.ts.map +0 -1
  85. package/dist/core/__tests__/parallel-when-condition.test.js +0 -155
  86. package/dist/core/__tests__/parallel-when-condition.test.js.map +0 -1
  87. package/dist/core/__tests__/parser.test.d.ts +0 -2
  88. package/dist/core/__tests__/parser.test.d.ts.map +0 -1
  89. package/dist/core/__tests__/parser.test.js +0 -91
  90. package/dist/core/__tests__/parser.test.js.map +0 -1
  91. package/dist/core/__tests__/real-inquirer-test.test.d.ts +0 -2
  92. package/dist/core/__tests__/real-inquirer-test.test.d.ts.map +0 -1
  93. package/dist/core/__tests__/real-inquirer-test.test.js +0 -20
  94. package/dist/core/__tests__/real-inquirer-test.test.js.map +0 -1
  95. package/dist/core/__tests__/reproduce-bug.test.d.ts +0 -2
  96. package/dist/core/__tests__/reproduce-bug.test.d.ts.map +0 -1
  97. package/dist/core/__tests__/reproduce-bug.test.js +0 -85
  98. package/dist/core/__tests__/reproduce-bug.test.js.map +0 -1
  99. package/dist/core/__tests__/timeout-retry.test.d.ts +0 -2
  100. package/dist/core/__tests__/timeout-retry.test.d.ts.map +0 -1
  101. package/dist/core/__tests__/timeout-retry.test.js +0 -184
  102. package/dist/core/__tests__/timeout-retry.test.js.map +0 -1
  103. package/dist/core/__tests__/workflow-validation.test.d.ts +0 -2
  104. package/dist/core/__tests__/workflow-validation.test.d.ts.map +0 -1
  105. package/dist/core/__tests__/workflow-validation.test.js +0 -116
  106. package/dist/core/__tests__/workflow-validation.test.js.map +0 -1
  107. package/dist/core/__tests__/workspace.test.d.ts +0 -2
  108. package/dist/core/__tests__/workspace.test.d.ts.map +0 -1
  109. package/dist/core/__tests__/workspace.test.js +0 -29
  110. package/dist/core/__tests__/workspace.test.js.map +0 -1
  111. package/dist/core/__tests__/yaml-integration.test.d.ts +0 -2
  112. package/dist/core/__tests__/yaml-integration.test.d.ts.map +0 -1
  113. package/dist/core/__tests__/yaml-integration.test.js +0 -114
  114. package/dist/core/__tests__/yaml-integration.test.js.map +0 -1
  115. package/dist/core/__tests__/yaml-scenarios.test.d.ts +0 -2
  116. package/dist/core/__tests__/yaml-scenarios.test.d.ts.map +0 -1
  117. package/dist/core/__tests__/yaml-scenarios.test.js +0 -197
  118. package/dist/core/__tests__/yaml-scenarios.test.js.map +0 -1
  119. package/dist/core/condition-evaluator.d.ts +0 -44
  120. package/dist/core/condition-evaluator.d.ts.map +0 -1
  121. package/dist/core/condition-evaluator.js +0 -121
  122. package/dist/core/condition-evaluator.js.map +0 -1
  123. package/dist/core/executor.d.ts +0 -172
  124. package/dist/core/executor.d.ts.map +0 -1
  125. package/dist/core/executor.js +0 -590
  126. package/dist/core/executor.js.map +0 -1
  127. package/dist/core/history.d.ts +0 -51
  128. package/dist/core/history.d.ts.map +0 -1
  129. package/dist/core/history.js +0 -57
  130. package/dist/core/history.js.map +0 -1
  131. package/dist/core/parser.d.ts +0 -41
  132. package/dist/core/parser.d.ts.map +0 -1
  133. package/dist/core/parser.js +0 -206
  134. package/dist/core/parser.js.map +0 -1
  135. package/dist/core/recorder.d.ts +0 -48
  136. package/dist/core/recorder.d.ts.map +0 -1
  137. package/dist/core/recorder.js +0 -56
  138. package/dist/core/recorder.js.map +0 -1
  139. package/dist/core/rust-task-runner.d.ts +0 -14
  140. package/dist/core/rust-task-runner.d.ts.map +0 -1
  141. package/dist/core/rust-task-runner.js +0 -34
  142. package/dist/core/rust-task-runner.js.map +0 -1
  143. package/dist/core/task-runner.d.ts +0 -63
  144. package/dist/core/task-runner.d.ts.map +0 -1
  145. package/dist/core/task-runner.js +0 -259
  146. package/dist/core/task-runner.js.map +0 -1
  147. package/dist/core/template.d.ts +0 -11
  148. package/dist/core/template.d.ts.map +0 -1
  149. package/dist/core/template.js +0 -36
  150. package/dist/core/template.js.map +0 -1
  151. package/dist/core/workflow-schema.d.ts +0 -31
  152. package/dist/core/workflow-schema.d.ts.map +0 -1
  153. package/dist/core/workflow-schema.js +0 -127
  154. package/dist/core/workflow-schema.js.map +0 -1
  155. package/dist/core/workspace.d.ts +0 -90
  156. package/dist/core/workspace.d.ts.map +0 -1
  157. package/dist/core/workspace.js +0 -143
  158. package/dist/core/workspace.js.map +0 -1
  159. package/dist/index.d.ts.map +0 -1
  160. package/dist/index.js.map +0 -1
  161. package/dist/types/condition.d.ts +0 -62
  162. package/dist/types/condition.d.ts.map +0 -1
  163. package/dist/types/condition.js +0 -6
  164. package/dist/types/condition.js.map +0 -1
  165. package/dist/types/workflow.d.ts +0 -90
  166. package/dist/types/workflow.d.ts.map +0 -1
  167. package/dist/types/workflow.js +0 -2
  168. package/dist/types/workflow.js.map +0 -1
@@ -1,169 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Executor } from '../executor';
3
- // Use actual ChoicePrompt and TextPrompt (without mocking)
4
- // Mock only TaskRunner
5
- const mockRun = vi.fn().mockResolvedValue(true);
6
- vi.mock('../task-runner.js', () => {
7
- return {
8
- TaskRunner: vi.fn().mockImplementation(() => {
9
- return {
10
- run: mockRun,
11
- };
12
- }),
13
- };
14
- });
15
- describe('Executor - Choice Integration Test (Real Prompts)', () => {
16
- let executor;
17
- let choicePrompt;
18
- beforeEach(() => {
19
- vi.clearAllMocks();
20
- executor = new Executor();
21
- choicePrompt = executor.choicePrompt;
22
- });
23
- it('should execute step after choice is made - REAL PROMPT', async () => {
24
- const workflow = {
25
- steps: [
26
- {
27
- choose: {
28
- message: 'Deploy to which environment?',
29
- options: [
30
- { id: 'staging', label: 'Staging' },
31
- { id: 'prod', label: 'Production' },
32
- ],
33
- as: 'env',
34
- },
35
- },
36
- {
37
- when: {
38
- var: {
39
- env: 'staging',
40
- },
41
- },
42
- run: 'echo "Deploying to staging..."',
43
- },
44
- {
45
- when: {
46
- var: {
47
- env: 'prod',
48
- },
49
- },
50
- run: 'echo "Deploying to production..."',
51
- },
52
- ],
53
- };
54
- // Mock the actual prompt but use real ChoicePrompt instance
55
- vi.spyOn(choicePrompt, 'prompt').mockResolvedValue({ id: 'staging', label: 'Staging' });
56
- await executor.execute(workflow);
57
- // staging step should execute after staging is selected
58
- const calls = mockRun.mock.calls.map((call) => call[0]);
59
- expect(calls).toContain('echo "Deploying to staging..."');
60
- expect(calls).not.toContain('echo "Deploying to production..."');
61
- // Check if choice and variable are set in workspace
62
- const workspace = executor.workspace;
63
- expect(workspace.hasChoice('staging')).toBe(true);
64
- expect(workspace.getVariable('env')).toBe('staging');
65
- });
66
- it('should verify workspace state after choice', async () => {
67
- const workflow = {
68
- steps: [
69
- {
70
- choose: {
71
- message: 'Select option',
72
- options: [{ id: 'option1', label: 'Option 1' }],
73
- },
74
- },
75
- ],
76
- };
77
- const choicePrompt = executor.choicePrompt;
78
- vi.spyOn(choicePrompt, 'prompt').mockResolvedValue({ id: 'option1', label: 'Option 1' });
79
- await executor.execute(workflow);
80
- const workspace = executor.workspace;
81
- // Check if choice is set
82
- expect(workspace.hasChoice('option1')).toBe(true);
83
- expect(workspace.getChoice('option1')).toBe('option1');
84
- });
85
- it('MUST PASS: choose with as keyword, then multiple when clauses (bug fix scenario)', async () => {
86
- const workflow = {
87
- steps: [
88
- {
89
- choose: {
90
- message: 'Select option type:',
91
- options: [
92
- { id: 'dev', label: 'dev' },
93
- { id: 'build', label: 'build' },
94
- { id: 'echo', label: 'echo' },
95
- ],
96
- as: 'optionType',
97
- },
98
- },
99
- {
100
- when: {
101
- var: {
102
- optionType: 'dev',
103
- },
104
- },
105
- run: 'echo "DEV selected"',
106
- },
107
- {
108
- when: {
109
- var: {
110
- optionType: 'build',
111
- },
112
- },
113
- run: 'echo "BUILD selected"',
114
- },
115
- {
116
- when: {
117
- var: {
118
- optionType: 'echo',
119
- },
120
- },
121
- run: 'echo "ECHO selected"',
122
- },
123
- ],
124
- };
125
- // Test with dev
126
- vi.spyOn(choicePrompt, 'prompt').mockResolvedValue({ id: 'dev', label: 'dev' });
127
- await executor.execute(workflow);
128
- const calls = mockRun.mock.calls.map((call) => call[0]);
129
- expect(calls).toContain('echo "DEV selected"');
130
- expect(calls).not.toContain('echo "BUILD selected"');
131
- expect(calls).not.toContain('echo "ECHO selected"');
132
- // Verify variable is stored correctly
133
- const workspace = executor.workspace;
134
- expect(workspace.getVariable('optionType')).toBe('dev');
135
- });
136
- it('MUST PASS: choose with as keyword, then when clause with non-matching value', async () => {
137
- const workflow = {
138
- steps: [
139
- {
140
- choose: {
141
- message: 'Select option:',
142
- options: [
143
- { id: 'dev', label: 'dev' },
144
- { id: 'build', label: 'build' },
145
- ],
146
- as: 'optionType',
147
- },
148
- },
149
- {
150
- when: {
151
- var: {
152
- optionType: 'build',
153
- },
154
- },
155
- run: 'echo "BUILD selected"',
156
- },
157
- ],
158
- };
159
- // Select dev, but condition checks for build
160
- vi.spyOn(choicePrompt, 'prompt').mockResolvedValue({ id: 'dev', label: 'dev' });
161
- await executor.execute(workflow);
162
- const calls = mockRun.mock.calls.map((call) => call[0]);
163
- expect(calls).not.toContain('echo "BUILD selected"');
164
- // Verify variable is stored but condition didn't match
165
- const workspace = executor.workspace;
166
- expect(workspace.getVariable('optionType')).toBe('dev');
167
- });
168
- });
169
- //# sourceMappingURL=executor-choice-integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor-choice-integration.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/executor-choice-integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=executor-choice.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor-choice.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/executor-choice.test.ts"],"names":[],"mappings":""}
@@ -1,170 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Executor } from '../executor';
3
- // Mock ChoicePrompt
4
- const mockPrompt = vi.fn();
5
- vi.mock('../../cli/prompts.js', () => {
6
- return {
7
- ChoicePrompt: vi.fn().mockImplementation(() => {
8
- return {
9
- prompt: mockPrompt,
10
- };
11
- }),
12
- TextPrompt: vi.fn().mockImplementation(() => {
13
- return {
14
- prompt: vi.fn(),
15
- };
16
- }),
17
- };
18
- });
19
- // Mock TaskRunner
20
- const mockRun = vi.fn().mockResolvedValue(true);
21
- vi.mock('../task-runner.js', () => {
22
- return {
23
- TaskRunner: vi.fn().mockImplementation(() => {
24
- return {
25
- run: mockRun,
26
- };
27
- }),
28
- };
29
- });
30
- describe('Executor - Choice Condition', () => {
31
- let executor;
32
- beforeEach(() => {
33
- vi.clearAllMocks();
34
- executor = new Executor();
35
- });
36
- it('should execute step after choice is made', async () => {
37
- const workflow = {
38
- steps: [
39
- {
40
- choose: {
41
- message: 'Deploy to which environment?',
42
- options: [
43
- { id: 'staging', label: 'Staging' },
44
- { id: 'prod', label: 'Production' },
45
- ],
46
- as: 'env',
47
- },
48
- },
49
- {
50
- when: {
51
- var: {
52
- env: 'staging',
53
- },
54
- },
55
- run: 'echo "Deploying to staging..."',
56
- },
57
- {
58
- when: {
59
- var: {
60
- env: 'prod',
61
- },
62
- },
63
- run: 'echo "Deploying to production..."',
64
- },
65
- ],
66
- };
67
- // Mock staging selection
68
- mockPrompt.mockResolvedValueOnce({ id: 'staging', label: 'Staging' });
69
- await executor.execute(workflow);
70
- // Check workspace state
71
- const workspace = executor.workspace;
72
- expect(workspace.hasChoice('staging')).toBe(true);
73
- expect(workspace.getVariable('env')).toBe('staging');
74
- // staging step should execute after staging is selected
75
- const calls = mockRun.mock.calls.map((call) => call[0]);
76
- expect(calls).toContain('echo "Deploying to staging..."');
77
- expect(calls).not.toContain('echo "Deploying to production..."');
78
- // Check call count
79
- expect(mockRun).toHaveBeenCalledTimes(1);
80
- });
81
- it('should skip step when choice condition is not met', async () => {
82
- const workflow = {
83
- steps: [
84
- {
85
- choose: {
86
- message: 'Deploy to which environment?',
87
- options: [
88
- { id: 'staging', label: 'Staging' },
89
- { id: 'prod', label: 'Production' },
90
- ],
91
- as: 'env',
92
- },
93
- },
94
- {
95
- when: {
96
- var: {
97
- env: 'staging',
98
- },
99
- },
100
- run: 'echo "Deploying to staging..."',
101
- },
102
- {
103
- when: {
104
- var: {
105
- env: 'prod',
106
- },
107
- },
108
- run: 'echo "Deploying to production..."',
109
- },
110
- ],
111
- };
112
- // Mock prod selection
113
- mockPrompt.mockResolvedValueOnce({ id: 'prod', label: 'Production' });
114
- await executor.execute(workflow);
115
- // prod step should execute after prod is selected
116
- const calls = mockRun.mock.calls.map((call) => call[0]);
117
- expect(calls).toContain('echo "Deploying to production..."');
118
- expect(calls).not.toContain('echo "Deploying to staging..."');
119
- });
120
- it('should handle multiple choices', async () => {
121
- const workflow = {
122
- steps: [
123
- {
124
- choose: {
125
- message: 'First choice?',
126
- options: [{ id: 'option1', label: 'Option 1' }],
127
- as: 'first',
128
- },
129
- },
130
- {
131
- when: {
132
- var: {
133
- first: 'option1',
134
- },
135
- },
136
- choose: {
137
- message: 'Second choice?',
138
- options: [{ id: 'option2', label: 'Option 2' }],
139
- as: 'second',
140
- },
141
- },
142
- {
143
- when: {
144
- all: [
145
- {
146
- var: {
147
- first: 'option1',
148
- },
149
- },
150
- {
151
- var: {
152
- second: 'option2',
153
- },
154
- },
155
- ],
156
- },
157
- run: 'echo "Both choices made"',
158
- },
159
- ],
160
- };
161
- mockPrompt
162
- .mockResolvedValueOnce({ id: 'option1', label: 'Option 1' })
163
- .mockResolvedValueOnce({ id: 'option2', label: 'Option 2' });
164
- await executor.execute(workflow);
165
- // step should execute after both choices are set
166
- const calls = mockRun.mock.calls.map((call) => call[0]);
167
- expect(calls).toContain('echo "Both choices made"');
168
- });
169
- });
170
- //# sourceMappingURL=executor-choice.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor-choice.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/executor-choice.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=executor-parallel.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor-parallel.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/executor-parallel.test.ts"],"names":[],"mappings":""}
@@ -1,129 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Executor } from '../executor';
3
- // Mock ChoicePrompt, TextPrompt
4
- vi.mock('../../cli/prompts.js', () => {
5
- return {
6
- ChoicePrompt: vi.fn().mockImplementation(() => {
7
- return {
8
- prompt: vi.fn(),
9
- };
10
- }),
11
- TextPrompt: vi.fn().mockImplementation(() => {
12
- return {
13
- prompt: vi.fn(),
14
- };
15
- }),
16
- };
17
- });
18
- // Mock TaskRunner
19
- const mockRun = vi.fn().mockResolvedValue(true);
20
- vi.mock('../task-runner.js', () => {
21
- return {
22
- TaskRunner: vi.fn().mockImplementation(() => {
23
- return {
24
- run: mockRun,
25
- };
26
- }),
27
- };
28
- });
29
- describe('Executor - Parallel Step', () => {
30
- let executor;
31
- beforeEach(() => {
32
- vi.clearAllMocks();
33
- executor = new Executor();
34
- });
35
- it('should wait for all parallel steps to complete before next step', async () => {
36
- const workflow = {
37
- steps: [
38
- {
39
- parallel: [{ run: 'echo "Step 1"' }, { run: 'echo "Step 2"' }, { run: 'echo "Step 3"' }],
40
- },
41
- {
42
- run: 'echo "After parallel"',
43
- },
44
- ],
45
- };
46
- await executor.execute(workflow);
47
- // All parallel steps should execute
48
- const calls = mockRun.mock.calls.map((call) => call[0]);
49
- expect(calls).toContain('echo "Step 1"');
50
- expect(calls).toContain('echo "Step 2"');
51
- expect(calls).toContain('echo "Step 3"');
52
- // Execute next step after all parallel steps complete
53
- expect(calls).toContain('echo "After parallel"');
54
- });
55
- it('should check files after parallel execution', async () => {
56
- const workflow = {
57
- steps: [
58
- {
59
- parallel: [
60
- {
61
- run: 'echo "Web tests"',
62
- },
63
- {
64
- run: 'echo "API tests"',
65
- },
66
- ],
67
- },
68
- {
69
- when: {
70
- file: 'package.json',
71
- },
72
- run: 'echo "Package.json exists"',
73
- },
74
- ],
75
- };
76
- await executor.execute(workflow);
77
- // Check condition by file existence
78
- const calls = mockRun.mock.calls.map((call) => call[0]);
79
- expect(calls).toContain('echo "Package.json exists"');
80
- });
81
- it('should handle parallel steps with file conditions', async () => {
82
- const workflow = {
83
- steps: [
84
- {
85
- parallel: [
86
- {
87
- when: { file: 'package.json' },
88
- run: 'echo "Branch 1"',
89
- },
90
- {
91
- when: { file: 'tsconfig.json' },
92
- run: 'echo "Branch 2"',
93
- },
94
- ],
95
- },
96
- {
97
- run: 'echo "After parallel"',
98
- },
99
- ],
100
- };
101
- await executor.execute(workflow);
102
- // Execute only parallel steps with satisfied conditions
103
- const calls = mockRun.mock.calls.map((call) => call[0]);
104
- expect(calls).toContain('echo "Branch 1"');
105
- expect(calls).toContain('echo "Branch 2"');
106
- expect(calls).toContain('echo "After parallel"');
107
- });
108
- it('should execute all parallel steps regardless of individual results', async () => {
109
- const workflow = {
110
- steps: [
111
- {
112
- parallel: [{ run: 'echo "Step 1"' }, { run: 'echo "Step 2"' }],
113
- },
114
- {
115
- run: 'echo "After parallel"',
116
- },
117
- ],
118
- };
119
- // All steps succeed
120
- mockRun.mockResolvedValue(true);
121
- await executor.execute(workflow);
122
- // Both steps should execute
123
- const calls = mockRun.mock.calls.map((call) => call[0]);
124
- expect(calls).toContain('echo "Step 1"');
125
- expect(calls).toContain('echo "Step 2"');
126
- expect(calls).toContain('echo "After parallel"');
127
- });
128
- });
129
- //# sourceMappingURL=executor-parallel.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor-parallel.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/executor-parallel.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=executor-prompt.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor-prompt.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/executor-prompt.test.ts"],"names":[],"mappings":""}
@@ -1,147 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { Executor } from '../executor';
3
- // Mock TextPrompt
4
- const mockTextPrompt = vi.fn();
5
- vi.mock('../../cli/prompts.js', () => {
6
- return {
7
- ChoicePrompt: vi.fn().mockImplementation(() => {
8
- return {
9
- prompt: vi.fn(),
10
- };
11
- }),
12
- TextPrompt: vi.fn().mockImplementation(() => {
13
- return {
14
- prompt: mockTextPrompt,
15
- };
16
- }),
17
- };
18
- });
19
- // Mock TaskRunner
20
- const mockRun = vi.fn().mockResolvedValue(true);
21
- vi.mock('../task-runner.js', () => {
22
- return {
23
- TaskRunner: vi.fn().mockImplementation(() => {
24
- return {
25
- run: mockRun,
26
- };
27
- }),
28
- };
29
- });
30
- describe('Executor - Prompt Step', () => {
31
- let executor;
32
- beforeEach(() => {
33
- vi.clearAllMocks();
34
- executor = new Executor();
35
- });
36
- it('should execute prompt step and save as fact', async () => {
37
- const workflow = {
38
- steps: [
39
- {
40
- prompt: {
41
- message: 'What is your name?',
42
- as: 'user_name',
43
- },
44
- },
45
- {
46
- when: { file: 'package.json' },
47
- run: 'echo "Hello"',
48
- },
49
- ],
50
- };
51
- mockTextPrompt.mockResolvedValueOnce('John');
52
- await executor.execute(workflow);
53
- // Prompt should be called
54
- expect(mockTextPrompt).toHaveBeenCalledWith('What is your name?', undefined);
55
- // step should execute after fact is set
56
- const calls = mockRun.mock.calls.map((call) => call[0]);
57
- expect(calls).toContain('echo "Hello"');
58
- });
59
- it('should use default value in prompt', async () => {
60
- const workflow = {
61
- steps: [
62
- {
63
- prompt: {
64
- message: 'Enter version:',
65
- as: 'version',
66
- default: '1.0.0',
67
- },
68
- },
69
- ],
70
- };
71
- mockTextPrompt.mockResolvedValueOnce('1.0.0');
72
- await executor.execute(workflow);
73
- // Prompt should be called with default value
74
- expect(mockTextPrompt).toHaveBeenCalledWith('Enter version:', '1.0.0');
75
- });
76
- it('should save prompt value as fact and use in condition', async () => {
77
- const workflow = {
78
- steps: [
79
- {
80
- prompt: {
81
- message: 'Enter environment:',
82
- as: 'env',
83
- },
84
- },
85
- {
86
- when: { file: 'package.json' },
87
- run: 'echo "Deploying to {{env}}"',
88
- },
89
- ],
90
- };
91
- mockTextPrompt.mockResolvedValueOnce('production');
92
- await executor.execute(workflow);
93
- // step should execute when condition is satisfied after prompt
94
- expect(mockRun.mock.calls.length).toBeGreaterThan(0);
95
- });
96
- it('should combine prompt and choose', async () => {
97
- const workflow = {
98
- steps: [
99
- {
100
- prompt: {
101
- message: 'Enter project name:',
102
- as: 'project_name',
103
- },
104
- },
105
- {
106
- choose: {
107
- message: 'Select environment:',
108
- options: [
109
- { id: 'staging', label: 'Staging' },
110
- { id: 'prod', label: 'Production' },
111
- ],
112
- },
113
- },
114
- {
115
- choose: {
116
- message: 'Select environment:',
117
- options: [{ id: 'prod', label: 'Production' }],
118
- as: 'env',
119
- },
120
- },
121
- {
122
- when: {
123
- all: [
124
- { file: 'package.json' },
125
- {
126
- var: {
127
- env: 'prod',
128
- },
129
- },
130
- ],
131
- },
132
- run: 'echo "Deploying {{project_name}} to production"',
133
- },
134
- ],
135
- };
136
- mockTextPrompt.mockResolvedValueOnce('my-app');
137
- const mockChoicePrompt = executor.choicePrompt;
138
- // Mock both choose steps
139
- mockChoicePrompt.prompt
140
- .mockResolvedValueOnce({ id: 'prod', label: 'Production' })
141
- .mockResolvedValueOnce({ id: 'prod', label: 'Production' });
142
- await executor.execute(workflow);
143
- // Both prompt and choose should execute, and step should execute when condition is satisfied
144
- expect(mockRun.mock.calls.length).toBeGreaterThan(0);
145
- });
146
- });
147
- //# sourceMappingURL=executor-prompt.test.js.map