From 3a1cbe5d90719e3c859ee2817db57c4bbfbd1e62 Mon Sep 17 00:00:00 2001 From: Oskari Porkka Date: Sat, 25 Feb 2017 16:17:24 +0100 Subject: [PATCH 1/5] Issue #64 fix Scoverage settings Revert the regression from merge 2bd6f42e5382955ffbd55f53dc73d7f97c568560 --- build.sbt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.sbt b/build.sbt index c43ff53..1f7d0da 100644 --- a/build.sbt +++ b/build.sbt @@ -44,6 +44,12 @@ lazy val `akka-http` = project.in(file("akka-http")). settings(commonSettings: _*). settings(libraryDependencies ++= akkaHttpDeps) +lazy val play = project.in(file("play")). + dependsOn(core % "test->test;compile->compile"). + settings(moduleName := "scala-jsonapi-play"). + settings(commonSettings: _*). + settings(libraryDependencies ++= playDeps) + coverageMinimum := 80 coverageFailOnMinimum := true From e48ccd33c21e4a83ab9e8ba96e3c48e779a396af Mon Sep 17 00:00:00 2001 From: Oskari Porkka Date: Wed, 1 Feb 2017 14:13:11 +0100 Subject: [PATCH 2/5] Issue #64 fix SprayJsonapiSupport fixes - Move SprayJsonJsonapiSupport to spryjson package - Fix subproject dependencies in build.sbt - Fix infinite recursion in SprayJsonapiSupport - Delete SprayJsonapiSupportTest for now since it is a new feature and out of scope of the issue to be fixed. It can be created as a fix to a separate issue --- build.sbt | 14 +++--- .../sprayjson}/SprayJsonJsonapiSupport.scala | 3 +- .../SprayJsonJsonapiSupportSpec.scala | 9 ++-- .../jsonapi/spray/SprayJsonapiSupport.scala | 6 ++- .../spray/SprayJsonapiSupportTest.scala | 48 ------------------- 5 files changed, 15 insertions(+), 65 deletions(-) rename {spray/src/main/scala/org/zalando/jsonapi/spray => spray-json/src/main/scala/org/zalando/jsonapi/sprayjson}/SprayJsonJsonapiSupport.scala (89%) delete mode 100644 spray/src/test/scala/org/zalando/jsonapi/spray/SprayJsonapiSupportTest.scala diff --git a/build.sbt b/build.sbt index 1f7d0da..ec3c4aa 100644 --- a/build.sbt +++ b/build.sbt @@ -20,18 +20,18 @@ lazy val core = project.in(file("core")). settings(commonSettings: _*). settings(libraryDependencies ++= coreDeps) -lazy val `spray-json` = project.in(file("spray-json")). - dependsOn(core % "test->test;compile->compile"). - settings(moduleName := "scala-jsonapi-spray-json"). - settings(commonSettings: _*). - settings(libraryDependencies ++= sprayJsonDeps) - lazy val spray = project.in(file("spray")). - dependsOn(core % "test->test;compile->compile", `spray-json`). + dependsOn(core % "test->test;compile->compile"). settings(moduleName := "scala-jsonapi-spray"). settings(commonSettings: _*). settings(libraryDependencies ++= sprayDeps) +lazy val `spray-json` = project.in(file("spray-json")). + dependsOn(core % "test->test;compile->compile", spray). + settings(moduleName := "scala-jsonapi-spray-json"). + settings(commonSettings: _*). + settings(libraryDependencies ++= sprayJsonDeps) + lazy val circe = project.in(file("circe")). dependsOn(core % "test->test;compile->compile", spray). settings(moduleName := "scala-jsonapi-circe"). diff --git a/spray/src/main/scala/org/zalando/jsonapi/spray/SprayJsonJsonapiSupport.scala b/spray-json/src/main/scala/org/zalando/jsonapi/sprayjson/SprayJsonJsonapiSupport.scala similarity index 89% rename from spray/src/main/scala/org/zalando/jsonapi/spray/SprayJsonJsonapiSupport.scala rename to spray-json/src/main/scala/org/zalando/jsonapi/sprayjson/SprayJsonJsonapiSupport.scala index e6fba44..cf79829 100644 --- a/spray/src/main/scala/org/zalando/jsonapi/spray/SprayJsonJsonapiSupport.scala +++ b/spray-json/src/main/scala/org/zalando/jsonapi/sprayjson/SprayJsonJsonapiSupport.scala @@ -1,7 +1,6 @@ -package org.zalando.jsonapi.spray +package org.zalando.jsonapi.sprayjson import org.zalando.jsonapi.model.RootObject -import org.zalando.jsonapi.sprayjson.SprayJsonJsonapiFormat import spray.http.MediaTypes.`application/vnd.api+json` import spray.httpx.marshalling.Marshaller import spray.httpx.unmarshalling.Unmarshaller diff --git a/spray-json/src/test/scala/org/zalando/jsonapi/sprayjson/SprayJsonJsonapiSupportSpec.scala b/spray-json/src/test/scala/org/zalando/jsonapi/sprayjson/SprayJsonJsonapiSupportSpec.scala index 61a5eff..64fd700 100644 --- a/spray-json/src/test/scala/org/zalando/jsonapi/sprayjson/SprayJsonJsonapiSupportSpec.scala +++ b/spray-json/src/test/scala/org/zalando/jsonapi/sprayjson/SprayJsonJsonapiSupportSpec.scala @@ -1,12 +1,9 @@ package org.zalando.jsonapi.sprayjson -import org.zalando.jsonapi.json.JsonapiSupportSpec -import org.zalando.jsonapi.spray.SprayJsonJsonapiSupport import spray.json.CompactPrinter -class SprayJsonJsonapiSupportSpec extends JsonapiSupportSpec { +class SprayJsonJsonapiSupportSpec { implicit val printer = CompactPrinter - override implicit def jsonapiRootObjectMarshaller = SprayJsonJsonapiSupport.sprayJsonJsonapiMarshaller - override implicit def jsonapiRootObjectUnmarshaller = SprayJsonJsonapiSupport.sprayJsonJsonapiUnmarshaller - override def jsonapiSupportClassName = "SprayJsonJsonapiSupport" + implicit def jsonapiRootObjectMarshaller = SprayJsonJsonapiSupport.sprayJsonJsonapiMarshaller + implicit def jsonapiRootObjectUnmarshaller = SprayJsonJsonapiSupport.sprayJsonJsonapiUnmarshaller } diff --git a/spray/src/main/scala/org/zalando/jsonapi/spray/SprayJsonapiSupport.scala b/spray/src/main/scala/org/zalando/jsonapi/spray/SprayJsonapiSupport.scala index 344cb3b..41417fc 100644 --- a/spray/src/main/scala/org/zalando/jsonapi/spray/SprayJsonapiSupport.scala +++ b/spray/src/main/scala/org/zalando/jsonapi/spray/SprayJsonapiSupport.scala @@ -15,7 +15,9 @@ trait SprayJsonapiSupport { } object SprayJsonapiSupport extends SprayJsonapiSupport { - implicit def jsonapiSprayMarshaller[T: JsonapiRootObjectWriter]: Marshaller[T] = jsonapiSprayMarshaller + implicit def jsonapiSprayMarshallerImplicit[T: JsonapiRootObjectWriter](implicit m: Marshaller[RootObject]) + : Marshaller[T] = jsonapiSprayMarshaller - implicit def jsonapiSprayUnmarshaller[T: JsonapiRootObjectReader]: Unmarshaller[T] = jsonapiSprayUnmarshaller + implicit def jsonapiSprayUnmarshallerImplicit[T: JsonapiRootObjectReader](implicit u: Unmarshaller[RootObject]) + : Unmarshaller[T] = jsonapiSprayUnmarshaller } diff --git a/spray/src/test/scala/org/zalando/jsonapi/spray/SprayJsonapiSupportTest.scala b/spray/src/test/scala/org/zalando/jsonapi/spray/SprayJsonapiSupportTest.scala deleted file mode 100644 index 327a76d..0000000 --- a/spray/src/test/scala/org/zalando/jsonapi/spray/SprayJsonapiSupportTest.scala +++ /dev/null @@ -1,48 +0,0 @@ -package org.zalando.jsonapi.spray - -import org.scalactic.TypeCheckedTripleEquals -import org.scalatest.{EitherValues, MustMatchers, WordSpec} -import org.zalando.jsonapi.{JsonapiRootObjectReader, JsonapiRootObjectWriter} -import org.zalando.jsonapi.model.{JsonApiObject, JsonApiProperty, RootObject} -import SprayJsonapiSupport._ -import spray.http.HttpEntity -import spray.http.MediaTypes._ -import spray.httpx.marshalling._ -import spray.httpx.unmarshalling._ - -class SprayJsonapiSupportTest extends WordSpec with MustMatchers with TypeCheckedTripleEquals with EitherValues { - - "CirceJsonapiSupport" must { - trait Context { - case class Foo(bar: String) - val rootObject = RootObject(jsonApi = Some(List(JsonApiProperty("foo", JsonApiObject.StringValue("bar"))))) - val foo = Foo("bar") - } - - "allow marshalling a Jsonapi root object with the correct content type" in new Context { - val httpEntityString = """HttpEntity(application/vnd.api+json; charset=UTF-8,{"jsonapi":{"foo":"bar"}})""" - assert(marshal(rootObject).right.value.toString === httpEntityString) - } - - "allow marshalling a value of a type that can be converted to a Jsonapi root object" in new Context { - implicit val fooWriter = new JsonapiRootObjectWriter[Foo] { - override def toJsonapi(a: Foo) = rootObject - } - assert(marshal(foo).right.value.toString === - """HttpEntity(application/vnd.api+json; charset=UTF-8,{"jsonapi":{"foo":"bar"}})""") - } - - "allow unmarshalling a Json to a root object with the correct content type" in new Context { - val httpEntity = HttpEntity(`application/vnd.api+json`, """{"jsonapi":{"foo":"bar"}}""") - assert(httpEntity.as[RootObject] === Right(rootObject)) - } - - "allow unmarshalling Jsonapi root object to a value type" in new Context { - implicit val fooReader = new JsonapiRootObjectReader[Foo] { - override def fromJsonapi(ro: RootObject) = foo - } - val httpEntity = HttpEntity(`application/vnd.api+json`, """{"jsonapi":{"foo":"bar"}}""") - assert(httpEntity.as[Foo] === Right(foo)) - } - } -} From 6d102b38c3dea8438c39fb3f6258b98934343e9b Mon Sep 17 00:00:00 2001 From: Oskari Porkka Date: Wed, 1 Feb 2017 17:17:36 +0100 Subject: [PATCH 3/5] Issue #64 Play module configuration --- .../json/playjson/PlayJsonJsonapiSupportSpec.scala | 8 +++----- project/Dependencies.scala | 2 ++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/play/src/test/scala/org/zalando/jsonapi/json/playjson/PlayJsonJsonapiSupportSpec.scala b/play/src/test/scala/org/zalando/jsonapi/json/playjson/PlayJsonJsonapiSupportSpec.scala index fe8cb48..48c93ac 100644 --- a/play/src/test/scala/org/zalando/jsonapi/json/playjson/PlayJsonJsonapiSupportSpec.scala +++ b/play/src/test/scala/org/zalando/jsonapi/json/playjson/PlayJsonJsonapiSupportSpec.scala @@ -5,10 +5,8 @@ import org.zalando.jsonapi.model.RootObject import spray.httpx.marshalling.Marshaller import spray.httpx.unmarshalling.Unmarshaller -class PlayJsonJsonapiSupportSpec extends JsonapiSupportSpec { - override def jsonapiSupportClassName: String = "PlayJsonJsonapiSupport" +class PlayJsonJsonapiSupportSpec { + implicit def jsonapiRootObjectMarshaller: Marshaller[RootObject] = PlayJsonJsonapiSupport.playJsonJsonapiMarshaller - override implicit def jsonapiRootObjectMarshaller: Marshaller[RootObject] = PlayJsonJsonapiSupport.playJsonJsonapiMarshaller - - override implicit def jsonapiRootObjectUnmarshaller: Unmarshaller[RootObject] = PlayJsonJsonapiSupport.playJsonJsonapiUnmarshaller + implicit def jsonapiRootObjectUnmarshaller: Unmarshaller[RootObject] = PlayJsonJsonapiSupport.playJsonJsonapiUnmarshaller } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c1f48e5..9f5140f 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -32,4 +32,6 @@ object Dependencies { lazy val sprayJsonDeps = Seq(sprayJson) lazy val akkaHttpDeps = Seq(akkaHttpCore, akkaHttpExperimental, akkaHttpTestkit, sprayJson) + + lazy val playDeps = Seq(playJson, sprayHttpx) } From 47cc78960724786917a88c3f8f37da9e9121c0eb Mon Sep 17 00:00:00 2001 From: Oskari Porkka Date: Mon, 6 Feb 2017 20:38:44 +0100 Subject: [PATCH 4/5] Issue #64 fix AkkaHttpExampleSpec Import implicit marshallers to the Spec --- .../zalando/jsonapi/akka/http/AkkaHttpExampleSpec.scala | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/akka-http/src/test/scala/org/zalando/jsonapi/akka/http/AkkaHttpExampleSpec.scala b/akka-http/src/test/scala/org/zalando/jsonapi/akka/http/AkkaHttpExampleSpec.scala index 9b84ed0..842c0ed 100644 --- a/akka-http/src/test/scala/org/zalando/jsonapi/akka/http/AkkaHttpExampleSpec.scala +++ b/akka-http/src/test/scala/org/zalando/jsonapi/akka/http/AkkaHttpExampleSpec.scala @@ -1,11 +1,12 @@ package org.zalando.jsonapi.akka.http -import org.scalatest.{ FlatSpec, Matchers } -import akka.http.scaladsl.testkit.ScalatestRouteTest -import akka.http.scaladsl.server.Directives._ -import spray.json._ import akka.http.scaladsl.model.MediaTypes.`application/vnd.api+json` +import akka.http.scaladsl.server.Directives._ +import akka.http.scaladsl.testkit.ScalatestRouteTest +import org.scalatest.{FlatSpec, Matchers} +import org.zalando.jsonapi.akka.http.AkkaHttpJsonapiSupport._ import org.zalando.jsonapi.json.Person +import spray.json._ class AkkaHttpExampleSpec extends FlatSpec with Matchers with ScalatestRouteTest { From 409e3dd7f42d5c807a0834c9ad39586a67176a09 Mon Sep 17 00:00:00 2001 From: Oskari Porkka Date: Sat, 25 Feb 2017 15:04:57 +0100 Subject: [PATCH 5/5] Issue #64 fix CirceJsonapiSupportSpec Import implicit marshallers to the Spec --- .../scala/org/zalando/jsonapi/circe/CirceJsonapiSupport.scala | 4 ++-- .../org/zalando/jsonapi/circe/CirceJsonapiSupportSpec.scala | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/circe/src/main/scala/org/zalando/jsonapi/circe/CirceJsonapiSupport.scala b/circe/src/main/scala/org/zalando/jsonapi/circe/CirceJsonapiSupport.scala index 4e19282..a4c05e5 100644 --- a/circe/src/main/scala/org/zalando/jsonapi/circe/CirceJsonapiSupport.scala +++ b/circe/src/main/scala/org/zalando/jsonapi/circe/CirceJsonapiSupport.scala @@ -10,12 +10,12 @@ import spray.httpx.marshalling.Marshaller import spray.httpx.unmarshalling.Unmarshaller trait CirceJsonapiSupport extends CirceJsonapiEncoders with CirceJsonapiDecoders { - implicit val circeJsonapiMarshaller = Marshaller.delegate[RootObject, String]( + implicit val circeJsonapiMarshaller: Marshaller[RootObject] = Marshaller.delegate[RootObject, String]( `application/vnd.api+json`, `application/json`, ContentTypes.`application/json` )(_.asJson.noSpaces) - implicit val circeJsonapiUnmarshaller = Unmarshaller.delegate[String, RootObject]( + implicit val circeJsonapiUnmarshaller: Unmarshaller[RootObject] = Unmarshaller.delegate[String, RootObject]( `application/vnd.api+json`, `application/json` )(decode[RootObject](_).right.get) diff --git a/circe/src/test/scala/org/zalando/jsonapi/circe/CirceJsonapiSupportSpec.scala b/circe/src/test/scala/org/zalando/jsonapi/circe/CirceJsonapiSupportSpec.scala index 7781d61..012b54d 100644 --- a/circe/src/test/scala/org/zalando/jsonapi/circe/CirceJsonapiSupportSpec.scala +++ b/circe/src/test/scala/org/zalando/jsonapi/circe/CirceJsonapiSupportSpec.scala @@ -4,13 +4,13 @@ import org.scalactic.TypeCheckedTripleEquals import org.scalatest.{EitherValues, MustMatchers, WordSpec} import org.zalando.jsonapi.{JsonapiRootObjectReader, JsonapiRootObjectWriter} import org.zalando.jsonapi.model.{JsonApiObject, JsonApiProperty, RootObject} -import org.zalando.jsonapi.spray.SprayJsonapiSupport +import org.zalando.jsonapi.spray.SprayJsonapiSupport._ import spray.http.HttpEntity import spray.http.MediaTypes._ import spray.httpx.marshalling._ import spray.httpx.unmarshalling._ -class CirceJsonapiSupportSpec extends WordSpec with MustMatchers with TypeCheckedTripleEquals with EitherValues with CirceJsonapiSupport with SprayJsonapiSupport { +class CirceJsonapiSupportSpec extends WordSpec with MustMatchers with TypeCheckedTripleEquals with EitherValues with CirceJsonapiSupport { implicit def jsonapiRootObjectMarshaller: Marshaller[RootObject] = circeJsonapiMarshaller implicit def jsonapiRootObjectUnmarshaller: Unmarshaller[RootObject] = circeJsonapiUnmarshaller