@@ -3,6 +3,7 @@ module Test.Main where
33import Prelude
44
55import Data.Generic.Rep (class Generic)
6+import Data.Variant (Variant)
67import Data.Array as Array
78import Data.Map as Map
89import Foreign (unsafeToForeign)
@@ -52,6 +53,7 @@ import Prospero.ResponseValue (ResponseValue(..))
5253import Prospero.RootResolver (GraphQL, graphql, mkGraphQL, mkGraphQL', mkGraphQLWithMutations, mkGraphQLWithSubscriptions, withFederation, executeQuery, executeOperation)
5354import Prospero.Federation (EntityResolvers)
5455import Prospero.Step (Step(..))
56+import Prospero.VariantHelper (tag)
5557import Test.Spec (describe, it)
5658import Test.Spec.Assertions (fail, shouldEqual)
5759import Test.Spec.Reporter.Console (consoleReporter)
@@ -96,9 +98,9 @@ instance FromInputValue Episode where
9698
9799instance IsGql Enum "Episode" Episode
98100
99−data SearchResult = AsHuman Character | AsDroid Character
101+newtype SearchResult = SearchResult (Variant (Character :: Character))
100102
101−derive instance Generic SearchResult _
103+derive instance Newtype SearchResult _
102104
103105instance IsGql Union "SearchResult" SearchResult
104106
@@ -112,9 +114,9 @@ newtype Droid = Droid { name :: String, primaryFunction :: String }
112114derive instance Newtype Droid _
113115instance IsGql Object "Droid" Droid
114116
115−data ClientSearchResult = HumanResult Human | DroidResult Droid
117+newtype ClientSearchResult = ClientSearchResult (Variant (Human :: Human, Droid :: Droid))
116118
117−derive instance Generic ClientSearchResult _
119+derive instance Newtype ClientSearchResult _
118120instance IsGql Union "ClientSearchResult" ClientSearchResult
119121
120122type Queries ctx errs =
@@ -144,7 +146,7 @@ enumSchema :: forall gql. GraphQL Ctx Errs gql
144146enumSchema = mkGraphQL { episode: pure Empire :: Om Ctx Errs Episode }
145147
146148unionSchema :: forall gql. GraphQL Ctx Errs gql
147−unionSchema = mkGraphQL { search: pure (AsDroid bob) :: Om Ctx Errs SearchResult }
149+unionSchema = mkGraphQL { search: pure (tag @"Character" bob) :: Om Ctx Errs SearchResult }
148150
149151testResolve :: Character -> Step Ctx Errs
150152testResolve = resolve
@@ -499,7 +501,7 @@ main = launchAff_ $ runSpec [ consoleReporter ] do
499501
500502 describe "Unions" do
501503 it "resolves union member" do
502− let step = resolve @Ctx @Errs (AsHuman alice)
504+ let step = resolve @Ctx @Errs (tag @"Character" alice :: SearchResult)
503505 result <- runTestOm $ executeStep [] [ field "name" [] ] step
504506 result `shouldEqual` ObjectValue
505507 (Object.fromHomogeneous { name: StringValue "Alice" })
@@ -521,7 +523,7 @@ main = launchAff_ $ runSpec [ consoleReporter ] do
521523 , " search: SearchResult!"
522524 , "}"
523525 ]
524− , "union SearchResult = Character | Character"
526+ , "union SearchResult = Character"
525527 ]
526528
527529 describe "Introspection" do