2323import static io .serverlessworkflow .fluent .func .dsl .FuncDSL .http ;
2424import static io .serverlessworkflow .fluent .func .dsl .FuncDSL .listen ;
2525import static io .serverlessworkflow .fluent .func .dsl .FuncDSL .produced ;
26+ import static io .serverlessworkflow .fluent .func .dsl .FuncDSL .subflow ;
2627import static io .serverlessworkflow .fluent .func .dsl .FuncDSL .switchWhenOrElse ;
2728import static io .serverlessworkflow .fluent .func .dsl .FuncDSL .toOne ;
29+ import static io .serverlessworkflow .fluent .func .dsl .FuncDSL .workflow ;
2830import static io .serverlessworkflow .fluent .spec .dsl .DSL .use ;
2931import static org .junit .jupiter .api .Assertions .assertEquals ;
32+ import static org .junit .jupiter .api .Assertions .assertFalse ;
3033import static org .junit .jupiter .api .Assertions .assertInstanceOf ;
3134import static org .junit .jupiter .api .Assertions .assertNotNull ;
3235import static org .junit .jupiter .api .Assertions .assertNull ;
3336
3437import io .serverlessworkflow .api .types .CallHTTP ;
3538import io .serverlessworkflow .api .types .Export ;
36- import io .serverlessworkflow .api .types .FlowDirectiveEnum ;
3739import io .serverlessworkflow .api .types .Task ;
3840import io .serverlessworkflow .api .types .TaskItem ;
3941import io .serverlessworkflow .api .types .Workflow ;
@@ -174,6 +176,50 @@ void mixed_chaining_order_and_exports() {
174176 assertNotNull (t2 .getListenTask ().getExport (), "listen step should carry export" );
175177 }
176178
179+ @ Test
180+ void subflow_task_builds_from_func_dsl () {
181+ Workflow wf =
182+ FuncWorkflowBuilder .workflow ("step-subflow" )
183+ .tasks (
184+ subflow (workflow ("child.ns" , "child-flow" , "2.3.4" ).input ("id" , 99 ).await (false )))
185+ .build ();
186+
187+ List <TaskItem > items = wf .getDo ();
188+ assertEquals (1 , items .size ());
189+
190+ Task t = items .get (0 ).getTask ();
191+ assertNotNull (t .getRunTask (), "RunTask expected" );
192+ var run = t .getRunTask ().getRun ().getRunWorkflow ();
193+ assertNotNull (run , "RunWorkflow should be present" );
194+ assertEquals ("child.ns" , run .getWorkflow ().getNamespace ());
195+ assertEquals ("child-flow" , run .getWorkflow ().getName ());
196+ assertEquals ("2.3.4" , run .getWorkflow ().getVersion ());
197+ assertEquals (99 , run .getWorkflow ().getInput ().getAdditionalProperties ().get ("id" ));
198+ assertFalse (run .isAwait (), "await(false) should be preserved as false" );
199+ }
200+
201+ @ Test
202+ void subflow_builder_style_builds_correctly () {
203+ Workflow wf =
204+ FuncWorkflowBuilder .workflow ("subflow-builder" )
205+ .tasks (
206+ subflow (
207+ "my-subflow" ,
208+ sub ->
209+ sub .namespace ("child.ns" )
210+ .name ("child-flow" )
211+ .version ("1.0.0" )
212+ .input (Map .of ("key" , "val" ))))
213+ .build ();
214+
215+ Task t = wf .getDo ().get (0 ).getTask ();
216+ assertNotNull (t .getRunTask ());
217+ var run = t .getRunTask ().getRun ().getRunWorkflow ();
218+ assertEquals ("my-subflow" , wf .getDo ().get (0 ).getName ());
219+ assertEquals ("child-flow" , run .getWorkflow ().getName ());
220+ assertEquals ("val" , run .getWorkflow ().getInput ().getAdditionalProperties ().get ("key" ));
221+ }
222+
177223 @ Test
178224 void switchWhenOrElse_jq_to_taskName () {
179225 Workflow wf =
@@ -191,13 +237,16 @@ void switchWhenOrElse_jq_to_taskName() {
191237 void switchWhenOrElse_jq_to_directive () {
192238 Workflow wf =
193239 FuncWorkflowBuilder .workflow ("jqSwitchDir" )
194- .tasks (switchWhenOrElse (".score >= 80" , "pass" , FlowDirectiveEnum .END ))
240+ .tasks (
241+ switchWhenOrElse (
242+ ".score >= 80" , "pass" , io .serverlessworkflow .api .types .FlowDirectiveEnum .END ))
195243 .build ();
196244 Task switchTask = wf .getDo ().get (0 ).getTask ();
197245 var items = switchTask .getSwitchTask ().getSwitch ();
198246 assertEquals (".score >= 80" , items .get (0 ).getSwitchCase ().getWhen ());
199247 assertEquals (
200- FlowDirectiveEnum .END , items .get (1 ).getSwitchCase ().getThen ().getFlowDirectiveEnum ());
248+ io .serverlessworkflow .api .types .FlowDirectiveEnum .END ,
249+ items .get (1 ).getSwitchCase ().getThen ().getFlowDirectiveEnum ());
201250 }
202251
203252 @ Test
@@ -447,7 +496,9 @@ void function_step_then_task_name_sets_flow_directive() {
447496 void function_step_then_flow_directive_enum_sets_end () {
448497 Workflow wf =
449498 FuncWorkflowBuilder .workflow ("intelligent-newsletter" )
450- .tasks (function ("myfunction" , String ::trim , String .class ).then (FlowDirectiveEnum .END ))
499+ .tasks (
500+ function ("myfunction" , String ::trim , String .class )
501+ .then (io .serverlessworkflow .api .types .FlowDirectiveEnum .END ))
451502 .build ();
452503
453504 List <TaskItem > items = wf .getDo ();
@@ -459,7 +510,7 @@ void function_step_then_flow_directive_enum_sets_end() {
459510 CallJava callJava = (CallJava ) t .getCallTask ().get ();
460511 assertNotNull (callJava .getThen (), "then() should be set on the task" );
461512 assertEquals (
462- FlowDirectiveEnum .END ,
513+ io . serverlessworkflow . api . types . FlowDirectiveEnum .END ,
463514 callJava .getThen ().getFlowDirectiveEnum (),
464515 "then() should be FlowDirectiveEnum.END" );
465516 }
@@ -495,7 +546,7 @@ void consume_step_then_flow_directive_enum_sets_end() {
495546 FuncWorkflowBuilder .workflow ("intelligent-newsletter" )
496547 .tasks (
497548 consume ("sendNewsletter" , (String s ) -> {}, String .class )
498- .then (FlowDirectiveEnum .END ))
549+ .then (io . serverlessworkflow . api . types . FlowDirectiveEnum .END ))
499550 .build ();
500551
501552 List <TaskItem > items = wf .getDo ();
@@ -507,7 +558,7 @@ void consume_step_then_flow_directive_enum_sets_end() {
507558 CallJava callJava = (CallJava ) t .getCallTask ().get ();
508559 assertNotNull (callJava .getThen (), "then() should be set on the consume task" );
509560 assertEquals (
510- FlowDirectiveEnum .END ,
561+ io . serverlessworkflow . api . types . FlowDirectiveEnum .END ,
511562 callJava .getThen ().getFlowDirectiveEnum (),
512563 "then() should be FlowDirectiveEnum.END" );
513564 }
0 commit comments