diff --git a/fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/BaseWorkflowBuilder.java b/fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/BaseWorkflowBuilder.java index 329e486e7..365322618 100644 --- a/fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/BaseWorkflowBuilder.java +++ b/fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/BaseWorkflowBuilder.java @@ -136,7 +136,11 @@ private SELF appendDo(Consumer configurer) { configurer.accept(doBuilder); final List newItems = doBuilder.build().getDo(); - if (newItems == null || newItems.isEmpty()) return self(); + if (newItems == null || newItems.isEmpty()) { + throw new IllegalStateException( + "Task list must contain at least one task. " + + "Use .tasks(d -> d.set(...)) or similar to define tasks."); + } final List merged = new ArrayList<>(this.workflow.getDo() != null ? this.workflow.getDo() : List.of()); diff --git a/fluent/spec/src/test/java/io/serverlessworkflow/fluent/spec/WorkflowBuilderTest.java b/fluent/spec/src/test/java/io/serverlessworkflow/fluent/spec/WorkflowBuilderTest.java index 4ba41c203..d12290c42 100644 --- a/fluent/spec/src/test/java/io/serverlessworkflow/fluent/spec/WorkflowBuilderTest.java +++ b/fluent/spec/src/test/java/io/serverlessworkflow/fluent/spec/WorkflowBuilderTest.java @@ -33,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import io.serverlessworkflow.api.types.AuthenticationPolicyUnion; @@ -112,6 +113,17 @@ void testUseAuthenticationsBasic() { assertNotNull(union.getBasicAuthenticationPolicy(), "BasicAuthenticationPolicy should be set"); } + @Test + void testEmptyTasksThrows() { + assertThrows(IllegalStateException.class, () -> WorkflowBuilder.workflow().tasks().build()); + } + + @Test + void testEmptyTasksConsumerThrows() { + assertThrows( + IllegalStateException.class, () -> WorkflowBuilder.workflow().tasks(d -> {}).build()); + } + @Test void testDoTaskSetAndForEach() { Workflow wf =