{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Case.Interface.Test
( testInterface,
)
where
import Data.ByteString.Lazy.Char8
( ByteString,
)
import Data.Morpheus.Client
( Fetch (..),
FetchError,
gql,
)
import Data.Text (Text)
import Spec.Utils
( defineClientWith,
mockApi,
)
import Test.Tasty
( TestTree,
)
import Test.Tasty.HUnit
( assertEqual,
testCase,
)
import Prelude
( ($),
Either (..),
IO,
String,
)
defineClientWith
"Interface"
[gql|
query MyQuery {
character {
name
... on Deity {
power
}
... on Hero {
hobby
}
}
character2: character {
name1: name
name
}
character3: character {
... on Hero {
hobby
}
... on Character {
name2: name
}
}
character4: character {
... on Hero {
hobby
}
}
}
|]
resolver :: ByteString -> IO ByteString
resolver = mockApi "Interface"
client :: IO (Either (FetchError MyQuery) MyQuery)
client = fetch resolver ()
testInterface :: TestTree
testInterface = testCase "test interfaces" $ do
value <- client
assertEqual
"test interface"
( Right
( MyQuery
{ character =
[ CharacterDeity
{ __typename = "Deity",
name = "Deity Name",
power = "Deity Power"
},
CharacterCharacter
{ __typename = "Character",
name = "Character Name"
},
CharacterHero
{ __typename = "Hero",
name = "Hero Name",
hobby = "Deity Power"
}
],
character2 =
[ Character2Character
{ __typename = "Character",
name1 = "test name",
name = "test name"
}
],
character3 =
[ Character3Hero
{ __typename = "Hero",
hobby = "Hero Hobby",
name2 = "Hero name2"
},
Character3Character
{ __typename = "Deity",
name2 = "Hero name2"
},
Character3Character
{ __typename = "Character",
name2 = "Character name2"
}
],
character4 =
[ Character4Character
{ __typename = "Character"
},
Character4Hero
{ __typename = "Hero",
hobby = "Hero Hobby"
},
Character4Character
{ __typename = "Deity"
}
]
}
)
)
value