graphql-engine/server/tests-hspec/Spec.hs
Chris Done 926da74819 Auto-launch graphql-engine (close hasura/graphql-engine#7801, hasura/graphql-engine#7827 )
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
2021-11-23 18:16:15 +00:00

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