From 54747c2602cfb219c944c9494de60c26ba26b012 Mon Sep 17 00:00:00 2001 From: Thiago Rodrigues de Paula Date: Fri, 11 Jan 2019 12:50:22 +0100 Subject: [PATCH 1/2] Use Hspec instead of Tasty --- graphql-api.cabal | 18 +++++------ package.yaml | 2 -- tests/{ASTTests.hs => ASTSpec.hs} | 9 +++--- tests/{EndToEndTests.hs => EndToEndSpec.hs} | 9 +++--- .../{OrderedMapTests.hs => OrderedMapSpec.hs} | 9 +++--- tests/{ResolverTests.hs => ResolverSpec.hs} | 9 +++--- tests/{SchemaTests.hs => SchemaSpec.hs} | 11 +++---- tests/Spec.hs | 32 +------------------ .../{ValidationTests.hs => ValidationSpec.hs} | 9 +++--- tests/{ValueTests.hs => ValueSpec.hs} | 9 +++--- 10 files changed, 38 insertions(+), 79 deletions(-) rename tests/{ASTTests.hs => ASTSpec.hs} (98%) rename tests/{EndToEndTests.hs => EndToEndSpec.hs} (98%) rename tests/{OrderedMapTests.hs => OrderedMapSpec.hs} (90%) rename tests/{ResolverTests.hs => ResolverSpec.hs} (94%) rename tests/{SchemaTests.hs => SchemaSpec.hs} (96%) rename tests/{ValidationTests.hs => ValidationSpec.hs} (98%) rename tests/{ValueTests.hs => ValueSpec.hs} (95%) diff --git a/graphql-api.cabal b/graphql-api.cabal index 5450b8b..c2e9c22 100644 --- a/graphql-api.cabal +++ b/graphql-api.cabal @@ -2,7 +2,7 @@ -- -- see: https://github.com/sol/hpack -- --- hash: 6db006b020fe198ac64b8a50f8335017251389b7c34dfc553675e38eb001a428 +-- hash: 6192b08a549b4ef2c1e68125b1ed4a870690aa6e26e4276c70bcee2f12b74f13 name: graphql-api version: 0.3.0 @@ -142,19 +142,17 @@ test-suite graphql-api-tests , hspec , protolude >=0.2.1 , raw-strings-qq - , tasty - , tasty-hspec , transformers other-modules: - ASTTests - EndToEndTests + ASTSpec + EndToEndSpec EnumTests ExampleSchema - OrderedMapTests - ResolverTests - SchemaTests - ValidationTests - ValueTests + OrderedMapSpec + ResolverSpec + SchemaSpec + ValidationSpec + ValueSpec Paths_graphql_api default-language: Haskell2010 diff --git a/package.yaml b/package.yaml index 1a922e9..c92031b 100644 --- a/package.yaml +++ b/package.yaml @@ -71,8 +71,6 @@ tests: - hspec - QuickCheck - raw-strings-qq - - tasty - - tasty-hspec - directory graphql-api-doctests: diff --git a/tests/ASTTests.hs b/tests/ASTSpec.hs similarity index 98% rename from tests/ASTTests.hs rename to tests/ASTSpec.hs index 1f39818..50d0376 100644 --- a/tests/ASTTests.hs +++ b/tests/ASTSpec.hs @@ -1,7 +1,7 @@ {-# LANGUAGE QuasiQuotes #-} -- | Tests for AST, including parser and encoder. -module ASTTests (tests) where +module ASTSpec (spec) where import Protolude @@ -9,8 +9,7 @@ import Data.Attoparsec.Text (parseOnly) import Text.RawString.QQ (r) import Test.Hspec.QuickCheck (prop) import Test.QuickCheck (arbitrary, forAll, resize) -import Test.Tasty (TestTree) -import Test.Tasty.Hspec (testSpec, describe, it, shouldBe) +import Test.Hspec import GraphQL.Value (String(..)) import GraphQL.Internal.Name (Name) @@ -27,8 +26,8 @@ dog = "dog" someName :: Name someName = "name" -tests :: IO TestTree -tests = testSpec "AST" $ do +spec :: Spec +spec = describe "AST" $ do describe "Parser and encoder" $ do it "roundtrips on minified documents" $ do let actual = Encoder.queryDocument <$> parseOnly Parser.queryDocument kitchenSink diff --git a/tests/EndToEndTests.hs b/tests/EndToEndSpec.hs similarity index 98% rename from tests/EndToEndTests.hs rename to tests/EndToEndSpec.hs index 872c6fa..afd3b6f 100644 --- a/tests/EndToEndTests.hs +++ b/tests/EndToEndSpec.hs @@ -6,7 +6,7 @@ -- -- These tests function both as examples of how to use the API, as well as -- sanity checks on our reasoning. -module EndToEndTests (tests) where +module EndToEndSpec (spec) where import Protolude @@ -17,8 +17,7 @@ import GraphQL.API (Object, Field, List, Argument, (:>), Defaultable(..), HasAnn import GraphQL.Internal.Syntax.AST (Variable(..)) import GraphQL.Resolver ((:<>)(..), Handler, unionValue) import GraphQL.Value (ToValue(..), FromValue(..), makeName) -import Test.Tasty (TestTree) -import Test.Tasty.Hspec (testSpec, describe, it, shouldBe) +import Test.Hspec import Text.RawString.QQ (r) import ExampleSchema @@ -135,8 +134,8 @@ jml :: ServerHuman jml = ServerHuman "jml" -tests :: IO TestTree -tests = testSpec "End-to-end tests" $ do +spec :: Spec +spec = describe "End-to-end tests" $ do describe "interpretAnonymousQuery" $ do it "Handles the simplest possible valid query" $ do let query = [r|{ diff --git a/tests/OrderedMapTests.hs b/tests/OrderedMapSpec.hs similarity index 90% rename from tests/OrderedMapTests.hs rename to tests/OrderedMapSpec.hs index 4db6f34..233febe 100644 --- a/tests/OrderedMapTests.hs +++ b/tests/OrderedMapSpec.hs @@ -1,11 +1,10 @@ -module OrderedMapTests (tests) where +module OrderedMapSpec (spec) where import Protolude import Test.Hspec.QuickCheck (prop) import Test.QuickCheck (Gen, arbitrary, forAll) -import Test.Tasty (TestTree) -import Test.Tasty.Hspec (testSpec, describe, it, shouldBe) +import Test.Hspec import qualified Data.Map as Map import GraphQL.Internal.OrderedMap (OrderedMap) @@ -15,8 +14,8 @@ import qualified GraphQL.Internal.OrderedMap as OrderedMap orderedMaps :: Gen (OrderedMap Int Int) orderedMaps = arbitrary -tests :: IO TestTree -tests = testSpec "OrderedMap" $ do +spec :: Spec +spec = describe "OrderedMap" $ do describe "Integrity" $ do prop "fromList . toList == id" $ do forAll orderedMaps (\x -> OrderedMap.orderedMap (OrderedMap.toList x) == Just x) diff --git a/tests/ResolverTests.hs b/tests/ResolverSpec.hs similarity index 94% rename from tests/ResolverTests.hs rename to tests/ResolverSpec.hs index 3ffdc7d..d3bae1d 100644 --- a/tests/ResolverTests.hs +++ b/tests/ResolverSpec.hs @@ -1,12 +1,11 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} -module ResolverTests (tests) where +module ResolverSpec (spec) where import Protolude hiding (Enum) -import Test.Tasty (TestTree) -import Test.Tasty.Hspec (testSpec, describe, it, shouldBe) +import Test.Hspec import Data.Aeson (encode) import GraphQL @@ -74,8 +73,8 @@ enumHandler :: Handler IO EnumQuery enumHandler = pure $ pure NormalFile -- /Enum test -tests :: IO TestTree -tests = testSpec "TypeAPI" $ do +spec :: Spec +spec = describe "TypeAPI" $ do describe "tTest" $ do it "works in a simple case" $ do Right (Success object) <- runExceptT (interpretAnonymousQuery @T tHandler "{ t(x: 12) }") diff --git a/tests/SchemaTests.hs b/tests/SchemaSpec.hs similarity index 96% rename from tests/SchemaTests.hs rename to tests/SchemaSpec.hs index f12de4f..0ecc1dd 100644 --- a/tests/SchemaTests.hs +++ b/tests/SchemaSpec.hs @@ -1,11 +1,10 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeOperators #-} -module SchemaTests (tests) where +module SchemaSpec (spec) where import Protolude hiding (Down, Enum) -import Test.Tasty (TestTree) -import Test.Tasty.Hspec (testSpec, describe, it, shouldBe) +import Test.Hspec import GraphQL.API ( Field @@ -45,8 +44,8 @@ import GraphQL.Internal.Schema ) import ExampleSchema -tests :: IO TestTree -tests = testSpec "Type" $ do +spec :: Spec +spec = describe "Type" $ do describe "Field" $ it "encodes correctly" $ do getFieldDefinition @(Field "hello" Int) `shouldBe` Right (FieldDefinition "hello" [] (TypeNonNull (NonNullTypeNamed (BuiltinType GInt)))) @@ -130,4 +129,4 @@ tests = testSpec "Type" $ do ListType ( TypeNonNull ( NonNullTypeNamed typeDefinitionScalar - ))))))) \ No newline at end of file + ))))))) diff --git a/tests/Spec.hs b/tests/Spec.hs index d06857e..5416ef6 100644 --- a/tests/Spec.hs +++ b/tests/Spec.hs @@ -1,31 +1 @@ -module Main - ( main - ) where - -import Protolude - -import Test.Tasty (defaultMain, testGroup) - -import qualified ASTTests -import qualified EndToEndTests -import qualified OrderedMapTests -import qualified ResolverTests -import qualified SchemaTests -import qualified ValidationTests -import qualified ValueTests -import qualified EnumTests () - -main :: IO () -main = do - t <- sequence tests - defaultMain . testGroup "GraphQL API" $ t - where - tests = - [ ASTTests.tests - , EndToEndTests.tests - , OrderedMapTests.tests - , ResolverTests.tests - , SchemaTests.tests - , ValidationTests.tests - , ValueTests.tests - ] +{-# OPTIONS_GHC -F -pgmF hspec-discover -optF --module-name=Spec #-} diff --git a/tests/ValidationTests.hs b/tests/ValidationSpec.hs similarity index 98% rename from tests/ValidationTests.hs rename to tests/ValidationSpec.hs index ef76764..41935f8 100644 --- a/tests/ValidationTests.hs +++ b/tests/ValidationSpec.hs @@ -2,14 +2,13 @@ {-# LANGUAGE DataKinds #-} -- | Tests for query validation. -module ValidationTests (tests) where +module ValidationSpec (spec) where import Protolude import Test.Hspec.QuickCheck (prop) import Test.QuickCheck ((===)) -import Test.Tasty (TestTree) -import Test.Tasty.Hspec (testSpec, describe, it, shouldBe) +import Test.Hspec import qualified Data.Set as Set import GraphQL.Internal.Name (Name) @@ -36,8 +35,8 @@ dog = "dog" schema :: Schema schema = emptySchema -tests :: IO TestTree -tests = testSpec "Validation" $ do +spec :: Spec +spec = describe "Validation" $ do describe "getErrors" $ do it "Treats simple queries as valid" $ do let doc = AST.QueryDocument diff --git a/tests/ValueTests.hs b/tests/ValueSpec.hs similarity index 95% rename from tests/ValueTests.hs rename to tests/ValueSpec.hs index d873d20..4b09e08 100644 --- a/tests/ValueTests.hs +++ b/tests/ValueSpec.hs @@ -1,12 +1,11 @@ {-# LANGUAGE DeriveGeneric #-} -module ValueTests (tests) where +module ValueSpec (spec) where import Protolude import Test.Hspec.QuickCheck (prop) import Test.QuickCheck (forAll) -import Test.Tasty (TestTree) -import Test.Tasty.Hspec (testSpec, describe, it, shouldBe, shouldSatisfy) +import Test.Hspec import qualified GraphQL.Internal.Syntax.AST as AST import GraphQL.Internal.Arbitrary (arbitraryText, arbitraryNonEmpty) @@ -31,8 +30,8 @@ data Resource = Resource instance FromValue Resource -tests :: IO TestTree -tests = testSpec "Value" $ do +spec :: Spec +spec = describe "Value" $ do describe "unionObject" $ do it "returns empty on empty list" $ do unionObjects [] `shouldBe` (objectFromList [] :: Maybe Object) From fe2bf1b28bc4387ff68dabebc86cdb3840f7a792 Mon Sep 17 00:00:00 2001 From: Thiago Rodrigues de Paula Date: Fri, 11 Jan 2019 13:09:41 +0100 Subject: [PATCH 2/2] Create the Main module for tests --- graphql-api.cabal | 5 +++-- package.yaml | 2 +- tests/Main.hs | 10 ++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 tests/Main.hs diff --git a/graphql-api.cabal b/graphql-api.cabal index c2e9c22..ba1e8c3 100644 --- a/graphql-api.cabal +++ b/graphql-api.cabal @@ -2,7 +2,7 @@ -- -- see: https://github.com/sol/hpack -- --- hash: 6192b08a549b4ef2c1e68125b1ed4a870690aa6e26e4276c70bcee2f12b74f13 +-- hash: e921bbdc9931b5b0b16603d36a3252522602c736862259ef71abdecf046541e2 name: graphql-api version: 0.3.0 @@ -125,7 +125,7 @@ test-suite graphql-api-doctests test-suite graphql-api-tests type: exitcode-stdio-1.0 - main-is: Spec.hs + main-is: Main.hs hs-source-dirs: tests default-extensions: NoImplicitPrelude OverloadedStrings RecordWildCards TypeApplications @@ -151,6 +151,7 @@ test-suite graphql-api-tests OrderedMapSpec ResolverSpec SchemaSpec + Spec ValidationSpec ValueSpec Paths_graphql_api diff --git a/package.yaml b/package.yaml index c92031b..8653d3e 100644 --- a/package.yaml +++ b/package.yaml @@ -62,7 +62,7 @@ executables: tests: graphql-api-tests: - main: Spec.hs + main: Main.hs source-dirs: tests dependencies: - aeson diff --git a/tests/Main.hs b/tests/Main.hs new file mode 100644 index 0000000..fe76062 --- /dev/null +++ b/tests/Main.hs @@ -0,0 +1,10 @@ +module Main where + +import Protolude + +import Test.Hspec +import qualified Spec (spec) + +main :: IO () +main = do + hspec Spec.spec