forked from OSS/graphql
76 lines
1.9 KiB
Haskell
76 lines
1.9 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE QuasiQuotes #-}
|
|
module Test.KitchenSinkSpec
|
|
( spec
|
|
) where
|
|
|
|
import qualified Data.Text.IO as Text.IO
|
|
import qualified Language.GraphQL.Encoder as Encoder
|
|
import qualified Language.GraphQL.Parser as Parser
|
|
import Paths_graphql (getDataFileName)
|
|
import Test.Hspec ( Spec
|
|
, describe
|
|
, it
|
|
)
|
|
import Test.Hspec.Expectations ( expectationFailure
|
|
, shouldBe
|
|
)
|
|
import Text.Megaparsec ( errorBundlePretty
|
|
, parse
|
|
)
|
|
import Text.RawString.QQ (r)
|
|
|
|
spec :: Spec
|
|
spec = describe "Kitchen Sink" $ do
|
|
it "minifies the query" $ do
|
|
dataFileName <- getDataFileName "tests/data/kitchen-sink.graphql"
|
|
minFileName <- getDataFileName "tests/data/kitchen-sink.min.graphql"
|
|
actual <- Text.IO.readFile dataFileName
|
|
expected <- Text.IO.readFile minFileName
|
|
|
|
either
|
|
(expectationFailure . errorBundlePretty)
|
|
(flip shouldBe expected . Encoder.document Encoder.Minified)
|
|
$ parse Parser.document dataFileName actual
|
|
|
|
it "pretty prints the query" $ do
|
|
dataFileName <- getDataFileName "tests/data/kitchen-sink.graphql"
|
|
actual <- Text.IO.readFile dataFileName
|
|
let expected = [r|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"})
|
|
}
|
|
|
|
{
|
|
unnamed(truthy:true,falsey:false)
|
|
query
|
|
}
|
|
|]
|
|
|
|
either
|
|
(expectationFailure . errorBundlePretty)
|
|
(flip shouldBe expected . Encoder.document (Encoder.Pretty 0))
|
|
$ parse Parser.document dataFileName actual
|