@@ -6,14 +6,16 @@ import { deterministicTraceIdFromInstanceId, instrumentWorkflowWithSentry } from
66
77const NODE_MAJOR_VERSION = parseInt ( process . versions . node . split ( '.' ) [ 0 ] ! ) ;
88
9+ const MOCK_STEP_CTX = { attempt : 1 } ;
10+
911const mockStep : WorkflowStep = {
1012 do : vi
1113 . fn ( )
1214 . mockImplementation (
1315 async (
1416 _name : string ,
15- configOrCallback : WorkflowStepConfig | ( ( ) => Promise < any > ) ,
16- maybeCallback ?: ( ) => Promise < any > ,
17+ configOrCallback : WorkflowStepConfig | ( ( ... args : unknown [ ] ) => Promise < any > ) ,
18+ maybeCallback ?: ( ... args : unknown [ ] ) => Promise < any > ,
1719 ) => {
1820 let count = 0 ;
1921
@@ -22,9 +24,9 @@ const mockStep: WorkflowStep = {
2224
2325 try {
2426 if ( typeof configOrCallback === 'function' ) {
25- return await configOrCallback ( ) ;
27+ return await configOrCallback ( MOCK_STEP_CTX ) ;
2628 } else {
27- return await ( maybeCallback ? maybeCallback ( ) : Promise . resolve ( ) ) ;
29+ return await ( maybeCallback ? maybeCallback ( MOCK_STEP_CTX ) : Promise . resolve ( ) ) ;
2830 }
2931 } catch {
3032 await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
@@ -427,6 +429,26 @@ describe.skipIf(NODE_MAJOR_VERSION < 20)('workflows', () => {
427429 ] ) ;
428430 } ) ;
429431
432+ test ( 'Forwards step context (ctx) to user callback' , async ( ) => {
433+ const callbackSpy = vi . fn ( ) . mockResolvedValue ( { ok : true } ) ;
434+
435+ class CtxTestWorkflow {
436+ constructor ( _ctx : ExecutionContext , _env : unknown ) { }
437+
438+ async run ( _event : Readonly < WorkflowEvent < Params > > , step : WorkflowStep ) : Promise < void > {
439+ await step . do ( 'ctx step' , callbackSpy ) ;
440+ }
441+ }
442+
443+ const TestWorkflowInstrumented = instrumentWorkflowWithSentry ( getSentryOptions , CtxTestWorkflow as any ) ;
444+ const workflow = new TestWorkflowInstrumented ( mockContext , { } ) as CtxTestWorkflow ;
445+ const event = { payload : { } , timestamp : new Date ( ) , instanceId : INSTANCE_ID } ;
446+ await workflow . run ( event , mockStep ) ;
447+
448+ expect ( callbackSpy ) . toHaveBeenCalledTimes ( 1 ) ;
449+ expect ( callbackSpy ) . toHaveBeenCalledWith ( MOCK_STEP_CTX ) ;
450+ } ) ;
451+
430452 test ( 'Step.do span becomes child of surrounding custom span' , async ( ) => {
431453 class ParentChildWorkflow {
432454 constructor ( _ctx : ExecutionContext , _env : unknown ) { }
0 commit comments