diff options
Diffstat (limited to 'tests/Test/StarWars/Schema.hs')
| -rw-r--r-- | tests/Test/StarWars/Schema.hs | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/tests/Test/StarWars/Schema.hs b/tests/Test/StarWars/Schema.hs deleted file mode 100644 index 90ce9fc..0000000 --- a/tests/Test/StarWars/Schema.hs +++ /dev/null @@ -1,166 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} -module Test.StarWars.Schema - ( starWarsSchema - ) where - -import Control.Monad.Catch (MonadThrow(..), SomeException) -import Control.Monad.Trans.Reader (asks) -import qualified Data.HashMap.Strict as HashMap -import Data.Maybe (catMaybes) -import Data.Text (Text) -import Language.GraphQL.Type -import qualified Language.GraphQL.Type.In as In -import qualified Language.GraphQL.Type.Out as Out -import Test.StarWars.Data -import Prelude hiding (id) - --- See https://github.com/graphql/graphql-js/blob/master/src/__tests__/starWarsSchema.js - -starWarsSchema :: Schema (Either SomeException) -starWarsSchema = schema queryType Nothing Nothing mempty - where - queryType = Out.ObjectType "Query" Nothing [] $ HashMap.fromList - [ ("hero", heroFieldResolver) - , ("human", humanFieldResolver) - , ("droid", droidFieldResolver) - ] - heroField = Out.Field Nothing (Out.NamedObjectType heroObject) - $ HashMap.singleton "episode" - $ In.Argument Nothing (In.NamedEnumType episodeEnum) Nothing - heroFieldResolver = ValueResolver heroField hero - humanField = Out.Field Nothing (Out.NamedObjectType heroObject) - $ HashMap.singleton "id" - $ In.Argument Nothing (In.NonNullScalarType string) Nothing - humanFieldResolver = ValueResolver humanField human - droidField = Out.Field Nothing (Out.NamedObjectType droidObject) mempty - droidFieldResolver = ValueResolver droidField droid - -heroObject :: Out.ObjectType (Either SomeException) -heroObject = Out.ObjectType "Human" Nothing [characterType] $ HashMap.fromList - [ ("id", idFieldType) - , ("name", nameFieldType) - , ("friends", friendsFieldResolver) - , ("appearsIn", appearsInFieldResolver) - , ("homePlanet", homePlanetFieldType) - , ("secretBackstory", secretBackstoryFieldResolver) - , ("__typename", typenameFieldResolver) - ] - where - homePlanetFieldType - = ValueResolver (Out.Field Nothing (Out.NamedScalarType string) mempty) - $ defaultResolver "homePlanet" - -droidObject :: Out.ObjectType (Either SomeException) -droidObject = Out.ObjectType "Droid" Nothing [characterType] $ HashMap.fromList - [ ("id", idFieldType) - , ("name", nameFieldType) - , ("friends", friendsFieldResolver) - , ("appearsIn", appearsInFieldResolver) - , ("primaryFunction", primaryFunctionFieldType) - , ("secretBackstory", secretBackstoryFieldResolver) - , ("__typename", typenameFieldResolver) - ] - where - primaryFunctionFieldType - = ValueResolver (Out.Field Nothing (Out.NamedScalarType string) mempty) - $ defaultResolver "primaryFunction" - -typenameFieldResolver :: Resolver (Either SomeException) -typenameFieldResolver - = ValueResolver (Out.Field Nothing (Out.NamedScalarType string) mempty) - $ defaultResolver "__typename" - -idFieldType :: Resolver (Either SomeException) -idFieldType = ValueResolver idField $ defaultResolver "id" - -nameFieldType :: Resolver (Either SomeException) -nameFieldType = ValueResolver nameField $ defaultResolver "name" - -friendsFieldResolver :: Resolver (Either SomeException) -friendsFieldResolver = ValueResolver friendsField $ defaultResolver "friends" - -characterType :: InterfaceType (Either SomeException) -characterType = InterfaceType "Character" Nothing [] $ HashMap.fromList - [ ("id", idField) - , ("name", nameField) - , ("friends", friendsField) - , ("appearsIn", appearsInField) - , ("secretBackstory", secretBackstoryField) - ] - -idField :: Field (Either SomeException) -idField = Field Nothing (Out.NonNullScalarType id) mempty - -nameField :: Field (Either SomeException) -nameField = Field Nothing (Out.NamedScalarType string) mempty - -friendsField :: Field (Either SomeException) -friendsField = Field Nothing friendsFieldType mempty - where - friendsFieldType = Out.ListType (Out.NamedInterfaceType characterType) - -appearsInField :: Field (Either SomeException) -appearsInField = Field appearsInDescription appearsInFieldType mempty - where - appearsInDescription = Just "Which movies they appear in." - appearsInFieldType = Out.ListType $ Out.NamedEnumType episodeEnum - -secretBackstoryField :: Field (Either SomeException) -secretBackstoryField = - Out.Field Nothing (Out.NamedScalarType string) mempty - -appearsInFieldResolver :: Resolver (Either SomeException) -appearsInFieldResolver = ValueResolver appearsInField - $ defaultResolver "appearsIn" - -secretBackstoryFieldResolver :: Resolver (Either SomeException) -secretBackstoryFieldResolver = ValueResolver secretBackstoryField secretBackstory - -defaultResolver :: Text -> Resolve (Either SomeException) -defaultResolver f = do - v <- asks values - let (Object v') = v - pure $ v' HashMap.! f - -episodeEnum :: EnumType -episodeEnum = EnumType "Episode" (Just description) - $ HashMap.fromList [newHope, empire, jedi] - where - description = "One of the films in the Star Wars Trilogy" - newHope = ("NEW_HOPE", EnumValue $ Just "Released in 1977.") - empire = ("EMPIRE", EnumValue $ Just "Released in 1980.") - jedi = ("JEDI", EnumValue $ Just "Released in 1983.") - -hero :: Resolve (Either SomeException) -hero = do - episode <- argument "episode" - pure $ character $ case episode of - Enum "NEW_HOPE" -> getHero 4 - Enum "EMPIRE" -> getHero 5 - Enum "JEDI" -> getHero 6 - _ -> artoo - -human :: Resolve (Either SomeException) -human = do - id' <- argument "id" - case id' of - String i -> pure $ maybe Null character $ getHuman i >>= Just - _ -> throwM InvalidArguments - -droid :: Resolve (Either SomeException) -droid = do - id' <- argument "id" - case id' of - String i -> pure $ maybe Null character $ getDroid i >>= Just - _ -> throwM InvalidArguments - -character :: Character -> Value -character char = Object $ HashMap.fromList - [ ("id", String $ id_ char) - , ("name", String $ name_ char) - , ("friends", List $ character <$> getFriends char) - , ("appearsIn", List $ Enum <$> catMaybes (getEpisode <$> appearsIn char)) - , ("homePlanet", String $ either mempty homePlanet char) - , ("__typename", String $ typeName char) - ] |
