Skip to content

Commit 436e32e

Browse files
Enricher output mocking in tests - wip
1 parent a97109c commit 436e32e

File tree

7 files changed

+21
-10
lines changed

7 files changed

+21
-10
lines changed

defaultModel/src/main/scala/pl/touk/nussknacker/defaultmodel/migrations/DecisionTableParameterNamesMigration.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ object DecisionTableParameterNamesMigration extends NodeMigration {
1313
override val description: String = "Change Decision Table component parameter names"
1414

1515
override def migrateNode(metaData: MetaData): PartialFunction[node.NodeData, node.NodeData] = {
16-
case enricher @ Enricher(_, service @ ServiceRef(_, params), _, _) =>
16+
case enricher @ Enricher(_, service @ ServiceRef(_, params), _, _, _) =>
1717
enricher.copy(service = service.copy(parameters = renameParams(params)))
1818
}
1919

designer/server/src/main/scala/pl/touk/nussknacker/ui/util/PdfExporter.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ object PdfExporter extends LazyLogging {
208208
case Source(_, SourceRef(typ, params), _) =>
209209
("Type", typ) :: params.map(p => (p.name.value, p.expression.expression))
210210
case Filter(_, expression, _, _) => List(("Expression", expression.expression))
211-
case Enricher(_, ServiceRef(typ, params), output, _) =>
211+
case Enricher(_, ServiceRef(typ, params), output, _, _) =>
212212
("Type", typ) :: ("Output", output) :: params.map(p => (p.name.value, p.expression.expression))
213213
// TODO: what about Swtich??
214214
case Switch(_, expression, exprVal, _) => expression.map(e => ("Expression", e.expression)).toList

engine/flink/management/dev-model/src/main/scala/pl/touk/nussknacker/engine/management/sample/SampleAdditionalInfoProvider.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class SampleAdditionalInfoProvider extends AdditionalInfoProvider {
1414

1515
override def nodeAdditionalInfo(config: Config)(nodeData: node.NodeData): Future[Option[AdditionalInfo]] = {
1616
nodeData match {
17-
case Enricher(_, ServiceRef("paramService", idParam :: Nil), _, _) =>
17+
case Enricher(_, ServiceRef("paramService", idParam :: Nil), _, _, _) =>
1818
Future.successful(Some {
1919
val id = idParam.expression.expression.replace("'", "")
2020
MarkdownAdditionalInfo(s"""

scenario-api/src/main/scala/pl/touk/nussknacker/engine/graph/node.scala

+2-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,8 @@ object node {
195195
id: String,
196196
service: ServiceRef,
197197
output: String,
198-
additionalFields: Option[UserDefinedAdditionalNodeFields] = None
198+
additionalFields: Option[UserDefinedAdditionalNodeFields] = None,
199+
mockExpression: Option[Expression] = None
199200
) extends OneOutputSubsequentNodeData
200201
with WithComponent
201202
with WithParameters {

scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/Interpreter.scala

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import cats.effect.IO
55
import cats.syntax.all._
66
import com.github.ghik.silencer.silent
77
import pl.touk.nussknacker.engine.Interpreter._
8+
import pl.touk.nussknacker.engine.RuntimeMode.Test
89
import pl.touk.nussknacker.engine.api._
910
import pl.touk.nussknacker.engine.api.component.NodesDeploymentData
1011
import pl.touk.nussknacker.engine.api.exception.NuExceptionInfo
@@ -143,7 +144,12 @@ private class InterpreterInternal[F[_]: Monad](
143144
interpretationResult(node, FragmentEndReference(id, fields), newCtx)
144145
}
145146
)
146-
case Enricher(_, ref, outName, next) =>
147+
case Enricher(_, ref, outName, next, mockedOutput) =>
148+
if (runtimeMode == Test && mockedOutput.isDefined) {
149+
//todo: refactor
150+
val valueWithModifiedContext = expressionEvaluator.evaluate[Any](mockedOutput.get, outName, node.id, ctx)
151+
interpretNext(next, ctx.withVariable(outName, valueWithModifiedContext.value))
152+
}
147153
invokeWrappedInInterpreterShape(ref, ctx).flatMap {
148154
case Left(ValueWithContext(out, newCtx)) => interpretNext(node, next, newCtx.withVariable(outName, out))
149155
case Right(exInfo) => Monad[F].pure(List(Right(exInfo)))

scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compile/PartSubGraphCompiler.scala

+8-4
Original file line numberDiff line numberDiff line change
@@ -210,15 +210,19 @@ class PartSubGraphCompiler(nodeCompiler: NodeCompiler) {
210210
(ref, next) => compiledgraph.node.Processor(id, ref, next, isDisabled.contains(true))
211211
)
212212

213-
case enricher @ Enricher(id, _, output, _) =>
213+
case enricher @ Enricher(id, _, output, _, mockExpression) =>
214214
val NodeCompilationResult(typingInfo, parameters, newCtx, validatedServiceRef, _) =
215215
nodeCompiler.compileEnricher(enricher, ctx, outputVar = OutputVar.enricher(output))
216+
//tddo: compile expression
216217

217-
CompilationResult.map3(
218+
//todo: type expression here and check if it match output variable type
219+
220+
CompilationResult.map4(
218221
toCompilationResult(validatedServiceRef, typingInfo, parameters),
219222
CompilationResult(newCtx),
220-
compile(next, newCtx.getOrElse(ctx))
221-
)((ref, _, next) => compiledgraph.node.Enricher(id, ref, output, next))
223+
compile(next, newCtx.getOrElse(ctx)),
224+
225+
)((ref, _, next) => compiledgraph.node.Enricher(id, ref, output, next, ))
222226

223227
// here we don't do anything, in subgraphcompiler it's just pass through, we can't add input context here because it contains output variable context (not input)
224228
case CustomNode(id, _, nodeType, _, _) =>

scenario-compiler/src/main/scala/pl/touk/nussknacker/engine/compiledgraph/node.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ object node {
2626

2727
case class EndingProcessor(id: String, service: ServiceRef, isDisabled: Boolean) extends Node
2828

29-
case class Enricher(id: String, service: ServiceRef, output: String, next: Next) extends Node
29+
case class Enricher(id: String, service: ServiceRef, output: String, next: Next, mockedOutput: Option[CompiledExpression]) extends Node
3030

3131
case class Filter(
3232
id: String,

0 commit comments

Comments
 (0)