summaryrefslogtreecommitdiff
path: root/tests/Test/QuerySpec.hs
blob: 95608b0f56a4376f342655491a6d8f69cc31ace8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module Test.QuerySpec
    ( spec
    ) where

import Data.Aeson ((.=), object)
import qualified Data.HashMap.Strict as HashMap
import Data.List.NonEmpty (NonEmpty(..))
import Language.GraphQL
import qualified Language.GraphQL.Schema as Schema
import Test.Hspec (Spec, describe, it, shouldBe)
import Text.RawString.QQ (r)

spec :: Spec
spec =
    describe "Query executor" $
        it "returns objects from the root resolvers" $ do
            let query = [r|
              {
                garment {
                  circumference
                }
              }
            |]
                expected = object
                    [ "data" .= object
                        [ "garment" .= object
                            [ "circumference" .= (60 :: Int)
                            ]
                        ]
                    ]
            actual <- graphql schema query
            actual `shouldBe` expected
          where
            schema = HashMap.singleton "Query" $ garment' :| []
            garment' = Schema.object "garment" $ return
                [ circumference'
                ]
            circumference' = Schema.scalar "circumference" $ pure (60 :: Int)