mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 17:31:56 +03:00
926da74819
Dupe of https://github.com/hasura/graphql-engine-mono/pull/2853 with branch renamed so it doesn't break a tool. prev pr: https://github.com/hasura/graphql-engine-mono/pull/2911 next pr: https://github.com/hasura/graphql-engine-mono/pull/2922 This implements https://github.com/hasura/graphql-engine/issues/7801 Some points to keep in mind for review: * How state is passed to the tests. Do we like how this works? * I quite like it, with the opaque type [`State`](68f33051ca/server/tests-hspec/Harness/State.hs (L17)
), we can avoid churn when adding things. * The [setup/teardown](68f33051ca/server/tests-hspec/Spec.hs (L19-L31)
) seems clean. * By using hspec's own means to pass and denote context, we avoid "getting new ideas" for how to structure the tests -- we use a standard. Hopefully, that means the tests' structure rarely change. * The various flags passed in the [ServeOptions](68f33051ca/server/tests-hspec/Harness/Constants.hs (L123)
) - if there are any causes for concern, raise them here. My thinking is that, there are lots. I've picked some "sane" defaults (mostly empty). The tests pass. I think as we add more complex tests, these flags will be scrutinised and updated as needed. I think it's valuable that all flags are explicitly listed here, though. PR-URL: https://github.com/hasura/graphql-engine-mono/pull/2921 GitOrigin-RevId: 2c2e70bf784ef571a48509a7e5006fd0f48773b5
44 lines
1.4 KiB
Haskell
44 lines
1.4 KiB
Haskell
module Main (main) where
|
|
|
|
import ArrayRelationshipsSpec qualified
|
|
import BasicFieldsSpec qualified
|
|
import Control.Exception
|
|
import DirectivesSpec qualified
|
|
import Harness.GraphqlEngine (startServerThread, stopServer)
|
|
import Harness.State (State (..))
|
|
import LimitOffsetSpec qualified
|
|
import ObjectRelationshipsSpec qualified
|
|
import OrderingSpec qualified
|
|
import ServiceLivenessSpec qualified
|
|
import System.Environment
|
|
import Test.Hspec
|
|
import Text.Read
|
|
import ViewsSpec qualified
|
|
import WhereSpec qualified
|
|
import Prelude
|
|
|
|
setupState :: IO State
|
|
setupState = do
|
|
murlPrefix <- lookupEnv "HASURA_TEST_URLPREFIX"
|
|
mport <- fmap (>>= readMaybe) (lookupEnv "HASURA_TEST_PORT")
|
|
server <- startServerThread ((,) <$> murlPrefix <*> mport)
|
|
pure State {server}
|
|
|
|
teardownState :: State -> IO ()
|
|
teardownState State {server} =
|
|
stopServer server
|
|
|
|
main :: IO ()
|
|
main =
|
|
hspec $
|
|
aroundAllWith (const . bracket setupState teardownState) $ do
|
|
describe "ServiceLiveness" ServiceLivenessSpec.spec
|
|
describe "BasicFields" BasicFieldsSpec.spec
|
|
describe "Ordering" OrderingSpec.spec
|
|
describe "Where" WhereSpec.spec
|
|
describe "LimitOffset" LimitOffsetSpec.spec
|
|
describe "ObjectRelationships" ObjectRelationshipsSpec.spec
|
|
describe "ArrayRelationships" ArrayRelationshipsSpec.spec
|
|
describe "Directives" DirectivesSpec.spec
|
|
describe "Views" ViewsSpec.spec
|