When trying to test an action that is creating a timer in Scala a confusing error is received:
Incompatible ActionContext instance. Found class kalix.scalasdk.testkit.impl.TestKitActionContext, expecting kalix.javasdk.impl.action.ActionContextImpl
Reproducting this is easy:
In test:
"handle command ProcessIdChanged" in {
val service = IdPoliciesActionImplTestKit(new IdPoliciesActionImpl(_))
val result = service.processIdChanged(IdState(id = "123456"))
}
In “actual code”:
override def processIdChanged(idState: IdState): Action.Effect[Empty] = {
val timerRegistration = timers
.startSingleTimer(
name = s"expire-id-timer-${idState.Id}",
delay = 30.minutes,
deferredCall = components.Id
.expire(ExpireIdCommand(id = idState.businessId))
)
.map(_ => Empty.defaultInstance)
effects.asyncReply(timerRegistration)
}