summaryrefslogtreecommitdiff
path: root/tests/Test/StarWars/Schema.hs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Test/StarWars/Schema.hs')
-rw-r--r--tests/Test/StarWars/Schema.hs92
1 files changed, 54 insertions, 38 deletions
diff --git a/tests/Test/StarWars/Schema.hs b/tests/Test/StarWars/Schema.hs
index cecd8eb..34a6a35 100644
--- a/tests/Test/StarWars/Schema.hs
+++ b/tests/Test/StarWars/Schema.hs
@@ -41,72 +41,88 @@ schema = Schema
droidFieldResolver = ValueResolver droidField droid
heroObject :: Out.ObjectType (Either SomeException)
-heroObject = Out.ObjectType "Human" Nothing [] $ HashMap.fromList
+heroObject = Out.ObjectType "Human" Nothing [characterType] $ HashMap.fromList
[ ("id", idFieldType)
, ("name", nameFieldType)
- , ("friends", friendsFieldType)
- , ("appearsIn", appearsInField)
+ , ("friends", friendsFieldResolver)
+ , ("appearsIn", appearsInFieldResolver)
, ("homePlanet", homePlanetFieldType)
- , ("secretBackstory", secretBackstoryFieldType)
- , ("__typename", typenameFieldType)
+ , ("secretBackstory", secretBackstoryFieldResolver)
+ , ("__typename", typenameFieldResolver)
]
where
homePlanetFieldType
= ValueResolver (Out.Field Nothing (Out.NamedScalarType string) mempty)
- $ idField "homePlanet"
+ $ defaultResolver "homePlanet"
droidObject :: Out.ObjectType (Either SomeException)
-droidObject = Out.ObjectType "Droid" Nothing [] $ HashMap.fromList
+droidObject = Out.ObjectType "Droid" Nothing [characterType] $ HashMap.fromList
[ ("id", idFieldType)
, ("name", nameFieldType)
- , ("friends", friendsFieldType)
- , ("appearsIn", appearsInField)
+ , ("friends", friendsFieldResolver)
+ , ("appearsIn", appearsInFieldResolver)
, ("primaryFunction", primaryFunctionFieldType)
- , ("secretBackstory", secretBackstoryFieldType)
- , ("__typename", typenameFieldType)
+ , ("secretBackstory", secretBackstoryFieldResolver)
+ , ("__typename", typenameFieldResolver)
]
where
primaryFunctionFieldType
= ValueResolver (Out.Field Nothing (Out.NamedScalarType string) mempty)
- $ idField "primaryFunction"
+ $ defaultResolver "primaryFunction"
-typenameFieldType :: Resolver (Either SomeException)
-typenameFieldType
+typenameFieldResolver :: Resolver (Either SomeException)
+typenameFieldResolver
= ValueResolver (Out.Field Nothing (Out.NamedScalarType string) mempty)
- $ idField "__typename"
+ $ defaultResolver "__typename"
idFieldType :: Resolver (Either SomeException)
-idFieldType
- = ValueResolver (Out.Field Nothing (Out.NamedScalarType id) mempty)
- $ idField "id"
+idFieldType = ValueResolver idField $ defaultResolver "id"
nameFieldType :: Resolver (Either SomeException)
-nameFieldType
- = ValueResolver (Out.Field Nothing (Out.NamedScalarType string) mempty)
- $ idField "name"
+nameFieldType = ValueResolver nameField $ defaultResolver "name"
-friendsFieldType :: Resolver (Either SomeException)
-friendsFieldType
- = ValueResolver (Out.Field Nothing fieldType mempty)
- $ idField "friends"
- where
- fieldType = Out.ListType $ Out.NamedObjectType droidObject
+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
-appearsInField :: Resolver (Either SomeException)
-appearsInField
- = ValueResolver (Out.Field (Just description) fieldType mempty)
- $ idField "appearsIn"
+friendsField :: Field (Either SomeException)
+friendsField = Field Nothing friendsFieldType mempty
where
- fieldType = Out.ListType $ Out.NamedEnumType episodeEnum
- description = "Which movies they appear in."
+ friendsFieldType = Out.ListType (Out.NamedInterfaceType characterType)
-secretBackstoryFieldType :: Resolver (Either SomeException)
-secretBackstoryFieldType = ValueResolver field secretBackstory
+appearsInField :: Field (Either SomeException)
+appearsInField = Field appearsInDescription appearsInFieldType mempty
where
- field = Out.Field Nothing (Out.NamedScalarType string) mempty
+ 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
-idField :: Text -> Resolve (Either SomeException)
-idField f = do
+defaultResolver :: Text -> Resolve (Either SomeException)
+defaultResolver f = do
v <- asks values
let (Object v') = v
pure $ v' HashMap.! f