diff --git a/graphql-api.cabal b/graphql-api.cabal index 5450b8b..ba1e8c3 100644 --- a/graphql-api.cabal +++ b/graphql-api.cabal @@ -2,7 +2,7 @@ -- -- see: https://github.com/sol/hpack -- --- hash: 6db006b020fe198ac64b8a50f8335017251389b7c34dfc553675e38eb001a428 +-- 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 @@ -142,19 +142,18 @@ 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 + Spec + ValidationSpec + ValueSpec Paths_graphql_api default-language: Haskell2010 diff --git a/package.yaml b/package.yaml index 1a922e9..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 @@ -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/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 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)