@@ -59,6 +59,77 @@ describe("Engine", () => {
5959 ) . toHaveLength ( 1 ) ;
6060 } ) ;
6161
62+ it ( "should preserve NonRetryableError message when compat flag is enabled" , async ( {
63+ expect,
64+ } ) => {
65+ const instanceId = "NON-RETRYABLE-PRESERVE-MSG" ;
66+ const engineId = env . ENGINE . idFromName ( instanceId ) ;
67+ const engineStub = env . ENGINE . get ( engineId ) ;
68+
69+ vi . stubGlobal ( "Cloudflare" , {
70+ compatibilityFlags : {
71+ workflows_preserve_non_retryable_error_message : true ,
72+ } ,
73+ } ) ;
74+
75+ try {
76+ setTestWorkflowCallback ( async ( _event , step ) => {
77+ await step . do ( "failing-step" , async ( ) => {
78+ throw new NonRetryableError ( "my custom error message" ) ;
79+ } ) ;
80+ } ) ;
81+
82+ await engineStub
83+ . init (
84+ 12346 ,
85+ { } as DatabaseWorkflow ,
86+ { } as DatabaseVersion ,
87+ { id : instanceId } as DatabaseInstance ,
88+ { payload : { } , timestamp : new Date ( ) , instanceId }
89+ )
90+ . catch ( ( ) => { } ) ;
91+
92+ await vi . waitUntil (
93+ async ( ) => {
94+ try {
95+ const logs = ( await env . ENGINE . get (
96+ engineId
97+ ) . readLogs ( ) ) as EngineLogs ;
98+ return logs . logs . some (
99+ ( val ) => val . event === InstanceEvent . WORKFLOW_FAILURE
100+ ) ;
101+ } catch ( e ) {
102+ if ( isAbortError ( e ) ) {
103+ return false ;
104+ }
105+ throw e ;
106+ }
107+ } ,
108+ { timeout : 3000 }
109+ ) ;
110+
111+ const logs = ( await env . ENGINE . get ( engineId ) . readLogs ( ) ) as EngineLogs ;
112+
113+ const workflowFailure = logs . logs . find (
114+ ( val ) => val . event === InstanceEvent . WORKFLOW_FAILURE
115+ ) ;
116+ expect ( workflowFailure ?. metadata . error ) . toEqual ( {
117+ name : "NonRetryableError" ,
118+ message : "my custom error message" ,
119+ } ) ;
120+
121+ const attemptFailure = logs . logs . find (
122+ ( val ) => val . event === InstanceEvent . ATTEMPT_FAILURE
123+ ) ;
124+ expect ( attemptFailure ?. metadata . error ) . toEqual ( {
125+ name : "NonRetryableError" ,
126+ message : "my custom error message" ,
127+ } ) ;
128+ } finally {
129+ vi . unstubAllGlobals ( ) ;
130+ }
131+ } ) ;
132+
62133 it ( "should not error out if step fails but is try-catched" , async ( {
63134 expect,
64135 } ) => {
0 commit comments