diff --git a/packages/core/tests/workflow.test.ts b/packages/core/tests/workflow.test.ts index 1b881c1c7d59e7b671f0f612d9f3e9b43551ccd6..c28770e1288f02a138d98513e6063e80c87ff431 100644 --- a/packages/core/tests/workflow.test.ts +++ b/packages/core/tests/workflow.test.ts @@ -166,4 +166,31 @@ describe("Workflow", () => { greeting: "Hello Alice, you are 30 years old!", }); }); + + test("workflow with two concurrent steps", async () => { + const concurrentFlow = new Workflow({ verbose: true }); + + const step1 = vi.fn(async (_context, _ev: StartEvent) => { + await new Promise((resolve) => setTimeout(resolve, 200)); + return new StopEvent({ result: "Step 1 completed" }); + }); + + const step2 = vi.fn(async (_context, _ev: StartEvent) => { + await new Promise((resolve) => setTimeout(resolve, 100)); + return new StopEvent({ result: "Step 2 completed" }); + }); + + concurrentFlow.addStep(StartEvent, step1); + concurrentFlow.addStep(StartEvent, step2); + + const startTime = new Date(); + const result = await concurrentFlow.run("start"); + const endTime = new Date(); + const duration = endTime.getTime() - startTime.getTime(); + + expect(step1).toHaveBeenCalledTimes(1); + expect(step2).toHaveBeenCalledTimes(1); + expect(duration).toBeLessThan(200); + expect(result.data.result).toBe("Step 2 completed"); + }); });