packages feed

morpheus-graphql 0.25.0 → 0.26.0

raw patch · 32 files changed

+11/−656 lines, 32 filesdep ~morpheus-graphql-appdep ~morpheus-graphql-code-gendep ~morpheus-graphql-corePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: morpheus-graphql-app, morpheus-graphql-code-gen, morpheus-graphql-core, morpheus-graphql-server, morpheus-graphql-subscriptions, morpheus-graphql-tests

API changes (from Hackage documentation)

- Data.Morpheus.NamedResolvers: [Ref] :: forall (m :: Type -> Type) a. ResolveNamed m a => m (Dep a) -> NamedResolverT m a
+ Data.Morpheus.NamedResolvers: [Ref] :: forall (m :: Type -> Type) a. ResolveNamed m (Target a) => m (Dependency a) -> NamedResolverT m a
- Data.Morpheus.NamedResolvers: [Refs] :: forall (m :: Type -> Type) a1. ResolveNamed m a1 => m [Dep a1] -> NamedResolverT m [a1]
+ Data.Morpheus.NamedResolvers: [Refs] :: forall (m :: Type -> Type) a1. ResolveNamed m (Target a1) => m [Dependency a1] -> NamedResolverT m [a1]
- Data.Morpheus.NamedResolvers: class ToJSON Dep a => ResolveNamed (m :: Type -> Type) a where {
+ Data.Morpheus.NamedResolvers: class ToJSON Dependency a => ResolveNamed (m :: Type -> Type) a where {
- Data.Morpheus.NamedResolvers: resolve :: forall m a b. (ResolveByType (RES_TYPE a b) m a b, Monad m) => m a -> NamedResolverT m b
+ Data.Morpheus.NamedResolvers: resolve :: forall m a b. (ResolveRef (NamedResolverTarget b) m a b, Monad m) => m a -> NamedResolverT m b
- Data.Morpheus.NamedResolvers: resolveBatched :: ResolveNamed m a => [Dep a] -> m [Maybe a]
+ Data.Morpheus.NamedResolvers: resolveBatched :: ResolveNamed m a => [Dependency a] -> m [Maybe a]
- Data.Morpheus.NamedResolvers: resolveNamed :: ResolveNamed m a => Dep a -> m a
+ Data.Morpheus.NamedResolvers: resolveNamed :: ResolveNamed m a => Dependency a -> m a
- Data.Morpheus.NamedResolvers: useBatched :: (ResolveNamed m a, MonadError GQLError m) => Dep a -> m a
+ Data.Morpheus.NamedResolvers: useBatched :: (ResolveNamed m a, MonadError GQLError m) => Dependency a -> m a

Files

morpheus-graphql.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           morpheus-graphql-version:        0.25.0+version:        0.26.0 synopsis:       Morpheus GraphQL description:    Build GraphQL APIs with your favourite functional language! category:       web, graphql@@ -115,20 +115,6 @@     test/Feature/Input/default-values/intorspection/input-simple/query.gql     test/Feature/Input/default-values/resolving/compound/query.gql     test/Feature/Input/default-values/resolving/simple/query.gql-    test/Feature/NamedResolvers/deities.gql-    test/Feature/NamedResolvers/realms.gql-    test/Feature/NamedResolvers/tests/deities-ext/query.gql-    test/Feature/NamedResolvers/tests/deities/query.gql-    test/Feature/NamedResolvers/tests/deity-by-id/query.gql-    test/Feature/NamedResolvers/tests/deity-ext-by-id/query.gql-    test/Feature/NamedResolvers/tests/deity-simple/query.gql-    test/Feature/NamedResolvers/tests/entities/query.gql-    test/Feature/NamedResolvers/tests/entity-by-id/query.gql-    test/Feature/NamedResolvers/tests/entity-ext-by-id/query.gql-    test/Feature/NamedResolvers/tests/realm-by-id/query.gql-    test/Feature/NamedResolvers/tests/realm-ext-by-id/query.gql-    test/Feature/NamedResolvers/tests/realm-simple/query.gql-    test/Feature/NamedResolvers/tests/realms/query.gql     test/Rendering/schema.gql     test/Subscription/schema.gql     test/Feature/Holistic/holistic/arguments/nameConflict/response.json@@ -224,18 +210,6 @@     test/Feature/Input/default-values/intorspection/input-simple/response.json     test/Feature/Input/default-values/resolving/compound/response.json     test/Feature/Input/default-values/resolving/simple/response.json-    test/Feature/NamedResolvers/tests/deities-ext/response.json-    test/Feature/NamedResolvers/tests/deities/response.json-    test/Feature/NamedResolvers/tests/deity-by-id/response.json-    test/Feature/NamedResolvers/tests/deity-ext-by-id/response.json-    test/Feature/NamedResolvers/tests/deity-simple/response.json-    test/Feature/NamedResolvers/tests/entities/response.json-    test/Feature/NamedResolvers/tests/entity-by-id/response.json-    test/Feature/NamedResolvers/tests/entity-ext-by-id/response.json-    test/Feature/NamedResolvers/tests/realm-by-id/response.json-    test/Feature/NamedResolvers/tests/realm-ext-by-id/response.json-    test/Feature/NamedResolvers/tests/realm-simple/response.json-    test/Feature/NamedResolvers/tests/realms/response.json  source-repository head   type: git@@ -258,10 +232,10 @@     , base >=4.7.0 && <5.0.0     , bytestring >=0.10.4 && <0.12.0     , containers >=0.4.2.1 && <0.7.0-    , morpheus-graphql-app >=0.25.0 && <0.26.0-    , morpheus-graphql-code-gen >=0.25.0 && <0.26.0-    , morpheus-graphql-core >=0.25.0 && <0.26.0-    , morpheus-graphql-server >=0.25.0 && <0.26.0+    , morpheus-graphql-app >=0.26.0 && <0.27.0+    , morpheus-graphql-code-gen >=0.26.0 && <0.27.0+    , morpheus-graphql-core >=0.26.0 && <0.27.0+    , morpheus-graphql-server >=0.26.0 && <0.27.0     , mtl >=2.0.0 && <3.0.0     , relude >=0.3.0 && <2.0.0     , template-haskell >=2.0.0 && <3.0.0@@ -277,10 +251,6 @@   other-modules:       Feature.Holistic.API       Feature.Input.DefaultValues-      Feature.NamedResolvers.API-      Feature.NamedResolvers.Deities-      Feature.NamedResolvers.Entities-      Feature.NamedResolvers.Realms       Rendering.Schema       Rendering.TestSchemaRendering       Subscription.API@@ -298,12 +268,12 @@     , bytestring >=0.10.4 && <0.12.0     , containers >=0.4.2.1 && <0.7.0     , morpheus-graphql-    , morpheus-graphql-app >=0.25.0 && <0.26.0-    , morpheus-graphql-code-gen >=0.25.0 && <0.26.0-    , morpheus-graphql-core >=0.25.0 && <0.26.0-    , morpheus-graphql-server >=0.25.0 && <0.26.0-    , morpheus-graphql-subscriptions >=0.25.0 && <0.26.0-    , morpheus-graphql-tests >=0.25.0 && <0.26.0+    , morpheus-graphql-app >=0.26.0 && <0.27.0+    , morpheus-graphql-code-gen >=0.26.0 && <0.27.0+    , morpheus-graphql-core >=0.26.0 && <0.27.0+    , morpheus-graphql-server >=0.26.0 && <0.27.0+    , morpheus-graphql-subscriptions >=0.26.0 && <0.27.0+    , morpheus-graphql-tests >=0.26.0 && <0.27.0     , mtl >=2.0.0 && <3.0.0     , relude >=0.3.0 && <2.0.0     , tasty >=0.1.0 && <1.5.0
− test/Feature/NamedResolvers/API.hs
@@ -1,15 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}--module Feature.NamedResolvers.API-  ( app,-  )-where--import Data.Morpheus (App)-import Feature.NamedResolvers.Deities (deitiesApp)-import Feature.NamedResolvers.Entities (entitiesApp)-import Feature.NamedResolvers.Realms (realmsApp)-import Relude--app :: App () IO-app = deitiesApp <> realmsApp <> entitiesApp
− test/Feature/NamedResolvers/Deities.hs
@@ -1,80 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE NoImplicitPrelude #-}--module Feature.NamedResolvers.Deities-  ( deitiesApp,-  )-where--import Control.Monad.Except-import Data.Morpheus (deriveApp)-import Data.Morpheus.Document-  ( importGQLDocument,-  )-import Data.Morpheus.NamedResolvers-  ( NamedResolverT,-    ResolveNamed (..),-    resolve,-    useBatched,-  )-import Data.Morpheus.Types-  ( App,-    Arg (..),-    GQLError,-    ID,-    NamedResolvers (..),-    Undefined,-  )-import Relude hiding (Undefined)--importGQLDocument "test/Feature/NamedResolvers/deities.gql"--getPower :: (Eq a, IsString a, Applicative f) => a -> f Power-getPower "sp" = pure Shapeshifting-getPower _ = pure Thunderbolt--getDeity :: (Eq a, Monad m, Applicative f, IsString a) => a -> f (Maybe (Deity (NamedResolverT m)))-getDeity "zeus" =-  pure $-    Just-      Deity-        { name = resolve (pure "Zeus"),-          power = resolve (pure ["tb"])-        }-getDeity "morpheus" =-  pure $-    Just-      Deity-        { name = resolve (pure "Morpheus"),-          power = resolve (pure ["sp"])-        }-getDeity _ = pure Nothing--instance Monad m => ResolveNamed m Power where-  type Dep Power = ID-  resolveNamed = getPower--instance MonadError GQLError m => ResolveNamed m (Deity (NamedResolverT m)) where-  type Dep (Deity (NamedResolverT m)) = ID-  resolveBatched = traverse getDeity-  resolveNamed = useBatched--instance MonadError GQLError m => ResolveNamed m (Query (NamedResolverT m)) where-  type Dep (Query (NamedResolverT m)) = ()-  resolveNamed _ =-    pure-      Query-        { deity = \(Arg uid) -> resolve (pure (Just uid)),-          deities = resolve (pure ["zeus", "morpheus"])-        }--deitiesApp :: App () IO-deitiesApp = deriveApp (NamedResolvers :: NamedResolvers IO () Query Undefined Undefined)
− test/Feature/NamedResolvers/Entities.hs
@@ -1,76 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveAnyClass #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TypeFamilies #-}--module Feature.NamedResolvers.Entities-  ( entitiesApp,-  )-where--import Control.Monad.Except-import Data.Morpheus (deriveApp)-import Data.Morpheus.NamedResolvers-  ( NamedResolverT,-    ResolveNamed (..),-    resolve,-  )-import Data.Morpheus.Types-  ( App,-    Arg (..),-    GQLError,-    GQLType (..),-    ID,-    NamedResolvers (..),-    Undefined,-  )-import Feature.NamedResolvers.Realms (Deity, Realm)-import GHC.Generics (Generic)---- Entity-data Entity m-  = EntityDeity (m (Deity m))-  | EntityRealm (m (Realm m))-  deriving-    ( Generic,-      GQLType-    )--getEntity :: (MonadError GQLError m) => ID -> m (Entity (NamedResolverT m))-getEntity "zeus" = pure $ EntityDeity (resolve $ pure "zeus")-getEntity "morpheus" = pure $ EntityDeity (resolve $ pure "morpheus")-getEntity x = pure $ EntityRealm (resolve $ pure x)--instance (MonadError GQLError m) => ResolveNamed m (Entity (NamedResolverT m)) where-  type Dep (Entity (NamedResolverT m)) = ID-  resolveNamed = getEntity---- QUERY-data Query m = Query-  { entities :: m [Entity m],-    entity :: Arg "id" ID -> m (Maybe (Entity m))-  }-  deriving-    ( Generic,-      GQLType-    )--instance MonadError GQLError m => ResolveNamed m (Query (NamedResolverT m)) where-  type Dep (Query (NamedResolverT m)) = ()-  resolveNamed _ =-    pure-      Query-        { entities = resolve (pure ["zeus", "morpheus", "olympus", "dreams"]),-          entity = \(Arg uid) -> resolve (pure (Just uid))-        }--entitiesApp :: App () IO-entitiesApp =-  deriveApp-    ( NamedResolvers ::-        NamedResolvers IO () Query Undefined Undefined-    )
− test/Feature/NamedResolvers/Realms.hs
@@ -1,87 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TypeFamilies #-}--module Feature.NamedResolvers.Realms-  ( realmsApp,-    Deity,-    Realm,-  )-where--import Control.Monad.Except-import Data.Morpheus-  ( deriveApp,-  )-import Data.Morpheus.Document-  ( importGQLDocument,-  )-import Data.Morpheus.NamedResolvers-  ( NamedResolverT,-    ResolveNamed (..),-    resolve,-    useBatched,-  )-import Data.Morpheus.Types-  ( App,-    Arg (..),-    GQLError,-    ID,-    NamedResolvers (..),-    Undefined,-  )-import Data.Text (Text)--importGQLDocument "test/Feature/NamedResolvers/realms.gql"--getRealm :: (MonadError GQLError m) => ID -> m (Maybe (Realm (NamedResolverT m)))-getRealm "olympus" =-  pure $-    Just-      Realm-        { name = resolve (pure "Mount Olympus"),-          owner = resolve (pure "zeus")-        }-getRealm "dreams" =-  pure $-    Just-      Realm-        { name = resolve (pure "Fictional world of dreams"),-          owner = resolve (pure "morpheus")-        }-getRealm _ = pure Nothing--instance MonadError GQLError m => ResolveNamed m (Realm (NamedResolverT m)) where-  type Dep (Realm (NamedResolverT m)) = ID-  resolveBatched = traverse getRealm-  resolveNamed = useBatched--instance (MonadError GQLError m) => ResolveNamed m (Deity (NamedResolverT m)) where-  type Dep (Deity (NamedResolverT m)) = ID-  resolveBatched = traverse getDeity-  resolveNamed = useBatched--getDeity :: (MonadError GQLError m) => ID -> m (Maybe (Deity (NamedResolverT m)))-getDeity "zeus" = pure $ Just Deity {realm = resolve (pure "olympus")}-getDeity "morpheus" = pure $ Just Deity {realm = resolve (pure "dreams")}-getDeity _ = pure Nothing--instance MonadError GQLError m => ResolveNamed m (Query (NamedResolverT m)) where-  type Dep (Query (NamedResolverT m)) = ()-  resolveNamed _ =-    pure-      Query-        { realm = \(Arg arg) -> resolve (pure (Just arg)),-          realms = resolve (pure ["olympus", "dreams"])-        }--realmsApp :: App () IO-realmsApp =-  deriveApp-    (NamedResolvers :: NamedResolvers IO () Query Undefined Undefined)
− test/Feature/NamedResolvers/deities.gql
@@ -1,14 +0,0 @@-enum Power {-  Shapeshifting-  Thunderbolt-}--type Deity {-  name: String!-  power: [Power!]!-}--type Query {-  deities: [Deity!]!-  deity(id: ID!): Deity-}
− test/Feature/NamedResolvers/realms.gql
@@ -1,13 +0,0 @@-type Realm {-  name: String!-  owner: Deity!-}--type Deity {-  realm: Realm!-}--type Query {-  realms: [Realm!]!-  realm(id: ID!): Realm-}
− test/Feature/NamedResolvers/tests/deities-ext/query.gql
@@ -1,9 +0,0 @@-query {-  deities {-    name-    power-    realm {-      name-    }-  }-}
− test/Feature/NamedResolvers/tests/deities-ext/response.json
@@ -1,20 +0,0 @@-{-  "data": {-    "deities": [-      {-        "name": "Zeus",-        "realm": {-          "name": "Mount Olympus"-        },-        "power": ["Thunderbolt"]-      },-      {-        "name": "Morpheus",-        "realm": {-          "name": "Fictional world of dreams"-        },-        "power": ["Shapeshifting"]-      }-    ]-  }-}
− test/Feature/NamedResolvers/tests/deities/query.gql
@@ -1,6 +0,0 @@-query {-  deities {-    name-    power-  }-}
− test/Feature/NamedResolvers/tests/deities/response.json
@@ -1,14 +0,0 @@-{-  "data": {-    "deities": [-      {-        "name": "Zeus",-        "power": ["Thunderbolt"]-      },-      {-        "name": "Morpheus",-        "power": ["Shapeshifting"]-      }-    ]-  }-}
− test/Feature/NamedResolvers/tests/deity-by-id/query.gql
@@ -1,6 +0,0 @@-query {-  deity(id: "zeus") {-    name-    power-  }-}
− test/Feature/NamedResolvers/tests/deity-by-id/response.json
@@ -1,8 +0,0 @@-{-  "data": {-    "deity": {-      "name": "Zeus",-      "power": ["Thunderbolt"]-    }-  }-}
− test/Feature/NamedResolvers/tests/deity-ext-by-id/query.gql
@@ -1,9 +0,0 @@-query {-  deity(id: "zeus") {-    name-    power-    realm {-      name-    }-  }-}
− test/Feature/NamedResolvers/tests/deity-ext-by-id/response.json
@@ -1,9 +0,0 @@-{-  "data": {-    "deity": {-      "name": "Zeus",-      "realm": { "name": "Mount Olympus" },-      "power": ["Thunderbolt"]-    }-  }-}
− test/Feature/NamedResolvers/tests/deity-simple/query.gql
@@ -1,6 +0,0 @@-query {-  deity(id: "") {-    name-    power-  }-}
− test/Feature/NamedResolvers/tests/deity-simple/response.json
@@ -1,5 +0,0 @@-{-  "data": {-    "deity": null-  }-}
− test/Feature/NamedResolvers/tests/entities/query.gql
@@ -1,23 +0,0 @@-query {-  entities {-    ... on Realm {-      __typename-      name-      owner {-        name-        power-        realm {-          name-          owner {-            name-          }-        }-      }-    }-    ... on Deity {-      __typename-      name-      power-    }-  }-}
− test/Feature/NamedResolvers/tests/entities/response.json
@@ -1,37 +0,0 @@-{-  "data": {-    "entities": [-      {-        "name": "Zeus",-        "__typename": "Deity",-        "power": ["Thunderbolt"]-      },-      {-        "name": "Morpheus",-        "__typename": "Deity",-        "power": ["Shapeshifting"]-      },-      {-        "owner": {-          "name": "Zeus",-          "realm": { "owner": { "name": "Zeus" }, "name": "Mount Olympus" },-          "power": ["Thunderbolt"]-        },-        "name": "Mount Olympus",-        "__typename": "Realm"-      },-      {-        "owner": {-          "name": "Morpheus",-          "realm": {-            "owner": { "name": "Morpheus" },-            "name": "Fictional world of dreams"-          },-          "power": ["Shapeshifting"]-        },-        "name": "Fictional world of dreams",-        "__typename": "Realm"-      }-    ]-  }-}
− test/Feature/NamedResolvers/tests/entity-by-id/query.gql
@@ -1,18 +0,0 @@-query {-  zeus: entity(id: "zeus") {-    __typename-    ... on Deity {-      name-      power-    }-  }-  olympus: entity(id: "olympus") {-    __typename-    ... on Realm {-      name-      owner {-        name-      }-    }-  }-}
− test/Feature/NamedResolvers/tests/entity-by-id/response.json
@@ -1,16 +0,0 @@-{-  "data": {-    "zeus": {-      "__typename": "Deity",-      "name": "Zeus",-      "power": ["Thunderbolt"]-    },-    "olympus": {-      "__typename": "Realm",-      "name": "Mount Olympus",-      "owner": {-        "name": "Zeus"-      }-    }-  }-}
− test/Feature/NamedResolvers/tests/entity-ext-by-id/query.gql
@@ -1,24 +0,0 @@-query {-  zeus: entity(id: "zeus") {-    ... on Deity {-      __typename-      name-      power-    }-  }-  olympus: entity(id: "olympus") {-    ... on Realm {-      name-      owner {-        name-        power-        realm {-          name-          owner {-            name-          }-        }-      }-    }-  }-}
− test/Feature/NamedResolvers/tests/entity-ext-by-id/response.json
@@ -1,20 +0,0 @@-{-  "data": {-    "zeus": {-      "__typename": "Deity",-      "name": "Zeus",-      "power": ["Thunderbolt"]-    },-    "olympus": {-      "name": "Mount Olympus",-      "owner": {-        "name": "Zeus",-        "realm": {-          "name": "Mount Olympus",-          "owner": { "name": "Zeus" }-        },-        "power": ["Thunderbolt"]-      }-    }-  }-}
− test/Feature/NamedResolvers/tests/realm-by-id/query.gql
@@ -1,5 +0,0 @@-query {-  realm(id: "olympus") {-    name-  }-}
− test/Feature/NamedResolvers/tests/realm-by-id/response.json
@@ -1,7 +0,0 @@-{-  "data": {-    "realm": {-      "name": "Mount Olympus"-    }-  }-}
− test/Feature/NamedResolvers/tests/realm-ext-by-id/query.gql
@@ -1,15 +0,0 @@-query {-  realm(id: "olympus") {-    name-    owner {-      name-      power-      realm {-        name-        owner {-          name-        }-      }-    }-  }-}
− test/Feature/NamedResolvers/tests/realm-ext-by-id/response.json
@@ -1,15 +0,0 @@-{-  "data": {-    "realm": {-      "owner": {-        "name": "Zeus",-        "realm": {-          "owner": { "name": "Zeus" },-          "name": "Mount Olympus"-        },-        "power": ["Thunderbolt"]-      },-      "name": "Mount Olympus"-    }-  }-}
− test/Feature/NamedResolvers/tests/realm-simple/query.gql
@@ -1,5 +0,0 @@-query {-  realm(id: "") {-    name-  }-}
− test/Feature/NamedResolvers/tests/realm-simple/response.json
@@ -1,5 +0,0 @@-{-  "data": {-    "realm": null-  }-}
− test/Feature/NamedResolvers/tests/realms/query.gql
@@ -1,15 +0,0 @@-query {-  realms {-    name-    owner {-      name-      power-      realm {-        name-        owner {-          name-        }-      }-    }-  }-}
− test/Feature/NamedResolvers/tests/realms/response.json
@@ -1,28 +0,0 @@-{-  "data": {-    "realms": [-      {-        "owner": {-          "name": "Zeus",-          "realm": {-            "owner": { "name": "Zeus" },-            "name": "Mount Olympus"-          },-          "power": ["Thunderbolt"]-        },-        "name": "Mount Olympus"-      },-      {-        "owner": {-          "name": "Morpheus",-          "realm": {-            "owner": { "name": "Morpheus" },-            "name": "Fictional world of dreams"-          },-          "power": ["Shapeshifting"]-        },-        "name": "Fictional world of dreams"-      }-    ]-  }-}
test/Spec.hs view
@@ -6,11 +6,9 @@   ) where -import Data.Morpheus (runApp) import Data.Morpheus.Types (GQLRequest (..), GQLResponse (..)) import qualified Feature.Holistic.API as Holistic import qualified Feature.Input.DefaultValues as DefaultValues-import qualified Feature.NamedResolvers.API as NamedResolvers import Relude import Rendering.TestSchemaRendering (testSchemaRendering) import Subscription.Test (testSubscriptions)@@ -51,9 +49,6 @@         "Holistic"         [ (Holistic.api, "holistic")         ],-      testFeatures-        "NamedResolvers"-        [(runApp NamedResolvers.app, "tests")],       testSubscriptions,       pure testSchemaRendering     ]