aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Language/GraphQL/EncoderSpec.hs21
-rw-r--r--tests/Test/KitchenSinkSpec.hs59
-rw-r--r--tests/data/kitchen-sink.graphql6
-rw-r--r--tests/data/kitchen-sink.min.graphql2
4 files changed, 78 insertions, 10 deletions
diff --git a/tests/Language/GraphQL/EncoderSpec.hs b/tests/Language/GraphQL/EncoderSpec.hs
new file mode 100644
index 0000000..d2d4a00
--- /dev/null
+++ b/tests/Language/GraphQL/EncoderSpec.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Language.GraphQL.EncoderSpec
+ ( spec
+ ) where
+
+import Language.GraphQL.AST ( Value(..))
+import Language.GraphQL.Encoder ( value
+ , minified
+ )
+import Test.Hspec ( Spec
+ , describe
+ , it
+ , shouldBe
+ )
+
+spec :: Spec
+spec = describe "value" $ do
+ it "escapes \\" $
+ value minified (ValueString "\\") `shouldBe` "\"\\\\\""
+ it "escapes quotes" $
+ value minified (ValueString "\"") `shouldBe` "\"\\\"\""
diff --git a/tests/Test/KitchenSinkSpec.hs b/tests/Test/KitchenSinkSpec.hs
index 99a00f7..ae3c2c4 100644
--- a/tests/Test/KitchenSinkSpec.hs
+++ b/tests/Test/KitchenSinkSpec.hs
@@ -1,8 +1,11 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
module Test.KitchenSinkSpec
( spec
) where
import qualified Data.Text.IO as Text.IO
+import qualified Data.Text.Lazy.IO as Text.Lazy.IO
import qualified Language.GraphQL.Encoder as Encoder
import qualified Language.GraphQL.Parser as Parser
import Paths_graphql (getDataFileName)
@@ -16,14 +19,58 @@ import Test.Hspec.Expectations ( expectationFailure
import Text.Megaparsec ( errorBundlePretty
, parse
)
+import Text.RawString.QQ (r)
spec :: Spec
-spec = describe "Kitchen Sink" $
- it "prints the query" $ do
- dataFileName <- getDataFileName "tests/data/kitchen-sink.min.graphql"
- expected <- Text.IO.readFile dataFileName
+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.Lazy.IO.readFile minFileName
either
(expectationFailure . errorBundlePretty)
- (flip shouldBe expected . Encoder.document)
- $ parse Parser.document dataFileName expected
+ (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)
+ $ parse Parser.document dataFileName actual
diff --git a/tests/data/kitchen-sink.graphql b/tests/data/kitchen-sink.graphql
index 46fd10e..89903b7 100644
--- a/tests/data/kitchen-sink.graphql
+++ b/tests/data/kitchen-sink.graphql
@@ -7,11 +7,11 @@
query queryName($foo: ComplexType, $site: Site = MOBILE) {
whoever123is: node(id: [123, 456]) {
- id , # Inline test comment
+ id, # Inline test comment
... on User @defer {
field2 {
- id ,
- alias: field1(first:10, after:$foo,) @include(if: $foo) {
+ id,
+ alias: field1(first: 10, after: $foo) @include(if: $foo) {
id,
...frag
}
diff --git a/tests/data/kitchen-sink.min.graphql b/tests/data/kitchen-sink.min.graphql
index 4f8553d..24f5c26 100644
--- a/tests/data/kitchen-sink.min.graphql
+++ b/tests/data/kitchen-sink.min.graphql
@@ -1 +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"})}
+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}