summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-06-03 07:20:38 +0200
committerEugen Wissner <belka@caraus.de>2020-06-03 07:20:38 +0200
commit93a04032886976b540f5fdb1417bd085a642f772 (patch)
tree712dda8a81286e0e39719a25f798ce23bb574e69 /tests
parentd12577ae717512979c7654191ca65f25fc877907 (diff)
downloadgraphql-93a04032886976b540f5fdb1417bd085a642f772.tar.gz
Resolve abstract types
Objects that can be a part of an union or interface should return __typename as string.
Diffstat (limited to 'tests')
-rw-r--r--tests/Test/DirectiveSpec.hs2
-rw-r--r--tests/Test/FragmentSpec.hs22
-rw-r--r--tests/Test/RootOperationSpec.hs6
-rw-r--r--tests/Test/StarWars/Schema.hs53
4 files changed, 54 insertions, 29 deletions
diff --git a/tests/Test/DirectiveSpec.hs b/tests/Test/DirectiveSpec.hs
index 55a5277..ca1103b 100644
--- a/tests/Test/DirectiveSpec.hs
+++ b/tests/Test/DirectiveSpec.hs
@@ -20,7 +20,7 @@ experimentalResolver = Schema { query = queryType, mutation = Nothing }
resolver = pure $ Int 5
queryType = Out.ObjectType "Query" Nothing []
$ HashMap.singleton "experimentalField"
- $ Out.Field Nothing (Out.NamedScalarType int) mempty resolver
+ $ Out.Resolver (Out.Field Nothing (Out.NamedScalarType int) mempty) resolver
emptyObject :: Aeson.Value
emptyObject = object
diff --git a/tests/Test/FragmentSpec.hs b/tests/Test/FragmentSpec.hs
index 36e88b1..0737706 100644
--- a/tests/Test/FragmentSpec.hs
+++ b/tests/Test/FragmentSpec.hs
@@ -54,32 +54,38 @@ hasErrors _ = True
shirtType :: Out.ObjectType IO
shirtType = Out.ObjectType "Shirt" Nothing []
$ HashMap.fromList
- [ ("size", Out.Field Nothing (Out.NamedScalarType string) mempty $ pure $ snd size)
- , ("circumference", Out.Field Nothing (Out.NamedScalarType int) mempty $ pure $ snd circumference)
- , ("__typename", Out.Field Nothing (Out.NamedScalarType string) mempty $ pure $ String "Shirt")
+ [ ("size", Out.Resolver sizeFieldType $ pure $ snd size)
+ , ("circumference", Out.Resolver circumferenceFieldType $ pure $ snd circumference)
]
hatType :: Out.ObjectType IO
hatType = Out.ObjectType "Hat" Nothing []
$ HashMap.fromList
- [ ("size", Out.Field Nothing (Out.NamedScalarType string) mempty $ pure $ snd size)
- , ("circumference", Out.Field Nothing (Out.NamedScalarType int) mempty $ pure $ snd circumference)
- , ("__typename", Out.Field Nothing (Out.NamedScalarType string) mempty $ pure $ String "Hat")
+ [ ("size", Out.Resolver sizeFieldType $ pure $ snd size)
+ , ("circumference", Out.Resolver circumferenceFieldType $ pure $ snd circumference)
]
+circumferenceFieldType :: Out.Field IO
+circumferenceFieldType = Out.Field Nothing (Out.NamedScalarType int) mempty
+
+sizeFieldType :: Out.Field IO
+sizeFieldType = Out.Field Nothing (Out.NamedScalarType string) mempty
+
toSchema :: Text -> (Text, Value) -> Schema IO
toSchema t (_, resolve) = Schema
{ query = queryType, mutation = Nothing }
where
unionMember = if t == "Hat" then hatType else shirtType
+ typeNameField = Out.Field Nothing (Out.NamedScalarType string) mempty
+ garmentField = Out.Field Nothing (Out.NamedObjectType unionMember) mempty
queryType =
case t of
"circumference" -> hatType
"size" -> shirtType
_ -> Out.ObjectType "Query" Nothing []
$ HashMap.fromList
- [ ("garment", Out.Field Nothing (Out.NamedObjectType unionMember) mempty $ pure resolve)
- , ("__typename", Out.Field Nothing (Out.NamedScalarType string) mempty $ pure $ String "Shirt")
+ [ ("garment", Out.Resolver garmentField $ pure resolve)
+ , ("__typename", Out.Resolver typeNameField $ pure $ String "Shirt")
]
spec :: Spec
diff --git a/tests/Test/RootOperationSpec.hs b/tests/Test/RootOperationSpec.hs
index 3b21788..922e098 100644
--- a/tests/Test/RootOperationSpec.hs
+++ b/tests/Test/RootOperationSpec.hs
@@ -16,7 +16,7 @@ import Language.GraphQL.Type.Schema
hatType :: Out.ObjectType IO
hatType = Out.ObjectType "Hat" Nothing []
$ HashMap.singleton "circumference"
- $ Out.Field Nothing (Out.NamedScalarType int) mempty
+ $ Out.Resolver (Out.Field Nothing (Out.NamedScalarType int) mempty)
$ pure $ Int 60
schema :: Schema IO
@@ -28,10 +28,10 @@ schema = Schema
[ ("circumference", Int 60)
]
incrementField = HashMap.singleton "incrementCircumference"
- $ Out.Field Nothing (Out.NamedScalarType int) mempty
+ $ Out.Resolver (Out.Field Nothing (Out.NamedScalarType int) mempty)
$ pure $ Int 61
hatField = HashMap.singleton "garment"
- $ Out.Field Nothing (Out.NamedObjectType hatType) mempty garment
+ $ Out.Resolver (Out.Field Nothing (Out.NamedObjectType hatType) mempty) garment
spec :: Spec
spec =
diff --git a/tests/Test/StarWars/Schema.hs b/tests/Test/StarWars/Schema.hs
index 0ab10ec..b30da1a 100644
--- a/tests/Test/StarWars/Schema.hs
+++ b/tests/Test/StarWars/Schema.hs
@@ -24,32 +24,51 @@ schema :: Schema Identity
schema = Schema { query = queryType, mutation = Nothing }
where
queryType = Out.ObjectType "Query" Nothing [] $ HashMap.fromList
- [ ("hero", Out.Field Nothing (Out.NamedObjectType heroObject) mempty hero)
- , ("human", Out.Field Nothing (Out.NamedObjectType heroObject) mempty human)
- , ("droid", Out.Field Nothing (Out.NamedObjectType droidObject) mempty droid)
+ [ ("hero", Out.Resolver (Out.Field Nothing (Out.NamedObjectType heroObject) mempty) hero)
+ , ("human", Out.Resolver (Out.Field Nothing (Out.NamedObjectType heroObject) mempty) human)
+ , ("droid", Out.Resolver (Out.Field Nothing (Out.NamedObjectType droidObject) mempty) droid)
]
heroObject :: Out.ObjectType Identity
heroObject = Out.ObjectType "Human" Nothing [] $ HashMap.fromList
- [ ("id", Out.Field Nothing (Out.NamedScalarType id) mempty (idField "id"))
- , ("name", Out.Field Nothing (Out.NamedScalarType string) mempty (idField "name"))
- , ("friends", Out.Field Nothing (Out.ListType $ Out.NamedObjectType heroObject) mempty (idField "friends"))
- , ("appearsIn", Out.Field Nothing (Out.ListType $ Out.NamedScalarType int) mempty (idField "appearsIn"))
- , ("homePlanet", Out.Field Nothing (Out.NamedScalarType string) mempty (idField "homePlanet"))
- , ("secretBackstory", Out.Field Nothing (Out.NamedScalarType string) mempty (String <$> secretBackstory))
- , ("__typename", Out.Field Nothing (Out.NamedScalarType string) mempty (idField "__typename"))
+ [ ("id", Out.Resolver idFieldType (idField "id"))
+ , ("name", Out.Resolver nameFieldType (idField "name"))
+ , ("friends", Out.Resolver friendsFieldType (idField "friends"))
+ , ("appearsIn", Out.Resolver appearsInFieldType (idField "appearsIn"))
+ , ("homePlanet", Out.Resolver homePlanetFieldType (idField "homePlanet"))
+ , ("secretBackstory", Out.Resolver secretBackstoryFieldType (String <$> secretBackstory))
+ , ("__typename", Out.Resolver (Out.Field Nothing (Out.NamedScalarType string) mempty) (idField "__typename"))
]
+ where
+ homePlanetFieldType = Out.Field Nothing (Out.NamedScalarType string) mempty
droidObject :: Out.ObjectType Identity
droidObject = Out.ObjectType "Droid" Nothing [] $ HashMap.fromList
- [ ("id", Out.Field Nothing (Out.NamedScalarType id) mempty (idField "id"))
- , ("name", Out.Field Nothing (Out.NamedScalarType string) mempty (idField "name"))
- , ("friends", Out.Field Nothing (Out.ListType $ Out.NamedObjectType droidObject) mempty (idField "friends"))
- , ("appearsIn", Out.Field Nothing (Out.ListType $ Out.NamedScalarType int) mempty (idField "appearsIn"))
- , ("primaryFunction", Out.Field Nothing (Out.NamedScalarType string) mempty (idField "primaryFunction"))
- , ("secretBackstory", Out.Field Nothing (Out.NamedScalarType string) mempty (String <$> secretBackstory))
- , ("__typename", Out.Field Nothing (Out.NamedScalarType string) mempty (idField "__typename"))
+ [ ("id", Out.Resolver idFieldType (idField "id"))
+ , ("name", Out.Resolver nameFieldType (idField "name"))
+ , ("friends", Out.Resolver friendsFieldType (idField "friends"))
+ , ("appearsIn", Out.Resolver appearsInFieldType (idField "appearsIn"))
+ , ("primaryFunction", Out.Resolver primaryFunctionFieldType (idField "primaryFunction"))
+ , ("secretBackstory", Out.Resolver secretBackstoryFieldType (String <$> secretBackstory))
+ , ("__typename", Out.Resolver (Out.Field Nothing (Out.NamedScalarType string) mempty) (idField "__typename"))
]
+ where
+ primaryFunctionFieldType = Out.Field Nothing (Out.NamedScalarType string) mempty
+
+idFieldType :: Out.Field Identity
+idFieldType = Out.Field Nothing (Out.NamedScalarType id) mempty
+
+nameFieldType :: Out.Field Identity
+nameFieldType = Out.Field Nothing (Out.NamedScalarType string) mempty
+
+friendsFieldType :: Out.Field Identity
+friendsFieldType = Out.Field Nothing (Out.ListType $ Out.NamedObjectType droidObject) mempty
+
+appearsInFieldType :: Out.Field Identity
+appearsInFieldType = Out.Field Nothing (Out.ListType $ Out.NamedScalarType int) mempty
+
+secretBackstoryFieldType :: Out.Field Identity
+secretBackstoryFieldType = Out.Field Nothing (Out.NamedScalarType string) mempty
idField :: Text -> ActionT Identity Value
idField f = do