aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/xyz/driver/pdsuidomain/formats/json/ApiDocumentSuite.scala
blob: d9d62dd44c08708391cdf9930653b350893b9fdd (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
78
package xyz.driver.pdsuidomain.formats.json

/*
import java.time.LocalDateTime

import org.scalatest.FreeSpecLike
import play.api.libs.json.Json

import scala.collection.breakOut

class ApiDocumentSuite extends FreeSpecLike {

  "ApiDocument" - {
    "conforms to specification when serialized" in {
      val document = ApiDocument(
        id = 1L,
        recordId = 123L,
        physician = Some("physician"),
        lastUpdate = LocalDateTime.now(),
        `type` = "some-type",
        startDate = LocalDateTime.now(),
        endDate = Some(LocalDateTime.now()),
        provider = "test-provider",
        providerType = "test-provider-type",
        status = "New",
        assignee = Some(5L),
        previousAssignee = None,
        meta = "{}"
      )

      val actualJson = serialize(document)
      val matcher =
        """^\{
          |"id":"[^"]+",
          |"recordId":"[^"]+",
          |"physician":"[^"]+",
          |"lastUpdate":"[^"]+",
          |"type":"[^"]+",
          |"startDate":"[^"]+",
          |"endDate":"[^"]+",
          |"provider":"[^"]+",
          |"providerType":"[^"]+",
          |"status":"[^"]+",
          |"assignee":"[^"]+",
          |"meta":\{[^\}]*\}
          |\}""".stripMargin.lines.mkString.r

      assert(
        matcher.pattern.matcher(actualJson).matches(),
        s"""see https://driverinc.atlassian.net/wiki/display/RA/REST+API+Specification#RESTAPISpecification-DocumentObject
            |pattern = ${matcher.pattern}
            |json = $actualJson""".stripMargin
      )
    }

    "has optional fields according to specification" in {
      val expectedOptionalFields = Set("physician", "endDate", "assignee", "previousAssignee")

      val klass = classOf[ApiDocument]
      val actualOptionalFields: Set[String] = klass.getDeclaredFields.collect({
        case x if x.getType == classOf[Option[_]] => x.getName
      })(breakOut)

      assert(
        actualOptionalFields === expectedOptionalFields,
        """actual vs expected
          |see https://driverinc.atlassian.net/wiki/display/RA/REST+API+Specification#RESTAPISpecification-DocumentObject
        """.stripMargin.trim
      )
    }
  }

  private def serialize(document: ApiDocument): String = {
    Json.stringify(Json.toJson(document))
  }

}
 */