summaryrefslogtreecommitdiff
path: root/tests/Language
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2020-05-22 10:11:48 +0200
committerEugen Wissner <belka@caraus.de>2020-05-22 10:11:48 +0200
commit26cc53ce0678d48bf7d5550df65171e6bf5288d2 (patch)
tree4b823c8d481463f2d2eb43beeea06310b2c51e5e /tests/Language
parentc3ecfece0358d79dd1da6efbe6ab83e63bf50f88 (diff)
downloadgraphql-26cc53ce0678d48bf7d5550df65171e6bf5288d2.tar.gz
Reject variables as default values
Diffstat (limited to 'tests/Language')
-rw-r--r--tests/Language/GraphQL/AST/ParserSpec.hs11
-rw-r--r--tests/Language/GraphQL/Execute/CoerceSpec.hs32
2 files changed, 40 insertions, 3 deletions
diff --git a/tests/Language/GraphQL/AST/ParserSpec.hs b/tests/Language/GraphQL/AST/ParserSpec.hs
index 4fae5b1..2801b57 100644
--- a/tests/Language/GraphQL/AST/ParserSpec.hs
+++ b/tests/Language/GraphQL/AST/ParserSpec.hs
@@ -8,7 +8,7 @@ import Data.List.NonEmpty (NonEmpty(..))
import Language.GraphQL.AST.Document
import Language.GraphQL.AST.Parser
import Test.Hspec (Spec, describe, it)
-import Test.Hspec.Megaparsec (shouldParse, shouldSucceedOn)
+import Test.Hspec.Megaparsec (shouldParse, shouldFailOn, shouldSucceedOn)
import Text.Megaparsec (parse)
import Text.RawString.QQ (r)
@@ -141,4 +141,11 @@ spec = describe "Parser" $ do
extend type Story {
isHiddenLocally: Boolean
}
- |] \ No newline at end of file
+ |]
+
+ it "rejects variables in DefaultValue" $
+ parse document "" `shouldFailOn` [r|
+ query ($book: String = "Zarathustra", $author: String = $book) {
+ title
+ }
+ |]
diff --git a/tests/Language/GraphQL/Execute/CoerceSpec.hs b/tests/Language/GraphQL/Execute/CoerceSpec.hs
index 45a647d..2ddab0c 100644
--- a/tests/Language/GraphQL/Execute/CoerceSpec.hs
+++ b/tests/Language/GraphQL/Execute/CoerceSpec.hs
@@ -6,15 +6,30 @@ module Language.GraphQL.Execute.CoerceSpec
import Data.Aeson as Aeson ((.=))
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Types as Aeson
+import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HashMap
import Data.Maybe (isNothing)
import Data.Scientific (scientific)
+import qualified Data.Set as Set
import Language.GraphQL.AST.Core
import Language.GraphQL.Execute.Coerce
+import Language.GraphQL.Schema
import Language.GraphQL.Type.Definition
import Prelude hiding (id)
import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
+direction :: EnumType
+direction = EnumType "Direction" Nothing
+ $ Set.fromList ["NORTH", "EAST", "SOUTH", "WEST"]
+
+coerceInputLiteral :: InputType -> Value -> Maybe Subs
+coerceInputLiteral input value = coerceInputLiterals
+ (HashMap.singleton "variableName" input)
+ (HashMap.singleton "variableName" value)
+
+lookupActual :: Maybe (HashMap Name Value) -> Maybe Value
+lookupActual = (HashMap.lookup "variableName" =<<)
+
singletonInputObject :: InputType
singletonInputObject = ObjectInputType type'
where
@@ -23,7 +38,7 @@ singletonInputObject = ObjectInputType type'
field = InputField Nothing (ScalarInputType string) Nothing
spec :: Spec
-spec =
+spec = do
describe "ToGraphQL Aeson" $ do
it "coerces strings" $
let expected = Just (String "asdf")
@@ -86,3 +101,18 @@ spec =
actual = coerceVariableValue listType list
expected = Just $ List [String "asdf", String "qwer"]
in actual `shouldBe` expected
+
+ describe "coerceInputLiterals" $ do
+ it "coerces enums" $
+ let expected = Just (Enum "NORTH")
+ actual = coerceInputLiteral
+ (EnumInputType direction) (Enum "NORTH")
+ in lookupActual actual `shouldBe` expected
+ it "fails with non-existing enum value" $
+ let actual = coerceInputLiteral
+ (EnumInputType direction) (Enum "NORTH_EAST")
+ in actual `shouldSatisfy` isNothing
+ it "coerces integers to IDs" $
+ let expected = Just (String "1234")
+ actual = coerceInputLiteral (ScalarInputType id) (Int 1234)
+ in lookupActual actual `shouldBe` expected