Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into fetch_in_bulk
Browse files Browse the repository at this point in the history
  • Loading branch information
yanns committed Nov 30, 2023
2 parents b133c19 + 54e877a commit 3e41a8f
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 4 deletions.
2 changes: 1 addition & 1 deletion .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version = 3.7.14
version = 3.7.17

runner.dialect = scala213

Expand Down
31 changes: 29 additions & 2 deletions core/src/test/scala/sangria/federation/v2/FederationSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import io.circe.parser._
import org.scalatest.freespec.AsyncFreeSpec
import org.scalatest.matchers.should.Matchers._
import sangria.ast.Document
import sangria.execution.deferred.{Deferred, DeferredResolver, UnsupportedDeferError}
import sangria.execution.{Executor, VariableCoercionError}
import sangria.federation._
import sangria.federation.v2.Directives.Key
Expand All @@ -15,6 +16,8 @@ import sangria.parser.QueryParser
import sangria.renderer.{QueryRenderer, SchemaRenderer}
import sangria.schema._

import scala.concurrent.{ExecutionContext, Future}

class FederationSpec extends AsyncFreeSpec {

"federation schema v2" - {
Expand Down Expand Up @@ -375,7 +378,11 @@ class FederationSpec extends AsyncFreeSpec {
""").getOrElse(Json.Null)

Executor
.execute(FederationSpec.Schema.schema, query, variables = args)
.execute(
FederationSpec.Schema.schema,
query,
variables = args,
deferredResolver = FederationSpec.Schema.deferredReviewResolver)
.map(QueryRenderer.renderPretty(_) should be("""{
| data: {
| _entities: [{
Expand Down Expand Up @@ -479,6 +486,23 @@ object FederationSpec {
s => StateArg(s.id))

private case class Review(id: Int, value: String)
private case class DeferredReview(id: Int) extends Deferred[Option[Review]]
private case class DeferredReviewSeq(ids: Seq[Int]) extends Deferred[Seq[Review]]

case class DeferredReviewResolver() extends DeferredResolver[Any] {
override def resolve(deferred: Vector[Deferred[Any]], context: Any, queryState: Any)(implicit
ec: ExecutionContext): Vector[Future[Any]] =
deferred.map {
case deferredReview: DeferredReview =>
Future.successful(Review(deferredReview.id, s"mock review ${deferredReview.id}"))
case deferredReviews: DeferredReviewSeq =>
Future.successful(deferredReviews.ids.map(id => Review(id, s"mock review $id")))
case d => Future.failed(UnsupportedDeferError(d))
}
}

val deferredReviewResolver: DeferredReviewResolver = DeferredReviewResolver()

private val ReviewType = ObjectType(
"Review",
fields[Unit, Review](
Expand All @@ -490,8 +514,11 @@ object FederationSpec {
deriveDecoder[ReviewArg].decodeJson(_)
private val reviewResolver = EntityResolver[Any, Json, Review, ReviewArg](
__typeName = ReviewType.name,
// TODO support DeferredValues with:
// (args, _) => DeferredReviewSeq(args.map(arg => DeferredReview(arg.id))),
(args, _) => args.map(arg => Review(arg.id, s"mock review ${arg.id}")),
r => ReviewArg(r.id))
r => ReviewArg(r.id)
)

private case class Review2(id: Int, value2: String)

Expand Down
2 changes: 1 addition & 1 deletion project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ object Dependencies {

val sangria = "org.sangria-graphql" %% "sangria" % "4.0.2"
val sangriaCirce = "org.sangria-graphql" %% "sangria-circe" % "1.3.2"
val logbackClassic = "ch.qos.logback" % "logback-classic" % "1.4.11"
val logbackClassic = "ch.qos.logback" % "logback-classic" % "1.4.12"

val catsEffect = "org.typelevel" %% "cats-effect" % "3.5.2"
val http4sEmberServer = "org.http4s" %% "http4s-ember-server" % V.http4s
Expand Down

0 comments on commit 3e41a8f

Please sign in to comment.