Fix #1451 - Resolve duration expressions; Improve wait DSL contract#1454
Conversation
Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com>
There was a problem hiding this comment.
Pull request overview
Fixes #1449 by making WaitExecutor correctly support inline, literal, and expression-based durations (with runtime evaluation for expressions) and by expanding the fluent DSLs (DSL + FuncDSL) with ergonomic wait* convenience methods.
Changes:
- Updated
WaitExecutorto parse/validate inline + literal durations at build time and evaluate duration expressions at runtime with clearer error messages. - Added
waitSeconds/minutes/hours/days/millisandwait(Duration)convenience methods tofluent/specDSL andexperimentalFuncDSL. - Added new unit/integration tests plus YAML workflow samples and accompanying design/plan docs.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| impl/core/src/main/java/io/serverlessworkflow/impl/executors/WaitExecutor.java | Adds literal parsing + runtime evaluation for duration expressions; refactors wait duration handling. |
| impl/test/src/test/java/io/serverlessworkflow/impl/test/WaitExecutorTest.java | Adds integration tests for wait durations (inline/literal/expression) and workflow status transitions. |
| impl/test/src/test/resources/workflows-samples/wait-expression-input.yaml | New YAML sample: wait duration read from workflow input via expression. |
| impl/test/src/test/resources/workflows-samples/wait-expression-context.yaml | New YAML sample: wait duration read from workflow context via expression. |
| fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/dsl/DSL.java | Adds wait convenience methods (waitSeconds, waitMillis, wait(Duration), etc.). |
| fluent/spec/src/test/java/io/serverlessworkflow/fluent/spec/dsl/DSLWaitTest.java | Adds unit tests validating the new DSL wait convenience methods. |
| experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/FuncTaskItemListBuilder.java | Adds wait(...) task builder methods needed by FuncDSL. |
| experimental/fluent/func/src/main/java/io/serverlessworkflow/fluent/func/dsl/FuncDSL.java | Adds FuncDSL wait support + convenience methods mirroring DSL. |
| experimental/fluent/func/src/test/java/io/serverlessworkflow/fluent/func/FuncDSLWaitTest.java | Adds unit tests validating FuncDSL wait methods. |
| docs/superpowers/specs/2026-06-11-waittask-ergonomics-design.md | Design spec documenting the intended WaitTask ergonomics and executor behavior. |
| docs/superpowers/plans/2026-06-11-waittask-ergonomics.md | Implementation plan describing the step-by-step rollout and tests. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com>
Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com>
Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Ricardo Zanini <ricardozanini@gmail.com>
|
@ricardozanini I have created PR ricardozanini#2 to resuse already existing parsing duration code and to reduce time spend by the test. |
Reusing existing code to deal with TimeoutAfter and keep the test execution fast
fjtirado
left a comment
There was a problem hiding this comment.
Comments incorporated into additional PR
Review comments
| // ========== DurationInline Tests ========== | ||
|
|
||
| @Test | ||
| @Disabled("This one slow down") |
| long elapsed = System.currentTimeMillis() - startTime; | ||
|
|
||
| assertThat(model).isNotNull(); | ||
| assertThat(elapsed).isGreaterThanOrEqualTo(200); // 1 second + 500 milliseconds |
| .build(); | ||
|
|
||
| long startTime = System.currentTimeMillis(); | ||
| WorkflowModel model = appl.workflowDefinition(workflow).instance(Map.of()).start().join(); | ||
| long elapsed = System.currentTimeMillis() - startTime; |
|
@fjtirado AI let a few comments for you. The |
Fix #1451