graphql-engine/server/lib/api-tests/test/SpecHook.hs
2022-11-01 21:05:00 +00:00

55 lines
1.6 KiB
Haskell

module SpecHook
( hook,
setupTestEnvironment,
teardownTestEnvironment,
)
where
import Control.Exception.Safe (bracket)
import Data.UUID.V4 (nextRandom)
import Harness.GraphqlEngine (startServerThread)
import Harness.TestEnvironment (BackendSettings (..), TestEnvironment (..), stopServer)
import Hasura.Prelude
import System.Environment (lookupEnv)
import System.Log.FastLogger qualified as FL
import Test.Hspec (Spec, SpecWith, aroundAllWith)
setupBackendSettings :: IO BackendSettings
setupBackendSettings = do
postgresPort <-
fmap
(>>= readMaybe)
(lookupEnv "HASURA_TEST_POSTGRES_PORT")
pure
( BackendSettings
{ postgresSourcePort = postgresPort
}
)
setupTestEnvironment :: IO TestEnvironment
setupTestEnvironment = do
murlPrefix <- lookupEnv "HASURA_TEST_URLPREFIX"
mport <- fmap (>>= readMaybe) (lookupEnv "HASURA_TEST_PORT")
backendSettings <- setupBackendSettings
server <- startServerThread backendSettings ((,) <$> murlPrefix <*> mport)
let logType = FL.LogFileNoRotate "tests-hspec.log" 1024
(logger, loggerCleanup) <- FL.newFastLogger logType
uniqueTestId <- nextRandom
pure
TestEnvironment
{ server = server,
uniqueTestId = uniqueTestId,
backendType = Nothing,
logger = logger,
loggerCleanup = loggerCleanup,
backendSettings = backendSettings
}
teardownTestEnvironment :: TestEnvironment -> IO ()
teardownTestEnvironment TestEnvironment {..} = do
stopServer server
loggerCleanup
hook :: SpecWith TestEnvironment -> Spec
hook = aroundAllWith (const . bracket setupTestEnvironment teardownTestEnvironment)