content: {-# LANGUAGE DeriveGeneric #-}
  {-# LANGUAGE DerivingStrategies #-}
  {-# LANGUAGE DuplicateRecordFields #-}
  {-# LANGUAGE MultiParamTypeClasses #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE QuasiQuotes #-}
  {-# LANGUAGE TemplateHaskell #-}
  {-# LANGUAGE TypeFamilies #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  
  module Case.Fragments.Test
    ( test,
    )
  where
  
  import Data.Morpheus.Client
    ( FetchError (..),
      declareLocalTypes,
    )
  import Relude
  import Spec.Utils
    ( assertFetch,
      path,
    )
  import Test.Tasty
    ( TestTree,
    )
  
  declareLocalTypes
    (path "Fragments/schema.gql")
    (path "Fragments/query.gql")
  
  result :: Either (FetchError MyQuery) MyQuery
  result =
    Right
      ( MyQuery
          { character =
              [ MyQueryCharacterVariantDeity
                  ( FragmentDEITY
                      { __typename = "Deity",
                        name = "Deity Name",
                        power = "Deity Power"
                      }
                  ),
                MyQueryCharacter,
                MyQueryCharacterVariantHero
                  ( FragmentHERO
                      { __typename = "Hero",
                        name = "Hero Name",
                        hobby = "Deity Power"
                      }
                  )
              ],
            withNewTypes =
              [ MyQueryWithNewTypesVariantDeity
                  ( MyQueryWithNewTypesDeity
                      { lastName = Nothing,
                        __typename = "Deity",
                        name = "Deity Name",
                        power = "Deity Power"
                      }
                  ),
                MyQueryWithNewTypesVariantCharacter
                  ( MyQueryWithNewTypesCharacter
                      { lastName = Nothing
                      }
                  ),
                MyQueryWithNewTypesVariantCharacter
                  ( MyQueryWithNewTypesCharacter
                      { lastName = Nothing
                      }
                  )
              ],
            person =
              [ FragmentPerson
                  { name = "test name",
                    lastName = Nothing
                  }
              ],
            hero =
              [ MyQueryHeroVariantHero
                  ( FragmentHERO
                      { __typename = "Hero",
                        name = "Hero name2",
                        hobby = "Hero Hobby"
                      }
                  ),
                MyQueryHero,
                MyQueryHero
              ],
            superhero =
              [ MyQuerySuperhero,
                MyQuerySuperheroVariantHero
                  ( FragmentHERO
                      { __typename = "Hero",
                        name = "Hero name2",
                        hobby = "Hero Hobby"
                      }
                  ),
                MyQuerySuperhero
              ]
          }
      )
  
  test :: TestTree
  test = assertFetch "Fragments" Nothing () result
  