Skip to content

Commit a8a60d0

Browse files
feat: feedback
1 parent 9de1d0b commit a8a60d0

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

packages/openworkflow/worker/execution.test.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2574,6 +2574,60 @@ describe("StepExecutor", () => {
25742574
expect(result).toBeNull();
25752575
});
25762576

2577+
test("waitForSignal handles legacy null timeoutAt in signal-wait context", async () => {
2578+
const backend = await createBackend();
2579+
const client = new OpenWorkflow({ backend });
2580+
2581+
const workflow = client.defineWorkflow(
2582+
{ name: `signal-wait-null-timeout-${randomUUID()}` },
2583+
async ({ step }) => {
2584+
const data = await step.waitForSignal({
2585+
signal: `legacy-null-${randomUUID()}`,
2586+
timeout: 1, // expires immediately
2587+
});
2588+
return data;
2589+
},
2590+
);
2591+
2592+
// corrupt the signal-wait context to have null timeoutAt (simulates
2593+
// legacy persisted data where timeoutAt was missing) and backdate
2594+
// createdAt so the 1-year default fallback has already expired.
2595+
const twoYearsAgo = new Date();
2596+
twoYearsAgo.setFullYear(twoYearsAgo.getFullYear() - 2);
2597+
const originalCreateStepAttempt = backend.createStepAttempt.bind(backend);
2598+
const createStepAttemptSpy = vi
2599+
.spyOn(backend, "createStepAttempt")
2600+
.mockImplementation(async (params) => {
2601+
const attempt = await originalCreateStepAttempt(params);
2602+
if (attempt.kind === "signal-wait") {
2603+
return {
2604+
...attempt,
2605+
createdAt: twoYearsAgo,
2606+
context: null,
2607+
};
2608+
}
2609+
return attempt;
2610+
});
2611+
2612+
try {
2613+
const worker = client.newWorker();
2614+
const handle = await workflow.run();
2615+
const status = await tickUntilTerminal(
2616+
backend,
2617+
worker,
2618+
handle.workflowRun.id,
2619+
20,
2620+
50,
2621+
);
2622+
2623+
expect(status).toBe("completed");
2624+
const result = await handle.result();
2625+
expect(result).toBeNull();
2626+
} finally {
2627+
createStepAttemptSpy.mockRestore();
2628+
}
2629+
});
2630+
25772631
test("waitForSignal validates data against schema", async () => {
25782632
const backend = await createBackend();
25792633
const client = new OpenWorkflow({ backend });

0 commit comments

Comments
 (0)