aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/MedicalRecordFormatSuite.scala
blob: 899e5c9cc20b52e76399648ed2094078ea9d6ecc (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package xyz.driver.pdsuidomain.formats.json.sprayformats

import java.time.LocalDateTime
import java.util.UUID

import spray.json._
import org.scalatest.{FlatSpec, Matchers}
import xyz.driver.pdsuicommon.domain.{LongId, TextJson, UuidId}
import xyz.driver.pdsuidomain.entities.{MedicalRecord, RecordRequestId}

class MedicalRecordFormatSuite extends FlatSpec with Matchers {
  import record._
  import MedicalRecord._

  "Json format for MedicalRecord" should "read and write correct JSON" in {
    val orig = MedicalRecord(
      id = LongId(1),
      status = Status.New,
      assignee = None,
      previousStatus = None,
      previousAssignee = None,
      lastActiveUserId = None,
      lastUpdate = LocalDateTime.parse("2017-08-10T18:00:00"),
      physician = Some("physician"),
      meta = None,
      predictedMeta = None,
      predictedDocuments = None,
      disease = "Breast",
      requestId = RecordRequestId(UUID.fromString("7b54a75d-4197-4b27-9045-b9b6cb131be9")),
      caseId = None,
      patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343")
    )
    val writtenJson = recordFormat.write(orig)

    writtenJson should be (
      """{"id":1,"status":"New","assignee":null,"previousStatus":null,"previousAssignee":null,"lastActiveUser":null,
        "lastUpdate":"2017-08-10T18:00Z","meta":[],"patientId":"748b5884-3528-4cb9-904b-7a8151d6e343","caseId":null,
        "requestId":"7b54a75d-4197-4b27-9045-b9b6cb131be9","disease":"Breast","physician":"physician"}""".parseJson)

    val createRecordJson =
      """{"disease":"Breast","patientId":"748b5884-3528-4cb9-904b-7a8151d6e343","requestId":"7b54a75d-4197-4b27-9045-b9b6cb131be9"}""".parseJson
    val expectedCreatedRecord = MedicalRecord(
      id = LongId(0),
      status = MedicalRecord.Status.New,
      previousStatus = None,
      assignee = None,
      previousAssignee = None,
      lastActiveUserId = None,
      patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
      requestId = RecordRequestId(UUID.fromString("7b54a75d-4197-4b27-9045-b9b6cb131be9")),
      disease = "Breast",
      caseId = None,
      physician = None,
      meta = None,
      predictedMeta = None,
      predictedDocuments = None,
      lastUpdate = LocalDateTime.now()
    )
    val parsedCreatedRecord = recordFormat.read(createRecordJson).copy(lastUpdate = expectedCreatedRecord.lastUpdate)
    parsedCreatedRecord should be(expectedCreatedRecord)

    val updateRecordJson =
      """{"meta":[{"type":"duplicate","predicted":true,"startPage":1.0,"endPage":2.0,"startOriginalPage":1.0},
        {"type":"reorder","items":[1,2]},
        {"type":"rotation","items":{"item1":1,"item2":2}}]}""".parseJson
    val expectedUpdatedRecord = orig.copy(
      meta = Some(TextJson(List(
        Meta.Duplicate(predicted = Some(true), startPage = 1.0, endPage = 2.0, startOriginalPage = 1.0, endOriginalPage = None),
        Meta.Reorder(predicted = None, items = Seq(1, 2)),
        Meta.Rotation(predicted = None, items = Map("item1" -> 1, "item2" -> 2))
      )))
    )
    val parsedUpdatedRecord = applyUpdateToMedicalRecord(updateRecordJson, orig)
    parsedUpdatedRecord should be(expectedUpdatedRecord)
  }

}