Add pending inline fragment tests
This commit is contained in:
parent
721cbaee17
commit
c075a41582
@ -1,6 +1,8 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## Unreleased
|
||||||
|
|
||||||
## [0.5.0.1] - 2019-09-10
|
## [0.5.0.1] - 2019-09-10
|
||||||
### Added
|
### Added
|
||||||
- Minimal documentation for all public symbols.
|
- Minimal documentation for all public symbols.
|
||||||
|
@ -4,7 +4,7 @@ cabal-version: 1.12
|
|||||||
--
|
--
|
||||||
-- see: https://github.com/sol/hpack
|
-- see: https://github.com/sol/hpack
|
||||||
--
|
--
|
||||||
-- hash: 0b3b2cb6ec02a4eeaee98d4c003d4cbe68ab81fde1810b06b0b6eeb61010298c
|
-- hash: ff53309ec0180b799fcc69ff3a53a6c9411940332e75ebc8097a83d40c085d98
|
||||||
|
|
||||||
name: graphql
|
name: graphql
|
||||||
version: 0.5.0.1
|
version: 0.5.0.1
|
||||||
@ -70,6 +70,7 @@ test-suite tasty
|
|||||||
Language.GraphQL.ErrorSpec
|
Language.GraphQL.ErrorSpec
|
||||||
Language.GraphQL.LexerSpec
|
Language.GraphQL.LexerSpec
|
||||||
Language.GraphQL.ParserSpec
|
Language.GraphQL.ParserSpec
|
||||||
|
Test.FragmentSpec
|
||||||
Test.KitchenSinkSpec
|
Test.KitchenSinkSpec
|
||||||
Test.StarWars.Data
|
Test.StarWars.Data
|
||||||
Test.StarWars.QuerySpec
|
Test.StarWars.QuerySpec
|
||||||
|
57
tests/Test/FragmentSpec.hs
Normal file
57
tests/Test/FragmentSpec.hs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE QuasiQuotes #-}
|
||||||
|
module Test.FragmentSpec
|
||||||
|
( spec
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Aeson (object, (.=))
|
||||||
|
import Data.List.NonEmpty (NonEmpty(..))
|
||||||
|
import Data.Text (Text)
|
||||||
|
import Language.GraphQL
|
||||||
|
import qualified Language.GraphQL.Schema as Schema
|
||||||
|
import Test.Hspec (Spec, it, shouldBe, xdescribe)
|
||||||
|
import Text.RawString.QQ (r)
|
||||||
|
|
||||||
|
size :: Schema.Resolver IO
|
||||||
|
size = Schema.scalar "size" $ return ("L" :: Text)
|
||||||
|
|
||||||
|
circumference :: Schema.Resolver IO
|
||||||
|
circumference = Schema.scalar "circumference" $ return (60 :: Int)
|
||||||
|
|
||||||
|
garment :: Text -> Schema.Resolver IO
|
||||||
|
garment typeName = Schema.object "garment" $ return
|
||||||
|
[ if typeName == "Hat" then circumference else size
|
||||||
|
, Schema.scalar "__typename" $ return typeName
|
||||||
|
]
|
||||||
|
|
||||||
|
inlineQuery :: Text
|
||||||
|
inlineQuery = [r|{
|
||||||
|
garment {
|
||||||
|
... on Hat {
|
||||||
|
circumference
|
||||||
|
}
|
||||||
|
... on Shirt {
|
||||||
|
size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}|]
|
||||||
|
|
||||||
|
spec :: Spec
|
||||||
|
spec = xdescribe "Inline fragment executor" $ do
|
||||||
|
it "chooses the first selection if the type matches" $ do
|
||||||
|
actual <- graphql (garment "Hat" :| []) inlineQuery
|
||||||
|
let expected = object
|
||||||
|
[ "garment" .= object
|
||||||
|
[ "circumference" .= (60 :: Int)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
in actual `shouldBe` expected
|
||||||
|
|
||||||
|
it "chooses the last selection if the type matches" $ do
|
||||||
|
actual <- graphql (garment "Shirt" :| []) inlineQuery
|
||||||
|
let expected = object
|
||||||
|
[ "garment" .= object
|
||||||
|
[ "size" .= ("L" :: Text)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
in actual `shouldBe` expected
|
Loading…
Reference in New Issue
Block a user