Skip to content

Commit 98349b0

Browse files
authored
feat: Support ignore in action result testkit API (#1354)
1 parent fe93892 commit 98349b0

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
lines changed

sdk/java-sdk-testkit/src/main/java/kalix/javasdk/testkit/ActionResult.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ public interface ActionResult<T> {
5757
*/
5858
CompletionStage<ActionResult<T>> getAsyncResult();
5959

60+
/** @return true if the returned effect was ignore, false if not */
61+
boolean isIgnore();
62+
6063
/** @return true if the call was an error, false if not */
6164
boolean isError();
6265

sdk/java-sdk-testkit/src/main/scala/kalix/javasdk/testkit/impl/ActionResultImpl.scala

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,22 @@ final class ActionResultImpl[T](effect: ActionEffectImpl.PrimaryEffect[T]) exten
5050

5151
def this(effect: Action.Effect[T]) = this(effect.asInstanceOf[ActionEffectImpl.PrimaryEffect[T]])
5252

53-
implicit val ec = ExecutionContext.Implicits.global
53+
private implicit val ec = ExecutionContext.Implicits.global
5454

5555
/** @return true if the call had an effect with a reply, false if not */
56-
def isReply(): Boolean = effect.isInstanceOf[ActionEffectImpl.ReplyEffect[T]]
56+
override def isReply(): Boolean = effect.isInstanceOf[ActionEffectImpl.ReplyEffect[T]]
5757

58-
def getReply(): T = {
58+
override def getReply(): T = {
5959
val reply = getEffectOfType(classOf[ActionEffectImpl.ReplyEffect[T]])
6060
reply.msg
6161
}
6262

6363
//TODO add metadata??
6464

6565
/** @return true if the call was forwarded, false if not */
66-
def isForward(): Boolean = effect.isInstanceOf[ActionEffectImpl.ForwardEffect[T]]
66+
override def isForward(): Boolean = effect.isInstanceOf[ActionEffectImpl.ForwardEffect[T]]
6767

68-
def getForward(): DeferredCallDetails[Any, T] =
68+
override def getForward(): DeferredCallDetails[Any, T] =
6969
effect match {
7070
case ActionEffectImpl.ForwardEffect(serviceCall: GrpcDeferredCall[Any @unchecked, T @unchecked], _) =>
7171
TestKitDeferredCall(serviceCall)
@@ -76,22 +76,24 @@ final class ActionResultImpl[T](effect: ActionEffectImpl.PrimaryEffect[T]) exten
7676

7777
// TODO rewrite
7878
/** @return true if the call was async, false if not */
79-
def isAsync(): Boolean = effect.isInstanceOf[ActionEffectImpl.AsyncEffect[T]]
79+
override def isAsync(): Boolean = effect.isInstanceOf[ActionEffectImpl.AsyncEffect[T]]
8080

81-
def getAsyncResult(): CompletionStage[ActionResult[T]] = {
81+
override def getAsyncResult(): CompletionStage[ActionResult[T]] = {
8282
val async = getEffectOfType(classOf[ActionEffectImpl.AsyncEffect[T]])
8383
async.effect.map(new ActionResultImpl(_).asInstanceOf[ActionResult[T]]).toJava
8484
}
8585

8686
/** @return true if the call was an error, false if not */
87-
def isError(): Boolean = effect.isInstanceOf[ActionEffectImpl.ErrorEffect[T]]
87+
override def isError(): Boolean = effect.isInstanceOf[ActionEffectImpl.ErrorEffect[T]]
8888

89-
def getError(): String = {
89+
override def getError(): String = {
9090
val error = getEffectOfType(classOf[ActionEffectImpl.ErrorEffect[T]])
9191
error.description
9292
}
9393

94-
def getErrorStatusCode(): Status.Code = {
94+
override def isIgnore(): Boolean = effect == ActionEffectImpl.IgnoreEffect()
95+
96+
override def getErrorStatusCode(): Status.Code = {
9597
val error = getEffectOfType(classOf[ActionEffectImpl.ErrorEffect[T]])
9698
error.statusCode.getOrElse(Status.Code.UNKNOWN)
9799
}
@@ -109,7 +111,7 @@ final class ActionResultImpl[T](effect: ActionEffectImpl.PrimaryEffect[T]) exten
109111
"expected effect type [" + expectedClass.getName + "] but found [" + effect.getClass.getName + "]")
110112
}
111113

112-
def getSideEffects(): JList[DeferredCallDetails[_, _]] =
114+
override def getSideEffects(): JList[DeferredCallDetails[_, _]] =
113115
toDeferredCallDetails(effect.internalSideEffects())
114116

115117
}

sdk/scala-sdk-testkit/src/main/scala/kalix/scalasdk/testkit/ActionResult.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ trait ActionResult[T] {
5757
*/
5858
def asyncResult: Future[ActionResult[T]]
5959

60+
/** @return true if the returned effect was ignore, false if not */
61+
def isIgnore: Boolean
62+
6063
/** @return true if the call was an error, false if not */
6164
def isError: Boolean
6265

sdk/scala-sdk-testkit/src/main/scala/kalix/scalasdk/testkit/impl/ActionResultImpl.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ final class ActionResultImpl[T](val effect: ActionEffectImpl.PrimaryEffect[T]) e
7272

7373
override def isError: Boolean = effect.isInstanceOf[ActionEffectImpl.ErrorEffect[_]]
7474

75+
override def isIgnore: Boolean = effect == ActionEffectImpl.IgnoreEffect()
76+
7577
override def errorDescription: String = effect match {
7678
case e: ActionEffectImpl.ErrorEffect[_] => e.description
7779
case _ => throw new IllegalStateException(s"The effect was not an error but [$effectName]")

0 commit comments

Comments
 (0)