@@ -411,6 +411,20 @@ mod tests {
411411 }
412412 }
413413
414+ fn assert_node_result_id ( result : & NodeExecutionResult , expected_id : i64 ) {
415+ assert_eq ! (
416+ result. id,
417+ Some ( node_execution_result:: Id :: NodeId ( expected_id) )
418+ ) ;
419+ }
420+
421+ fn assert_function_result_id ( result : & NodeExecutionResult , expected_id : i64 ) {
422+ assert_eq ! (
423+ result. id,
424+ Some ( node_execution_result:: Id :: FunctionId ( expected_id) )
425+ ) ;
426+ }
427+
414428 fn sleep_handler (
415429 _args : & [ Argument ] ,
416430 _ctx : & mut ValueStore ,
@@ -420,6 +434,21 @@ mod tests {
420434 Signal :: Success ( null_value ( ) )
421435 }
422436
437+ fn echo_first_arg_handler (
438+ args : & [ Argument ] ,
439+ _ctx : & mut ValueStore ,
440+ _run : & mut ThunkRunner < ' _ > ,
441+ ) -> Signal {
442+ match args. first ( ) {
443+ Some ( Argument :: Eval ( value) ) => Signal :: Success ( value. clone ( ) ) ,
444+ _ => Signal :: Failure ( crate :: types:: errors:: runtime_error:: RuntimeError :: new (
445+ "T-TEST-000001" ,
446+ "MissingEchoArgument" ,
447+ "expected first eager argument" ,
448+ ) ) ,
449+ }
450+ }
451+
423452 #[ derive( Clone ) ]
424453 struct StubRemoteRuntime {
425454 result : NodeExecutionResult ,
@@ -848,6 +877,57 @@ mod tests {
848877 assert_eq ! ( expect_success( signal) , int_value( 42 ) ) ;
849878 }
850879
880+ #[ test]
881+ fn execution_report_includes_function_identifier_subflow_results ( ) {
882+ let mut handlers = FunctionStore :: default ( ) ;
883+ handlers. populate ( & [ FunctionRegistration :: eager ( "42" , echo_first_arg_handler, 1 ) ] ) ;
884+ let engine = ExecutionEngine { handlers } ;
885+
886+ let add_node = node (
887+ 1 ,
888+ "std::number::add" ,
889+ vec ! [
890+ function_thunk_param(
891+ 100 ,
892+ "lhs" ,
893+ "42" ,
894+ vec![ subflow_setting( "value" , Some ( int_value( 20 ) ) , false , true ) ] ,
895+ ) ,
896+ literal_param( 101 , "rhs" , int_value( 2 ) ) ,
897+ ] ,
898+ None ,
899+ ) ;
900+
901+ let report = engine. execute_graph_report ( 1 , vec ! [ add_node] , None , None , None , false ) ;
902+
903+ assert_eq ! ( report. exit_reason, ExitReason :: Success ) ;
904+ assert_eq ! ( expect_success( report. signal) , int_value( 22 ) ) ;
905+ assert_eq ! ( report. node_execution_results. len( ) , 2 ) ;
906+
907+ let function_result = & report. node_execution_results [ 0 ] ;
908+ assert_function_result_id ( function_result, 42 ) ;
909+ assert_eq ! ( function_result. parameter_results. len( ) , 1 ) ;
910+ assert_eq ! (
911+ function_result. parameter_results[ 0 ] . value,
912+ Some ( int_value( 20 ) )
913+ ) ;
914+ match function_result. result . as_ref ( ) {
915+ Some ( node_execution_result:: Result :: Success ( value) ) => {
916+ assert_eq ! ( value, & int_value( 20 ) ) ;
917+ }
918+ other => panic ! ( "expected function success result, got {:?}" , other) ,
919+ }
920+
921+ let node_result = & report. node_execution_results [ 1 ] ;
922+ assert_node_result_id ( node_result, 1 ) ;
923+ match node_result. result . as_ref ( ) {
924+ Some ( node_execution_result:: Result :: Success ( value) ) => {
925+ assert_eq ! ( value, & int_value( 22 ) ) ;
926+ }
927+ other => panic ! ( "expected node success result, got {:?}" , other) ,
928+ }
929+ }
930+
851931 #[ test]
852932 fn execution_report_includes_literal_node_parameter_results ( ) {
853933 let engine = ExecutionEngine :: new ( ) ;
@@ -867,7 +947,7 @@ mod tests {
867947 assert_eq ! ( report. node_execution_results. len( ) , 1 ) ;
868948
869949 let node_result = & report. node_execution_results [ 0 ] ;
870- assert_eq ! ( node_result. node_id , 1 ) ;
950+ assert_node_result_id ( node_result, 1 ) ;
871951 assert_eq ! ( node_result. parameter_results. len( ) , 2 ) ;
872952 assert_eq ! ( node_result. parameter_results[ 0 ] . value, Some ( int_value( 1 ) ) ) ;
873953 assert_eq ! ( node_result. parameter_results[ 1 ] . value, Some ( int_value( 2 ) ) ) ;
@@ -906,7 +986,7 @@ mod tests {
906986 assert_eq ! ( report. node_execution_results. len( ) , 2 ) ;
907987
908988 let node_result = & report. node_execution_results [ 1 ] ;
909- assert_eq ! ( node_result. node_id , 2 ) ;
989+ assert_node_result_id ( node_result, 2 ) ;
910990 assert_eq ! ( node_result. parameter_results. len( ) , 2 ) ;
911991 assert_eq ! ( node_result. parameter_results[ 0 ] . value, Some ( int_value( 7 ) ) ) ;
912992 assert_eq ! ( node_result. parameter_results[ 1 ] . value, Some ( int_value( 5 ) ) ) ;
@@ -939,7 +1019,7 @@ mod tests {
9391019 assert_eq ! ( report. node_execution_results. len( ) , 1 ) ;
9401020
9411021 let node_result = & report. node_execution_results [ 0 ] ;
942- assert_eq ! ( node_result. node_id , 1 ) ;
1022+ assert_node_result_id ( node_result, 1 ) ;
9431023 assert_eq ! ( node_result. parameter_results. len( ) , 3 ) ;
9441024 assert_eq ! ( node_result. parameter_results[ 0 ] . value, Some ( int_value( 200 ) ) ) ;
9451025 assert_eq ! (
@@ -961,10 +1041,10 @@ mod tests {
9611041 let engine = ExecutionEngine :: new ( ) ;
9621042 let remote = StubRemoteRuntime {
9631043 result : NodeExecutionResult {
964- node_id : 99 ,
9651044 started_at : 1 ,
9661045 finished_at : 2 ,
9671046 parameter_results : Vec :: new ( ) ,
1047+ id : Some ( node_execution_result:: Id :: NodeId ( 99 ) ) ,
9681048 result : None ,
9691049 } ,
9701050 } ;
@@ -987,7 +1067,7 @@ mod tests {
9871067 assert_eq ! ( report. node_execution_results. len( ) , 1 ) ;
9881068
9891069 let node_result = & report. node_execution_results [ 0 ] ;
990- assert_eq ! ( node_result. node_id , 1 ) ;
1070+ assert_node_result_id ( node_result, 1 ) ;
9911071 assert_eq ! ( node_result. parameter_results. len( ) , 1 ) ;
9921072 assert_eq ! ( node_result. parameter_results[ 0 ] . value, Some ( int_value( 20 ) ) ) ;
9931073 match node_result. result . as_ref ( ) {
@@ -1012,7 +1092,7 @@ mod tests {
10121092 assert_eq ! ( report. node_execution_results. len( ) , 1 ) ;
10131093
10141094 let node_result = & report. node_execution_results [ 0 ] ;
1015- assert_eq ! ( node_result. node_id , 1 ) ;
1095+ assert_node_result_id ( node_result, 1 ) ;
10161096 assert ! ( node_result. started_at >= 1_000_000_000_000_000 ) ;
10171097 assert ! ( node_result. finished_at > node_result. started_at) ;
10181098 assert ! ( node_result. finished_at - node_result. started_at >= 1_000 ) ;
@@ -1059,7 +1139,7 @@ mod tests {
10591139 let callback_results: Vec < _ > = report
10601140 . node_execution_results
10611141 . iter ( )
1062- . filter ( |result| result. node_id == 2 )
1142+ . filter ( |result| result. id == Some ( node_execution_result :: Id :: NodeId ( 2 ) ) )
10631143 . collect ( ) ;
10641144 assert_eq ! ( callback_results. len( ) , 3 ) ;
10651145
@@ -1093,7 +1173,7 @@ mod tests {
10931173 vec![ Some ( int_value( 3 ) ) , Some ( int_value( 2 ) ) ] ,
10941174 ]
10951175 ) ;
1096- assert_eq ! ( report. node_execution_results[ 3 ] . node_id , 1 ) ;
1176+ assert_node_result_id ( & report. node_execution_results [ 3 ] , 1 ) ;
10971177 }
10981178
10991179 #[ test]
0 commit comments