Skip to content

Commit

Permalink
Fix cats interop schema bug (#2296)
Browse files Browse the repository at this point in the history
* Use `ev.canFail` in cats interop schema

* Also change for monix and fs2 interops
kyri-petrou authored Jun 20, 2024
1 parent 255be11 commit 3fb31e1
Showing 4 changed files with 35 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -190,9 +190,8 @@ object CatsInterop {
override def toType(isInput: Boolean, isSubscription: Boolean): __Type =
ev.toType_(isInput, isSubscription)

override def nullable: Boolean =
ev.nullable
override def canFail: Boolean = true
override def nullable: Boolean = ev.nullable
override def canFail: Boolean = ev.canFail

override def resolve(value: F[A]): Step[R] =
QueryStep(ZQuery.fromZIO(interop.fromEffect(value).map(ev.resolve)))
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@ object Fs2Interop {
ev.toType_(isInput, isSubscription)

override def nullable: Boolean = ev.nullable
override def canFail: Boolean = true
override def canFail: Boolean = ev.canFail

override def resolve(value: Stream[RIO[R, *], A]): Step[R] =
ev.resolve(value.toZStream())
@@ -30,7 +30,7 @@ object Fs2Interop {
ev.toType_(isInput, isSubscription)

override def nullable: Boolean = ev.nullable
override def canFail: Boolean = true
override def canFail: Boolean = ev.canFail

override def resolve(value: Stream[F, A]): Step[R] =
ev.resolve(value.translate(interop.fromEffectK))
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package caliban.interop.cats

import caliban.schema.Schema
import caliban.{ graphQL, RootResolver }
import cats.Applicative
import cats.data.{ Chain, Kleisli }
import cats.effect.kernel.Async
@@ -77,7 +79,34 @@ object CatsInteropSpec extends ZIOSpecDefault {
} yield assertTrue(contextual == List(rootCtx, rootCtx, rootCtx))
}
)
}
},
suite("schema derivation")(
test("IO types are derived as non-nullable") {
case class Query(io: IO[Int])
val query = Query(IO(42))

val rendered =
Dispatcher
.parallel[IO]
.use { implicit dispatcher =>
implicit val ioSchema: Schema[Any, IO[Int]] = CatsInterop.schema[IO, Any, Int]
implicit val schema: Schema[Any, Query] = Schema.gen
val api = graphQL(RootResolver(query))
IO(api.render)
}
.unsafeRunSync()

assertTrue(
rendered == """|schema {
| query: Query
|}
|
|type Query {
| io: Int!
|}""".stripMargin
)
} @@ TestAspect.blocking
)
)

private def program[F[_]: Async, R](interop: CatsInterop[F, R], inner: R)(implicit local: Local[F, R]): F[List[R]] = {
Original file line number Diff line number Diff line change
@@ -61,7 +61,7 @@ object MonixInterop {
new Schema[R, MonixTask[A]] {
override def toType(isInput: Boolean, isSubscription: Boolean): __Type = ev.toType_(isInput, isSubscription)
override def nullable: Boolean = ev.nullable
override def canFail: Boolean = true
override def canFail: Boolean = ev.canFail
override def resolve(value: MonixTask[A]): Step[R] =
QueryStep(ZQuery.fromZIO(value.to[Task].map(ev.resolve)))
}

0 comments on commit 3fb31e1

Please sign in to comment.