From a2f88633117e1bd7238c7ae9a5f000f34f4289c8 Mon Sep 17 00:00:00 2001 From: fjtirado Date: Fri, 1 Aug 2025 18:39:04 +0200 Subject: [PATCH] Test for strong types Signed-off-by: fjtirado --- .../impl/expressions/func/JavaExpressionFactory.java | 5 +++-- .../impl/expressions/func/JavaModel.java | 2 +- .../test/java/io/serverless/workflow/impl/CallTest.java | 7 ++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java index eba835f2..79bb6a8e 100644 --- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java +++ b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java @@ -55,7 +55,8 @@ public WorkflowFilter buildFilter(String expr, Object value) { if (value instanceof Function func) { return (w, t, n) -> modelFactory.fromAny(func.apply(n.asJavaObject())); } else if (value instanceof TypedFunction func) { - return (w, t, n) -> modelFactory.fromAny(func.function().apply(n.as(func.argClass()))); + return (w, t, n) -> + modelFactory.fromAny(func.function().apply(n.as(func.argClass()).orElseThrow())); } else if (value instanceof Predicate pred) { return fromPredicate(pred); } else if (value instanceof TypedPredicate pred) { @@ -78,7 +79,7 @@ private WorkflowFilter fromPredicate(Predicate pred) { @SuppressWarnings({"rawtypes", "unchecked"}) private WorkflowFilter fromPredicate(TypedPredicate pred) { - return (w, t, n) -> modelFactory.from(pred.pred().test(n.as(pred.argClass()))); + return (w, t, n) -> modelFactory.from(pred.pred().test(n.as(pred.argClass()).orElseThrow())); } @Override diff --git a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModel.java b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModel.java index 8c2992f2..11cff762 100644 --- a/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModel.java +++ b/experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaModel.java @@ -113,7 +113,7 @@ public Class objectClass() { @Override public Optional as(Class clazz) { - return object != null && object.getClass().isAssignableFrom(clazz) + return object != null && clazz.isAssignableFrom(object.getClass()) ? Optional.of(clazz.cast(object)) : Optional.empty(); } diff --git a/experimental/lambda/src/test/java/io/serverless/workflow/impl/CallTest.java b/experimental/lambda/src/test/java/io/serverless/workflow/impl/CallTest.java index 3de3bb96..078cc5e3 100644 --- a/experimental/lambda/src/test/java/io/serverless/workflow/impl/CallTest.java +++ b/experimental/lambda/src/test/java/io/serverless/workflow/impl/CallTest.java @@ -55,7 +55,8 @@ void testJavaFunction() throws InterruptedException, ExecutionException { "javaCall", new Task() .withCallTask( - new CallTaskJava(CallJava.function(JavaFunctions::getName)))))); + new CallTaskJava( + CallJava.function(JavaFunctions::getName, Person.class)))))); assertThat( app.workflowDefinition(workflow) @@ -84,7 +85,7 @@ void testForLoop() throws InterruptedException, ExecutionException { .withForTask( new ForTaskFunction() .withWhile(CallTest::isEven) - .withCollection(v -> (Collection) v) + .withCollection(v -> v, Collection.class) .withFor(forConfig) .withDo( List.of( @@ -127,7 +128,7 @@ void testSwitch() throws InterruptedException, ExecutionException { new SwitchItem( "odd", new SwitchCaseFunction() - .withPredicate(CallTest::isOdd) + .withPredicate(CallTest::isOdd, Integer.class) .withThen( new FlowDirective() .withFlowDirectiveEnum(