aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala44
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala44
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala36
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/SlotArmFormatSuite.scala36
4 files changed, 160 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala
new file mode 100644
index 0000000..acb790a
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibilityarm.scala
@@ -0,0 +1,44 @@
+package xyz.driver.pdsuidomain.formats.json.sprayformats
+
+import spray.json._
+import xyz.driver.pdsuicommon.domain.{LongId, StringId}
+import xyz.driver.pdsuidomain.entities.{EligibilityArm, Trial}
+
+object eligibilityarm {
+ import DefaultJsonProtocol._
+ import common._
+
+ def applyUpdateToArm(json: JsValue, orig: EligibilityArm): EligibilityArm = json match {
+ case JsObject(fields) =>
+ val name = fields
+ .get("name")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationError(s"Arm json object does not contain `name` field: $json"))
+ orig.copy(name = name)
+
+ case _ => deserializationError(s"Expected Json Object as partial Arm, but got $json")
+ }
+
+ def eligibilityArmFormat: RootJsonFormat[EligibilityArm] = new RootJsonFormat[EligibilityArm] {
+ override def write(obj: EligibilityArm): JsValue =
+ JsObject(
+ "id" -> obj.id.toJson,
+ "name" -> obj.name.toJson,
+ "originalName" -> obj.originalName.toJson,
+ "trialId" -> obj.trialId.toJson
+ )
+
+ override def read(json: JsValue): EligibilityArm = json.asJsObject.getFields("trialId", "name") match {
+ case Seq(trialId, name) =>
+ EligibilityArm(
+ id = LongId(0),
+ name = name.convertTo[String],
+ trialId = trialId.convertTo[StringId[Trial]],
+ originalName = name.convertTo[String]
+ )
+
+ case _ => deserializationError(s"Expected Json Object as Arm, but got $json")
+ }
+ }
+
+}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala
new file mode 100644
index 0000000..192bd6a
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/slotarm.scala
@@ -0,0 +1,44 @@
+package xyz.driver.pdsuidomain.formats.json.sprayformats
+
+import spray.json._
+import xyz.driver.pdsuicommon.domain.{LongId, StringId}
+import xyz.driver.pdsuidomain.entities.{SlotArm, Trial}
+
+object slotarm {
+ import DefaultJsonProtocol._
+ import common._
+
+ def applyUpdateToArm(json: JsValue, orig: SlotArm): SlotArm = json match {
+ case JsObject(fields) =>
+ val name = fields
+ .get("name")
+ .map(_.convertTo[String])
+ .getOrElse(deserializationError(s"Arm json object does not contain `name` field: $json"))
+ orig.copy(name = name)
+
+ case _ => deserializationError(s"Expected Json Object as partial Arm, but got $json")
+ }
+
+ def slotArmFormat: RootJsonFormat[SlotArm] = new RootJsonFormat[SlotArm] {
+ override def write(obj: SlotArm): JsValue =
+ JsObject(
+ "id" -> obj.id.toJson,
+ "name" -> obj.name.toJson,
+ "originalName" -> obj.originalName.toJson,
+ "trialId" -> obj.trialId.toJson
+ )
+
+ override def read(json: JsValue): SlotArm = json.asJsObject.getFields("trialId", "name") match {
+ case Seq(trialId, name) =>
+ SlotArm(
+ id = LongId(0),
+ name = name.convertTo[String],
+ trialId = trialId.convertTo[StringId[Trial]],
+ originalName = name.convertTo[String]
+ )
+
+ case _ => deserializationError(s"Expected Json Object as Arm, but got $json")
+ }
+ }
+
+}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala
new file mode 100644
index 0000000..bcfb977
--- /dev/null
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/EligibilityArmFormatSuite.scala
@@ -0,0 +1,36 @@
+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.EligibilityArm
+
+class EligibilityArmFormatSuite extends FlatSpec with Matchers {
+ import eligibilityarm._
+
+ "Json format for EligibilityArm" should "read and write correct JSON" in {
+ val arm = EligibilityArm(
+ id = LongId(10),
+ trialId = StringId("NCT000001"),
+ name = "arm name",
+ originalName = "orig arm name"
+ )
+ val writtenJson = eligibilityArmFormat.write(arm)
+
+ writtenJson should be(
+ """{"id":10,"trialId":"NCT000001","name":"arm name","originalName":"orig arm name"}""".parseJson)
+
+ val createArmJson = """{"trialId":"NCT000001","name":"arm name"}""".parseJson
+ val parsedArm = eligibilityArmFormat.read(createArmJson)
+ val expectedCreatedArm = arm.copy(
+ id = LongId(0),
+ originalName = "arm name"
+ )
+ parsedArm should be(expectedCreatedArm)
+
+ val updateArmJson = """{"name":"new arm name"}""".parseJson
+ val expectedUpdatedArm = arm.copy(name = "new arm name")
+ val parsedUpdateArm = applyUpdateToArm(updateArmJson, arm)
+ parsedUpdateArm should be(expectedUpdatedArm)
+ }
+}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/SlotArmFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/SlotArmFormatSuite.scala
new file mode 100644
index 0000000..7dd085c
--- /dev/null
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/SlotArmFormatSuite.scala
@@ -0,0 +1,36 @@
+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.SlotArm
+
+class SlotArmFormatSuite extends FlatSpec with Matchers {
+ import slotarm._
+
+ "Json format for SlotArm" should "read and write correct JSON" in {
+ val arm = SlotArm(
+ id = LongId(10),
+ trialId = StringId("NCT000001"),
+ name = "arm name",
+ originalName = "orig arm name"
+ )
+ val writtenJson = slotArmFormat.write(arm)
+
+ writtenJson should be(
+ """{"id":10,"trialId":"NCT000001","name":"arm name","originalName":"orig arm name"}""".parseJson)
+
+ val createArmJson = """{"trialId":"NCT000001","name":"arm name"}""".parseJson
+ val parsedArm = slotArmFormat.read(createArmJson)
+ val expectedCreatedArm = arm.copy(
+ id = LongId(0),
+ originalName = "arm name"
+ )
+ parsedArm should be(expectedCreatedArm)
+
+ val updateArmJson = """{"name":"new arm name"}""".parseJson
+ val expectedUpdatedArm = arm.copy(name = "new arm name")
+ val parsedUpdateArm = applyUpdateToArm(updateArmJson, arm)
+ parsedUpdateArm should be(expectedUpdatedArm)
+ }
+}