aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/InterventionFormatSuite.scala
blob: 784a655e280b31f386780d847b134a86a0b30a03 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package xyz.driver.pdsuidomain.formats.json.sprayformats

import spray.json._
import org.scalatest.{FlatSpec, Matchers}
import xyz.driver.pdsuicommon.domain.{LongId, StringId}
import xyz.driver.pdsuidomain.entities.{Intervention, InterventionArm, InterventionType, InterventionWithArms}

class InterventionFormatSuite extends FlatSpec with Matchers {
  import intervention._

  "Json format for Intervention" should "read and write correct JSON" in {
    val intervention = Intervention(
      id = LongId(1),
      trialId = StringId("NCT000001"),
      name = "intervention name",
      originalName = "orig name",
      typeId = Some(LongId(10)),
      originalType = Some("orig type"),
      description = "",
      originalDescription = "",
      isActive = true
    )
    val arms = List(
      InterventionArm(interventionId = intervention.id, armId = LongId(20)),
      InterventionArm(interventionId = intervention.id, armId = LongId(21)),
      InterventionArm(interventionId = intervention.id, armId = LongId(22))
    )
    val orig = InterventionWithArms(
      intervention = intervention,
      arms = arms
    )
    val writtenJson = interventionWriter.write(orig)

    writtenJson should be(
      """{"id":1,"name":"intervention name","typeId":10,"description":"","isActive":true,"arms":[20,21,22],
        "trialId":"NCT000001","originalName":"orig name","originalDescription":"","originalType":"orig type"}""".parseJson)

    val updateInterventionJson = """{"description":"descr","arms":[21,22]}""".parseJson
    val expectedUpdatedIntervention = orig.copy(
      intervention = intervention.copy(description = "descr"),
      arms = List(
        InterventionArm(interventionId = intervention.id, armId = LongId(21)),
        InterventionArm(interventionId = intervention.id, armId = LongId(22))
      )
    )
    val parsedUpdateIntervention = applyUpdateToInterventionWithArms(updateInterventionJson, orig)
    parsedUpdateIntervention should be(expectedUpdatedIntervention)
  }

  "Json format for InterventionType" should "read and write correct JSON" in {
    val interventionType = InterventionType(
      id = LongId(10),
      name = "type name"
    )
    val writtenJson = interventionTypeFormat.write(interventionType)

    writtenJson should be("""{"id":10,"name":"type name"}""".parseJson)

    val parsedInterventionType = interventionTypeFormat.read(writtenJson)
    parsedInterventionType should be(interventionType)
  }

}