Add kitchen sink parse/encode unit test
This also includes the fixes to make it work. Golden tests have been removed.
This commit is contained in:
@ -1 +0,0 @@
|
||||
Document [DefinitionOperation (Query "queryName" [VariableDefinition (Variable "foo") (TypeNamed (NamedType "ComplexType")) Nothing,VariableDefinition (Variable "site") (TypeNamed (NamedType "Site")) (Just (ValueEnum "MOBILE"))] [] [SelectionField (Field "whoever123is" "node" [Argument "id" (ValueList (ListValue [ValueInt 123,ValueInt 456]))] [] [SelectionField (Field "" "id" [] [] []),SelectionInlineFragment (InlineFragment (NamedType "User") [Directive "defer" []] [SelectionField (Field "" "field2" [] [] [SelectionField (Field "" "id" [] [] []),SelectionField (Field "alias" "field1" [Argument "first" (ValueInt 10),Argument "after" (ValueVariable (Variable "foo"))] [Directive "include" [Argument "if" (ValueVariable (Variable "foo"))]] [SelectionField (Field "" "id" [] [] []),SelectionFragmentSpread (FragmentSpread "frag" [])])])])])]),DefinitionOperation (Mutation "likeStory" [] [] [SelectionField (Field "" "like" [Argument "story" (ValueInt 123)] [Directive "defer" []] [SelectionField (Field "" "story" [] [] [SelectionField (Field "" "id" [] [] [])])])]),DefinitionFragment (FragmentDefinition "frag" (NamedType "Friend") [] [SelectionField (Field "" "foo" [Argument "size" (ValueVariable (Variable "size")),Argument "bar" (ValueVariable (Variable "b")),Argument "obj" (ValueObject (ObjectValue [ObjectField "key" (ValueString "value")]))] [] [])])]
|
1
tests/data/kitchen-sink.min.graphql
Normal file
1
tests/data/kitchen-sink.min.graphql
Normal file
@ -0,0 +1 @@
|
||||
query queryName($foo:ComplexType,$site:Site=MOBILE){whoever123is:node(id:[123,456]){id,... on User@defer{field2{id,alias:field1(first:10,after:$foo)@include(if:$foo){id,...frag}}}}}mutation likeStory{like(story:123)@defer{story{id}}}fragment frag on Friend{foo(size:$size,bar:$b,obj:{key:"value"})}
|
@ -1,25 +0,0 @@
|
||||
{-# LANGUAGE CPP #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main where
|
||||
|
||||
#if !MIN_VERSION_base(4,8,0)
|
||||
import Control.Applicative ((<$>), (<*>), pure)
|
||||
#endif
|
||||
import Control.Monad ((>=>))
|
||||
import Data.Attoparsec.Text (parseOnly)
|
||||
import Data.ByteString.Lazy.Char8 as B8
|
||||
import qualified Data.Text.IO as TIO
|
||||
import Test.Tasty (defaultMain)
|
||||
import Test.Tasty.Golden (goldenVsString)
|
||||
|
||||
import Paths_graphql (getDataFileName)
|
||||
import Data.GraphQL.Parser (document)
|
||||
|
||||
main :: IO ()
|
||||
main = defaultMain
|
||||
=<< goldenVsString "kitchen-sink.graphql"
|
||||
<$> getDataFileName "tests/data/kitchen-sink.graphql.graphql.golden"
|
||||
<*> (parse <$> getDataFileName "tests/data/kitchen-sink.graphql")
|
||||
where
|
||||
parse = fmap (parseOnly document) . TIO.readFile
|
||||
>=> pure . either B8.pack (flip B8.snoc '\n' . B8.pack . show)
|
23
tests/tasty.hs
Normal file
23
tests/tasty.hs
Normal file
@ -0,0 +1,23 @@
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Main where
|
||||
|
||||
import Data.Attoparsec.Text (parseOnly)
|
||||
import qualified Data.Text.IO as Text
|
||||
import Test.Tasty (defaultMain)
|
||||
import Test.Tasty.HUnit
|
||||
|
||||
import qualified Data.GraphQL.Parser as Parser
|
||||
import qualified Data.GraphQL.Printer as Printer
|
||||
|
||||
import Paths_graphql (getDataFileName)
|
||||
|
||||
main :: IO ()
|
||||
main = defaultMain =<< testCase "Kitchen Sink"
|
||||
<$> (assertEqual "Encode" <$> expected <*> actual)
|
||||
where
|
||||
expected = Text.readFile
|
||||
=<< getDataFileName "tests/data/kitchen-sink.min.graphql"
|
||||
|
||||
actual = either (error "Parsing error!") Printer.document
|
||||
<$> parseOnly Parser.document
|
||||
<$> expected
|
Reference in New Issue
Block a user