forked from OSS/graphql
Fix merging fields with arguments
executeField shouldn't assume that a selection has only one field with a given name, but it should take the first field. The underlying cause is a wrong pattern, which (because of the laziness) is executed only if the field has arguments.
This commit is contained in:
parent
2ce2be5d91
commit
6fe9eb72e4
@ -23,6 +23,10 @@ and this project adheres to
|
|||||||
- `valuesOfCorrectTypeRule` doesn't check objects recursively since the
|
- `valuesOfCorrectTypeRule` doesn't check objects recursively since the
|
||||||
validation traverser calls it on all object properties.
|
validation traverser calls it on all object properties.
|
||||||
- Validation of non-nullable values inside lists.
|
- Validation of non-nullable values inside lists.
|
||||||
|
- `executeField` shouldn't assume that a selection has only one field with a
|
||||||
|
given name, but it should take the first field. The underlying cause is a
|
||||||
|
wrong pattern, which (because of the laziness) is executed only if the field
|
||||||
|
has arguments.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- `AST.Document.Value.List` and `AST.Document.ConstValue.ConstList` contain
|
- `AST.Document.Value.List` and `AST.Document.ConstValue.ConstList` contain
|
||||||
|
@ -97,7 +97,7 @@ executeField fieldResolver prev fields
|
|||||||
where
|
where
|
||||||
executeField' fieldDefinition resolver = do
|
executeField' fieldDefinition resolver = do
|
||||||
let Out.Field _ fieldType argumentDefinitions = fieldDefinition
|
let Out.Field _ fieldType argumentDefinitions = fieldDefinition
|
||||||
let (Transform.Field _ _ arguments' _ _ :| []) = fields
|
let Transform.Field _ _ arguments' _ _ = NonEmpty.head fields
|
||||||
case coerceArgumentValues argumentDefinitions arguments' of
|
case coerceArgumentValues argumentDefinitions arguments' of
|
||||||
Nothing -> addError null $ Error "Argument coercing failed." [] []
|
Nothing -> addError null $ Error "Argument coercing failed." [] []
|
||||||
Just argumentValues -> do
|
Just argumentValues -> do
|
||||||
|
@ -21,7 +21,9 @@ import Language.GraphQL.Error
|
|||||||
import Language.GraphQL.Execute (execute)
|
import Language.GraphQL.Execute (execute)
|
||||||
import qualified Language.GraphQL.Type.Schema as Schema
|
import qualified Language.GraphQL.Type.Schema as Schema
|
||||||
import Language.GraphQL.Type
|
import Language.GraphQL.Type
|
||||||
|
import qualified Language.GraphQL.Type.In as In
|
||||||
import qualified Language.GraphQL.Type.Out as Out
|
import qualified Language.GraphQL.Type.Out as Out
|
||||||
|
import Prelude hiding (id)
|
||||||
import Test.Hspec (Spec, context, describe, it, shouldBe)
|
import Test.Hspec (Spec, context, describe, it, shouldBe)
|
||||||
import Text.Megaparsec (parse)
|
import Text.Megaparsec (parse)
|
||||||
import Text.RawString.QQ (r)
|
import Text.RawString.QQ (r)
|
||||||
@ -43,7 +45,9 @@ queryType = Out.ObjectType "Query" Nothing []
|
|||||||
$ pure $ Object mempty
|
$ pure $ Object mempty
|
||||||
where
|
where
|
||||||
philosopherField =
|
philosopherField =
|
||||||
Out.Field Nothing (Out.NonNullObjectType philosopherType) HashMap.empty
|
Out.Field Nothing (Out.NonNullObjectType philosopherType)
|
||||||
|
$ HashMap.singleton "id"
|
||||||
|
$ In.Argument Nothing (In.NamedScalarType id) Nothing
|
||||||
|
|
||||||
musicType :: Out.ObjectType (Either SomeException)
|
musicType :: Out.ObjectType (Either SomeException)
|
||||||
musicType = Out.ObjectType "Music" Nothing []
|
musicType = Out.ObjectType "Music" Nothing []
|
||||||
|
Loading…
Reference in New Issue
Block a user