aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandr <ognelisar@gmail.com>2017-10-04 14:28:25 +0700
committerAleksandr <ognelisar@gmail.com>2017-10-04 14:38:44 +0700
commit3cf0353e3999994ff4441432f574a6e5f4281073 (patch)
tree6395d732aa5c13898db67e3bde18e2200cd9bf14
parent008af38c4a8d61590bac71791af261f00a8517ea (diff)
downloadrest-query-3cf0353e3999994ff4441432f574a6e5f4281073.tar.gz
rest-query-3cf0353e3999994ff4441432f574a6e5f4281073.tar.bz2
rest-query-3cf0353e3999994ff4441432f574a6e5f4281073.zip
Fixed spray format of ListResponse
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala8
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala113
2 files changed, 117 insertions, 4 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
index fbfc53e..cedb053 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
@@ -2,7 +2,7 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import java.time.LocalDateTime
-import spray.json.{JsArray, RootJsonFormat, _}
+import spray.json.{RootJsonFormat, _}
import xyz.driver.pdsuicommon.db.Pagination
import xyz.driver.pdsuidomain.formats.json.sprayformats.common._
@@ -27,11 +27,11 @@ object ListResponse extends DefaultJsonProtocol {
implicit val listResponseMetaFormat: RootJsonFormat[Meta] = jsonFormat4(Meta.apply)
- implicit def listResponseMetaWriter[T: RootJsonWriter]: RootJsonWriter[ListResponse[T]] =
- new RootJsonWriter[ListResponse[T]] {
+ implicit def listResponseMetaWriter[T: JsonWriter]: JsonWriter[ListResponse[T]] =
+ new JsonWriter[ListResponse[T]] {
override def write(listResponse: ListResponse[T]): JsValue = {
JsObject(
- itemsField -> JsArray(listResponse.items.map(_.toJson).toVector),
+ itemsField -> listResponse.items.map(_.toJson).toJson,
metaField -> listResponse.meta.toJson
)
}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala
new file mode 100644
index 0000000..52b2324
--- /dev/null
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala
@@ -0,0 +1,113 @@
+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, UuidId}
+import xyz.driver.pdsuidomain.entities.MedicalRecord.Status
+import xyz.driver.pdsuidomain.entities._
+import xyz.driver.pdsuidomain.formats.json.sprayformats.record.recordFormat
+
+
+class ListResponseSuite extends FlatSpec with Matchers {
+
+ private val lastUpdate = LocalDateTime.parse("2017-08-10T18:00:00")
+ private val lastUpdateToLocal = "2017-08-10T18:00Z"
+
+ private def metaJsonObjectAsString(meta: ListResponse.Meta) = {
+ import meta._
+ val lastUpdate = meta.lastUpdate
+ .map(_ => s""","lastUpdate":"$lastUpdateToLocal"""")
+ .getOrElse("")
+
+ s"""{"itemsCount":$itemsCount,"pageNumber":$pageNumber,"pageSize":$pageSize$lastUpdate}"""
+ }
+
+
+ "Json format for ListResponse.Meta" should "read and write correct JSON" in {
+ val meta1 =
+ ListResponse.Meta(
+ itemsCount = 5,
+ pageNumber = 6,
+ pageSize = 7,
+ lastUpdate = None
+ )
+
+ val writtenJson1 =
+ ListResponse.listResponseMetaFormat.write(meta1)
+
+ writtenJson1 should be(
+ metaJsonObjectAsString(meta1).parseJson)
+
+ val parsedItem1: ListResponse.Meta =
+ ListResponse.listResponseMetaFormat.read(writtenJson1)
+
+ meta1 shouldBe parsedItem1
+
+
+ val meta2 =
+ ListResponse.Meta(
+ itemsCount = 1,
+ pageNumber = 4,
+ pageSize = 3,
+ lastUpdate = Some(lastUpdate)
+ )
+
+ val writtenJson2 =
+ ListResponse.listResponseMetaFormat.write(meta2)
+
+ writtenJson2 should be(
+ metaJsonObjectAsString(meta2).parseJson)
+
+ val parsedItem2: ListResponse.Meta =
+ ListResponse.listResponseMetaFormat.read(writtenJson2)
+
+ meta2 shouldBe parsedItem2
+ }
+
+
+ "Json format for ListResponse" should "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 recordJsonAsString =
+ """{"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"}"""
+
+ val meta =
+ ListResponse.Meta(
+ itemsCount = 5,
+ pageNumber = 6,
+ pageSize = 7,
+ lastUpdate = None
+ )
+
+ val listResponse = ListResponse(Seq(orig), meta)
+
+ val writtenJson = ListResponse.listResponseMetaWriter.write(listResponse)
+ val expectedJson = s"""{"items":[$recordJsonAsString],"meta":${metaJsonObjectAsString(meta)}}"""
+
+ writtenJson should be(
+ expectedJson.parseJson)
+ }
+
+}