• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

TouK / nussknacker / 5976637142

25 Aug 2023 01:43PM UTC coverage: 81.47% (+0.03%) from 81.438%
5976637142

push

github

Filemon279
Fix migration in 1.11

25 of 25 new or added lines in 2 files covered. (100.0%)

14865 of 18246 relevant lines covered (81.47%)

5.62 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

62.5
/designer/server/src/main/scala/db/migration/V1_046__RenameSubprocessToFragmentDefinition.scala
1
package db.migration
2

3
import io.circe.Json._
4
import io.circe._
5
import pl.touk.nussknacker.ui.db.migration.ProcessJsonMigration
6

7
trait V1_046__RenameSubprocessToFragmentDefinition extends ProcessJsonMigration {
8

9
  override def updateProcessJson(jsonProcess: Json): Option[Json] =
10
    V1_046__RenameSubprocessToFragmentDefinition.updateProcessJson(jsonProcess)
×
11

12
}
13

14
object V1_046__RenameSubprocessToFragmentDefinition {
15

16
  private val legacyProperty = "subprocessParams"
2✔
17
  private val newProperty = "fragmentParams"
2✔
18

19
  private[migration] def updateProcessJson(jsonProcess: Json): Option[Json] = {
20
    val updatedNodes = updateField(jsonProcess, "nodes", updateCanonicalNodes)
2✔
21
    val updateAdditionalBranches = updateField(updatedNodes, "additionalBranches", array => updateNodes(array, updateCanonicalNodes))
2✔
22
    Option(updateAdditionalBranches)
2✔
23
  }
24

25
  private def updateCanonicalNodes(array: Json): Json = {
26
    updateNodes(array, json => updatePropertyKey(updateCanonicalNode(json)))
2✔
27
  }
28

29
  private def updateField(obj: Json, field: String, update: Json => Json): Json = {
30
    (obj.hcursor downField field).success.flatMap(_.withFocus(update).top).getOrElse(obj)
2✔
31
  }
32

33
  private def updateNodes(array: Json, fun: Json => Json) = fromValues(array.asArray.getOrElse(List()).map(fun))
2✔
34

35
  private def updateCanonicalNode(node: Json): Json = {
36
    node.hcursor.downField("type").focus.flatMap(_.asString).getOrElse("") match {
2✔
37
      case "SubprocessInput" =>
2✔
38
        val updateType = updateField(node, "type", _ => Json.fromString("FragmentInput"))
2✔
39
        updateField(updateType, "outputs", outputs => outputs.mapObject(obj => obj.mapValues(updateCanonicalNodes)))
2✔
40
      case "FragmentInput" => updateField(node, "outputs", outputs => outputs.mapObject(obj => obj.mapValues(updateCanonicalNodes)))
×
41
      case "SubprocessOutput" => updateField(node, "type", _ => Json.fromString("FragmentOutput"))
×
42
      case "SubprocessOutputDefinition" => updateField(node, "type", _ => Json.fromString("FragmentOutputDefinition"))
×
43
      case "SubprocessInputDefinition" => updateField(node, "type", _ => Json.fromString("FragmentInputDefinition"))
×
44
      case "Switch" =>
×
45
        val updatedDefault = updateField(node, "defaultNext", updateCanonicalNodes)
×
46
        updateField(updatedDefault, "nexts", updateNodes(_, updateField(_, "nodes", updateCanonicalNodes)))
×
47
      case "Filter" => updateField(node, "nextFalse", updateCanonicalNodes)
2✔
48
      case "Split" => updateField(node, "nexts", updateNodes(_, updateCanonicalNodes))
×
49
      case _ => node
2✔
50
    }
51
  }
52

53
  private def updatePropertyKey(node: Json): Json = {
54
    node.hcursor.withFocus(json => {
55
      json.asObject.map {
56
        case obj if obj.contains(legacyProperty) =>
57
          Json.fromJsonObject(obj
58
            .add(newProperty, obj(legacyProperty).get)
59
            .filterKeys(_ != legacyProperty))
60
        case _ => json
61
      }.getOrElse(json)
62
    }).top.getOrElse(node)
2✔
63
  }
64

65
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc