module Hasura.Server.InitSpec ( spec, ) where -------------------------------------------------------------------------------- import Data.HashSet qualified as Set import Data.Monoid (All (..)) import Database.PG.Query qualified as Q import Hasura.GraphQL.Execute.Subscription.Options (SubscriptionsOptions (_lqoBatchSize)) import Hasura.GraphQL.Execute.Subscription.Options qualified as ESO import Hasura.GraphQL.Execute.Subscription.Options qualified as ESP import Hasura.GraphQL.Schema.NamingCase qualified as NC import Hasura.GraphQL.Schema.Options qualified as Options import Hasura.Logging qualified as Logging import Hasura.Prelude import Hasura.Server.Auth qualified as Auth import Hasura.Server.Cors qualified as Cors import Hasura.Server.Init qualified as UUT import Hasura.Server.Logging qualified as Logging import Hasura.Server.Types qualified as Types import Hasura.Session qualified as UUT import Network.WebSockets qualified as WS import Test.Hspec qualified as Hspec {-# ANN module ("HLint: ignore Redundant ==" :: String) #-} -------------------------------------------------------------------------------- spec :: Hspec.Spec spec = Hspec.describe "Init Tests" $ do mkServeOptionsSpec -------------------------------------------------------------------------------- emptyServeOptionsRaw :: UUT.ServeOptionsRaw Logging.Hasura emptyServeOptionsRaw = UUT.ServeOptionsRaw { rsoPort = Nothing, rsoHost = Nothing, rsoConnParams = UUT.ConnParamsRaw { rcpStripes = Nothing, rcpConns = Nothing, rcpIdleTime = Nothing, rcpConnLifetime = Nothing, rcpAllowPrepare = Nothing, rcpPoolTimeout = Nothing }, rsoTxIso = Nothing, rsoAdminSecret = Nothing, rsoAuthHook = UUT.AuthHookRaw Nothing Nothing, rsoJwtSecret = Nothing, rsoUnAuthRole = Nothing, rsoCorsConfig = Nothing, rsoEnableConsole = False, rsoConsoleAssetsDir = Nothing, rsoEnableTelemetry = Nothing, rsoWsReadCookie = False, rsoStringifyNum = Options.Don'tStringifyNumbers, rsoDangerousBooleanCollapse = Nothing, rsoEnabledAPIs = Nothing, rsoMxRefetchInt = Nothing, rsoMxBatchSize = Nothing, rsoStreamingMxRefetchInt = Nothing, rsoStreamingMxBatchSize = Nothing, rsoEnableAllowlist = False, rsoEnabledLogTypes = Nothing, rsoLogLevel = Nothing, rsoDevMode = False, rsoAdminInternalErrors = Nothing, rsoEventsHttpPoolSize = Nothing, rsoEventsFetchInterval = Nothing, rsoAsyncActionsFetchInterval = Nothing, rsoEnableRemoteSchemaPermissions = Options.DisableRemoteSchemaPermissions, rsoWebSocketCompression = False, rsoWebSocketKeepAlive = Nothing, rsoInferFunctionPermissions = Nothing, rsoEnableMaintenanceMode = Types.MaintenanceModeDisabled, rsoSchemaPollInterval = Nothing, rsoExperimentalFeatures = Nothing, rsoEventsFetchBatchSize = Nothing, rsoGracefulShutdownTimeout = Nothing, rsoWebSocketConnectionInitTimeout = Nothing, rsoEnableMetadataQueryLoggingEnv = Logging.MetadataQueryLoggingDisabled, rsoDefaultNamingConvention = Nothing } mkServeOptionsSpec :: Hspec.Spec mkServeOptionsSpec = Hspec.describe "mkServeOptions" $ do Hspec.describe "soPort" $ do Hspec.it "Default == 8080" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soPort result `Hspec.shouldBe` Right 8080 Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_SERVER_PORT", "420")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soPort result `Hspec.shouldBe` Right 420 Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoPort = Just 11} -- When env = [("HASURA_GRAPHQL_SERVER_PORT", "420")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soPort result `Hspec.shouldBe` Right 11 Hspec.describe "soHost" $ do Hspec.it "Default = '*'" $ do -- Given let rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soHost result `Hspec.shouldBe` Right "*" Hspec.it "Env > Nothing" $ do -- Given let rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_SERVER_HOST", "127.0.0.1")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soHost result `Hspec.shouldBe` Right "127.0.0.1" Hspec.it "Arg > Env" $ do -- Given let rawServeOptions = emptyServeOptionsRaw {UUT.rsoHost = Just "*4"} -- When env = [("HASURA_GRAPHQL_SERVER_HOST", "127.0.0.1")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soHost result `Hspec.shouldBe` Right "*4" Hspec.describe "soConnParams" $ do Hspec.it "Default == 1, 50, 180, 600" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soConnParams result `Hspec.shouldBe` Right ( Q.ConnParams { Q.cpStripes = 1, Q.cpConns = 50, Q.cpIdleTime = 180, Q.cpAllowPrepare = True, Q.cpMbLifetime = Just 600, Q.cpTimeout = Nothing, Q.cpCancel = True } ) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [ ("HASURA_GRAPHQL_PG_STRIPES", "42"), ("HASURA_GRAPHQL_PG_CONNECTIONS", "43"), ("HASURA_GRAPHQL_PG_TIMEOUT", "44"), ("HASURA_GRAPHQL_PG_CONN_LIFETIME", "45"), ("HASURA_GRAPHQL_USE_PREPARED_STATEMENTS", "false"), ("HASURA_GRAPHQL_PG_POOL_TIMEOUT", "46") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soConnParams result `Hspec.shouldBe` Right ( Q.ConnParams { Q.cpStripes = 42, Q.cpConns = 43, Q.cpIdleTime = 44, Q.cpAllowPrepare = False, Q.cpMbLifetime = Just 45, Q.cpTimeout = Just 46, Q.cpCancel = True } ) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw { UUT.rsoConnParams = UUT.ConnParamsRaw { rcpStripes = Just 2, rcpConns = Just 3, rcpIdleTime = Just 4, rcpConnLifetime = Just 5, rcpAllowPrepare = Just True, rcpPoolTimeout = Just 6 } } -- When env = [ ("HASURA_GRAPHQL_PG_STRIPES", "42"), ("HASURA_GRAPHQL_PG_CONNECTIONS", "43"), ("HASURA_GRAPHQL_PG_TIMEOUT", "44"), ("HASURA_GRAPHQL_PG_CONN_LIFETIME", "45"), ("HASURA_GRAPHQL_USE_PREPARED_STATEMENTS", "false"), ("HASURA_GRAPHQL_PG_POOL_TIMEOUT", "46") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soConnParams result `Hspec.shouldBe` Right ( Q.ConnParams { cpStripes = 2, cpConns = 3, cpIdleTime = 4, cpAllowPrepare = True, cpMbLifetime = Just 5, cpTimeout = Just 6, cpCancel = True } ) Hspec.describe "soTxIso" $ do Hspec.it "Default == ReadCommitted" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soTxIso result `Hspec.shouldBe` Right Q.ReadCommitted Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_TX_ISOLATION", "repeatable-read")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soTxIso result `Hspec.shouldBe` Right Q.RepeatableRead Hspec.it "Arg > Env" $ do -- Given let rawServeOptions = emptyServeOptionsRaw {UUT.rsoTxIso = Just Q.Serializable} -- When env = [("HASURA_GRAPHQL_TX_ISOLATION", "repeatable-read")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soTxIso result `Hspec.shouldBe` Right Q.Serializable Hspec.describe "soAdminSecret" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ADMIN_SECRET", "A monad is a monoid in the category of endofunctors")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAdminSecret result `Hspec.shouldBe` Right (Set.singleton (Auth.hashAdminSecret "A monad is a monoid in the category of endofunctors")) Hspec.it "Arg > Env" $ do -- Given let rawServeOptions = emptyServeOptionsRaw {UUT.rsoAdminSecret = Just (Auth.hashAdminSecret "Whats the big deal")} -- When env = [("HASURA_GRAPHQL_ADMIN_SECRET", "A monad is a monoid in the category of endofunctors")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAdminSecret result `Hspec.shouldBe` Right (Set.singleton (Auth.hashAdminSecret "Whats the big deal")) Hspec.describe "soAuthHook" $ do Hspec.it "Default Hook Mode == GET" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_AUTH_HOOK", "http://auth.hook.com")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAuthHook result `Hspec.shouldBe` Right (Just (Auth.AuthHook "http://auth.hook.com" Auth.AHTGet)) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [ ("HASURA_GRAPHQL_AUTH_HOOK", "http://auth.hook.com"), ("HASURA_GRAPHQL_AUTH_HOOK_MODE", "POST") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAuthHook result `Hspec.shouldBe` Right (Just (Auth.AuthHook "http://auth.hook.com" Auth.AHTPost)) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoAuthHook = UUT.AuthHookRaw (Just "http://auth.hook.com") (Just Auth.AHTGet)} -- When env = [ ("HASURA_GRAPHQL_AUTH_HOOK", "http://auth.hook.net"), ("HASURA_GRAPHQL_AUTH_HOOK_MODE", "POST") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAuthHook result `Hspec.shouldBe` Right (Just (Auth.AuthHook "http://auth.hook.com" Auth.AHTGet)) Hspec.describe "soJwtSecret" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [ ( "HASURA_GRAPHQL_JWT_SECRET", "{\"type\": \"HS256\", \"key\": \"11111111111111111111111111111111\", \"claims_namespace\": \"\"}" ) ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soJwtSecret result `Hspec.shouldBe` UUT.fromEnv "[{\"type\": \"HS256\", \"key\": \"11111111111111111111111111111111\", \"claims_namespace\": \"\"}]" Hspec.it "Arg > Env" $ do let -- Given jwtConfig = eitherToMaybe $ UUT.fromEnv @Auth.JWTConfig "{\"type\": \"HS256\", \"key\": \"22222222222222222222222222222222\", \"claims_namespace\": \"\"}" rawServeOptions = emptyServeOptionsRaw {UUT.rsoJwtSecret = jwtConfig} -- When env = [ ( "HASURA_GRAPHQL_JWT_SECRET", "{\"type\": \"HS256\", \"key\": \"11111111111111111111111111111111\", \"claims_namespace\": \"\"}" ) ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soJwtSecret result `Hspec.shouldBe` Right (onNothing jwtConfig []) Hspec.describe "soUnAuthRole" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_UNAUTHORIZED_ROLE", "guest")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soUnAuthRole result `Hspec.shouldBe` Right (UUT.mkRoleName "guest") Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoUnAuthRole = UUT.mkRoleName "visitor"} -- When env = [("HASURA_GRAPHQL_UNAUTHORIZED_ROLE", "guest")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soUnAuthRole result `Hspec.shouldBe` Right (UUT.mkRoleName "visitor") Hspec.describe "soCorsConfig" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_CORS_DOMAIN", "http://domain1:23, http://domain2:34")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soCorsConfig result `Hspec.shouldBe` Cors.readCorsDomains "http://domain1:23, http://domain2:34" Hspec.it "Default CorsConfig == CCAllowAll" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soCorsConfig result `Hspec.shouldBe` Right Cors.CCAllowAll Hspec.it "Env 'HASURA_GRAPHQL_DISABLE_CORS=false' superseded by 'HASURA_GRAPHQL_CORS_DOMAIN'" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_CORS_DOMAIN", "http://domain1:23, http://domain2:34"), ("HASURA_GRAPHQL_DISABLE_CORS", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soCorsConfig result `Hspec.shouldBe` Cors.readCorsDomains "http://domain1:23, http://domain2:34" Hspec.it "Env 'HASURA_GRAPHQL_DISABLE_CORS=true' enables use of cookie value" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_WS_READ_COOKIE", "true"), ("HASURA_GRAPHQL_DISABLE_CORS", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soCorsConfig result `Hspec.shouldBe` Right (Cors.CCDisabled True) Hspec.it "Env 'HASURA_GRAPHQL_DISABLE_CORS=true' supersedes 'HASURA_GRAPHQL_CORS_DOMAIN'" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_CORS_DOMAIN", "http://domain1:23, http://domain2:34"), ("HASURA_GRAPHQL_DISABLE_CORS", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soCorsConfig result `Hspec.shouldBe` Right (Cors.CCDisabled False) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoCorsConfig = eitherToMaybe (Cors.readCorsDomains "http://domain1:23, http://domain2:34")} -- When env = [("HASURA_GRAPHQL_CORS_DOMAIN", "http://domain3:23, http://domain4:34")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soCorsConfig result `Hspec.shouldBe` Cors.readCorsDomains "http://domain1:23, http://domain2:34" Hspec.describe "soEnableConsole" $ do Hspec.it "Default == False" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableConsole result `Hspec.shouldBe` Right False -- NOTE: This is a little confusing. We are first simulating -- not providing the '--enable-console' flag with the env var set to 'true'. -- Next we simulate providing the '--enable-console' flag and -- the env var to ensure the flag supersedes the env var. Hspec.it "Env > No Switch" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ENABLE_CONSOLE", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableConsole result `Hspec.shouldBe` Right True Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnableConsole = True} -- When env = [("HASURA_GRAPHQL_ENABLE_CONSOLE", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableConsole result `Hspec.shouldBe` Right True Hspec.describe "soConsoleAssetsDir" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_CONSOLE_ASSETS_DIR", "/assets")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soConsoleAssetsDir result `Hspec.shouldBe` Right (Just "/assets") Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoConsoleAssetsDir = Just "/data"} -- When env = [("HASURA_GRAPHQL_CONSOLE_ASSETS_DIR", "/assets")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soConsoleAssetsDir result `Hspec.shouldBe` Right (Just "/data") Hspec.describe "soEnableTelemetry" $ do Hspec.it "Default == True" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableTelemetry result `Hspec.shouldBe` Right True Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ENABLE_TELEMETRY", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableTelemetry result `Hspec.shouldBe` Right False Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnableTelemetry = Just False} -- When env = [("HASURA_GRAPHQL_ENABLE_TELEMETRY", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableTelemetry result `Hspec.shouldBe` Right False Hspec.describe "soStringifyNum" $ do Hspec.it "Default == LeaveNumbersAlone" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soStringifyNum result `Hspec.shouldBe` Right Options.Don'tStringifyNumbers Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_STRINGIFY_NUMERIC_TYPES", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soStringifyNum result `Hspec.shouldBe` Right Options.StringifyNumbers Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoStringifyNum = Options.StringifyNumbers} -- When env = [("HASURA_GRAPHQL_STRINGIFY_NUMERIC_TYPES", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soStringifyNum result `Hspec.shouldBe` Right Options.StringifyNumbers Hspec.describe "soDangerousBooleanCollapse" $ do Hspec.it "Default == False" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soDangerousBooleanCollapse result `Hspec.shouldBe` Right False Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_V1_BOOLEAN_NULL_COLLAPSE", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soDangerousBooleanCollapse result `Hspec.shouldBe` Right True Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoDangerousBooleanCollapse = Just False} -- When env = [("HASURA_GRAPHQL_V1_BOOLEAN_NULL_COLLAPSE", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soDangerousBooleanCollapse result `Hspec.shouldBe` Right False Hspec.describe "soEnabledAPIs" $ do Hspec.it "Default == metadata,graphql,pgdump,config" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnabledAPIs result `Hspec.shouldBe` Right (Set.fromList [UUT.METADATA, UUT.GRAPHQL, UUT.PGDUMP, UUT.CONFIG]) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ENABLED_APIS", "metadata,graphql")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnabledAPIs result `Hspec.shouldBe` Right (Set.fromList [UUT.METADATA, UUT.GRAPHQL]) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnabledAPIs = Just $ Set.fromList [UUT.CONFIG]} -- When env = [("HASURA_GRAPHQL_ENABLED_APIS", "metadata,graphql")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnabledAPIs result `Hspec.shouldBe` Right (Set.fromList [UUT.CONFIG]) Hspec.describe "soLiveQueryOpts" $ do Hspec.it "Default == 1000, 100" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soLiveQueryOpts result `Hspec.shouldBe` Right ( ESO.SubscriptionsOptions { _lqoRefetchInterval = ESO.RefetchInterval 1, _lqoBatchSize = ESO.BatchSize 100 } ) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [ ("HASURA_GRAPHQL_LIVE_QUERIES_MULTIPLEXED_REFETCH_INTERVAL", "2000"), ("HASURA_GRAPHQL_LIVE_QUERIES_MULTIPLEXED_BATCH_SIZE", "200") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soLiveQueryOpts result `Hspec.shouldBe` Right ( ESO.SubscriptionsOptions { _lqoRefetchInterval = ESO.RefetchInterval 2, _lqoBatchSize = ESO.BatchSize 200 } ) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw { UUT.rsoMxRefetchInt = ESO.mkRefetchInterval 3, UUT.rsoMxBatchSize = ESP.mkBatchSize 300 } -- When env = [ ("HASURA_GRAPHQL_LIVE_QUERIES_MULTIPLEXED_REFETCH_INTERVAL", "2000"), ("HASURA_GRAPHQL_LIVE_QUERIES_MULTIPLEXED_BATCH_SIZE", "200") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soLiveQueryOpts result `Hspec.shouldBe` Right ( ESO.SubscriptionsOptions { _lqoRefetchInterval = ESO.RefetchInterval 3, _lqoBatchSize = ESO.BatchSize 300 } ) Hspec.describe "soStreamingQueryOpts" $ do Hspec.it "Default == 1000, 100" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soStreamingQueryOpts result `Hspec.shouldBe` Right ( ESO.SubscriptionsOptions { _lqoRefetchInterval = ESO.RefetchInterval 1, _lqoBatchSize = ESO.BatchSize 100 } ) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [ ("HASURA_GRAPHQL_STREAMING_QUERIES_MULTIPLEXED_REFETCH_INTERVAL", "2000"), ("HASURA_GRAPHQL_STREAMING_QUERIES_MULTIPLEXED_BATCH_SIZE", "200") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soStreamingQueryOpts result `Hspec.shouldBe` Right ( ESO.SubscriptionsOptions { _lqoRefetchInterval = ESO.RefetchInterval 2, _lqoBatchSize = ESO.BatchSize 200 } ) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw { UUT.rsoStreamingMxRefetchInt = ESO.mkRefetchInterval 3, UUT.rsoStreamingMxBatchSize = ESO.mkBatchSize 300 } -- When env = [ ("HASURA_GRAPHQL_STREAMING_QUERIES_MULTIPLEXED_REFETCH_INTERVAL", "2000"), ("HASURA_GRAPHQL_STREAMING_QUERIES_MULTIPLEXED_BATCH_SIZE", "200") ] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soStreamingQueryOpts result `Hspec.shouldBe` Right ( ESO.SubscriptionsOptions { _lqoRefetchInterval = ESO.RefetchInterval 3, _lqoBatchSize = ESO.BatchSize 300 } ) Hspec.describe "soEnableAllowlist" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ENABLE_ALLOWLIST", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableAllowlist result `Hspec.shouldBe` Right True Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnableAllowlist = True} -- When env = [("HASURA_GRAPHQL_ENABLE_ALLOWLIST", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableAllowlist result `Hspec.shouldBe` Right True Hspec.describe "soEnabledLogTypes" $ do Hspec.it "Default == Startup, HttpLog, WebhookLog, WebsocketLog" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnabledLogTypes result `Hspec.shouldBe` Right (Set.fromList [Logging.ELTStartup, Logging.ELTHttpLog, Logging.ELTWebhookLog, Logging.ELTWebsocketLog]) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ENABLED_LOG_TYPES", "http-log")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnabledLogTypes result `Hspec.shouldBe` Right (Set.fromList [Logging.ELTHttpLog]) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnabledLogTypes = Just (Set.fromList [Logging.ELTActionHandler])} -- When env = [("HASURA_GRAPHQL_ENABLED_LOG_TYPES", "http-log")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnabledLogTypes result `Hspec.shouldBe` Right (Set.fromList [Logging.ELTActionHandler]) Hspec.describe "soLogLevel" $ do Hspec.it "Default == LevelInfo" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soLogLevel result `Hspec.shouldBe` Right Logging.LevelInfo Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_LOG_LEVEL", "warn")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soLogLevel result `Hspec.shouldBe` Right Logging.LevelWarn Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoLogLevel = Just Logging.LevelWarn} -- When env = [("HASURA_GRAPHQL_LOG_LEVEL", "warn")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soLogLevel result `Hspec.shouldBe` Right Logging.LevelWarn Hspec.describe "soDevMode" $ do Hspec.it "Default == False" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soDevMode &&& UUT.soResponseInternalErrorsConfig) result `Hspec.shouldSatisfy` \case Right (soDevMode, soResponseInternalErrorsConfig) -> getAll $ foldMap All [soDevMode == False, soResponseInternalErrorsConfig == UUT.InternalErrorsAdminOnly] Left _err -> False Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_DEV_MODE", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soDevMode &&& UUT.soResponseInternalErrorsConfig) result `Hspec.shouldSatisfy` \case Right (soDevMode, soResponseInternalErrorsConfig) -> getAll $ foldMap All [soDevMode == True, soResponseInternalErrorsConfig == UUT.InternalErrorsAllRequests] Left _err -> False Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoDevMode = True} -- When env = [("HASURA_GRAPHQL_DEV_MODE", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soDevMode result `Hspec.shouldBe` Right True Hspec.describe "soAdminInternalErrors" $ do Hspec.it "Default == InternalErrorsAdminOnly" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soResponseInternalErrorsConfig result `Hspec.shouldBe` Right UUT.InternalErrorsAdminOnly Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ADMIN_INTERNAL_ERRORS", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soResponseInternalErrorsConfig result `Hspec.shouldBe` Right UUT.InternalErrorsDisabled Hspec.it "Dev Mode supersedes rsoAdminInternalErrors" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ADMIN_INTERNAL_ERRORS", "false"), ("HASURA_GRAPHQL_DEV_MODE", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soResponseInternalErrorsConfig result `Hspec.shouldBe` Right UUT.InternalErrorsAllRequests Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoAdminInternalErrors = Just False} -- When env = [("HASURA_GRAPHQL_ADMIN_INTERNAL_ERRORS", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soResponseInternalErrorsConfig result `Hspec.shouldBe` Right UUT.InternalErrorsDisabled Hspec.describe "soEventsHttpPoolSize" $ do -- TODO(SOLOMON): The default value for this option is set in App.hs: -- https://github.com/hasura/graphql-engine-mono/blob/main/server/src-lib/Hasura/App.hs#L910 -- We should move the defaulting into the 'Option' term and -- remove the 'Maybe' from 'soEventsHttpPoolSize' but this -- should be done in an isolated PR to prevent potential -- regressions. -- --Hspec.it "Default == 100" $ do -- let -- Given -- rawServeOptions = emptyServeOptionsRaw -- -- When -- env = [] -- -- Then -- result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) -- fmap UUT.soEventsHttpPoolSize result `Hspec.shouldBe` Right (Just 100) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_EVENTS_HTTP_POOL_SIZE", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEventsHttpPoolSize result `Hspec.shouldBe` Right (Just 200) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEventsHttpPoolSize = Just 300} -- When env = [("HASURA_GRAPHQL_EVENTS_HTTP_POOL_SIZE", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEventsHttpPoolSize result `Hspec.shouldBe` Right (Just 300) Hspec.describe "soEventsFetchInterval" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_EVENTS_FETCH_INTERVAL", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEventsFetchInterval result `Hspec.shouldBe` Right (Just 200) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEventsFetchInterval = Just 300} -- When env = [("HASURA_GRAPHQL_EVENTS_FETCH_INTERVAL", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEventsFetchInterval result `Hspec.shouldBe` Right (Just 300) Hspec.describe "soAsyncActionsFetchInterval" $ do Hspec.it "Default == 1000" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAsyncActionsFetchInterval result `Hspec.shouldBe` Right (UUT.Interval 1000) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ASYNC_ACTIONS_FETCH_INTERVAL", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAsyncActionsFetchInterval result `Hspec.shouldBe` Right (UUT.Interval 200) Hspec.it "0 == 'Skip'" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ASYNC_ACTIONS_FETCH_INTERVAL", "0")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAsyncActionsFetchInterval result `Hspec.shouldBe` Right UUT.Skip Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoAsyncActionsFetchInterval = Just (UUT.Interval 300)} -- When env = [("HASURA_GRAPHQL_ASYNC_ACTIONS_FETCH_INTERVAL", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soAsyncActionsFetchInterval result `Hspec.shouldBe` Right (UUT.Interval 300) Hspec.describe "soEnableRemoteSchemaPermissions" $ do Hspec.it "Default == False" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableRemoteSchemaPermissions result `Hspec.shouldBe` Right Options.DisableRemoteSchemaPermissions Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ENABLE_REMOTE_SCHEMA_PERMISSIONS", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableRemoteSchemaPermissions result `Hspec.shouldBe` Right Options.EnableRemoteSchemaPermissions Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnableRemoteSchemaPermissions = Options.EnableRemoteSchemaPermissions} -- When env = [("HASURA_GRAPHQL_ENABLE_REMOTE_SCHEMA_PERMISSIONS", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap UUT.soEnableRemoteSchemaPermissions result `Hspec.shouldBe` Right Options.EnableRemoteSchemaPermissions Hspec.describe "soWebSocketCompression" $ do Hspec.it "Default == NoCompression" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (WS.connectionCompressionOptions . UUT.soConnectionOptions) result `Hspec.shouldBe` Right WS.NoCompression Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_CONNECTION_COMPRESSION", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (WS.connectionCompressionOptions . UUT.soConnectionOptions) result `Hspec.shouldBe` Right (WS.PermessageDeflateCompression WS.defaultPermessageDeflate) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoWebSocketCompression = True} -- When env = [("HASURA_GRAPHQL_CONNECTION_COMPRESSION", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (WS.connectionCompressionOptions . UUT.soConnectionOptions) result `Hspec.shouldBe` Right (WS.PermessageDeflateCompression WS.defaultPermessageDeflate) Hspec.describe "soWebSocketKeepAlive" $ do Hspec.it "Default == 5" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soWebSocketKeepAlive) result `Hspec.shouldBe` Right (UUT.KeepAliveDelay 5) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_WEBSOCKET_KEEPALIVE", "10")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soWebSocketKeepAlive) result `Hspec.shouldBe` Right (UUT.KeepAliveDelay 10) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoWebSocketKeepAlive = Just (UUT.KeepAliveDelay 20)} -- When env = [("HASURA_GRAPHQL_WEBSOCKET_KEEPALIVE", "10")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soWebSocketKeepAlive) result `Hspec.shouldBe` Right (UUT.KeepAliveDelay 20) Hspec.describe "soInferFunctionPermissions" $ do Hspec.it "Default == FunctionPermissionsInferred" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soInferFunctionPermissions) result `Hspec.shouldBe` Right Options.InferFunctionPermissions Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_INFER_FUNCTION_PERMISSIONS", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soInferFunctionPermissions) result `Hspec.shouldBe` Right Options.Don'tInferFunctionPermissions Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoInferFunctionPermissions = Just Options.InferFunctionPermissions} -- When env = [("HASURA_GRAPHQL_INFER_FUNCTION_PERMISSIONS", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soInferFunctionPermissions) result `Hspec.shouldBe` Right Options.InferFunctionPermissions Hspec.describe "soEnableMaintenanceMode" $ do Hspec.it "Defaut == MaintenanceModeDisabled" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEnableMaintenanceMode) result `Hspec.shouldBe` Right Types.MaintenanceModeDisabled Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_ENABLE_MAINTENANCE_MODE", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEnableMaintenanceMode) result `Hspec.shouldBe` Right (Types.MaintenanceModeEnabled ()) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnableMaintenanceMode = Types.MaintenanceModeEnabled ()} -- When env = [("HASURA_GRAPHQL_ENABLE_MAINTENANCE_MODE", "false")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEnableMaintenanceMode) result `Hspec.shouldBe` Right (Types.MaintenanceModeEnabled ()) Hspec.describe "soSchemaPollInterval" $ do Hspec.it "Default == 1000" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soSchemaPollInterval) result `Hspec.shouldBe` Right (UUT.Interval 1000) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_SCHEMA_SYNC_POLL_INTERVAL", "2000")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soSchemaPollInterval) result `Hspec.shouldBe` Right (UUT.Interval 2000) Hspec.it "0 == Skip" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_SCHEMA_SYNC_POLL_INTERVAL", "0")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soSchemaPollInterval) result `Hspec.shouldBe` Right UUT.Skip Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoSchemaPollInterval = Just (UUT.Interval 3000)} -- When env = [("HASURA_GRAPHQL_SCHEMA_SYNC_POLL_INTERVAL", "2000")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soSchemaPollInterval) result `Hspec.shouldBe` Right (UUT.Interval 3000) Hspec.describe "soExperimentalFeatures" $ do Hspec.it "Default == mempty" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soExperimentalFeatures) result `Hspec.shouldBe` Right mempty Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When -- When env = [("HASURA_GRAPHQL_EXPERIMENTAL_FEATURES", "inherited_roles,optimize_permission_filters,naming_convention")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soExperimentalFeatures) result `Hspec.shouldBe` Right (Set.fromList [Types.EFInheritedRoles, Types.EFOptimizePermissionFilters, Types.EFNamingConventions]) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoExperimentalFeatures = Just (Set.fromList [Types.EFInheritedRoles, Types.EFOptimizePermissionFilters, Types.EFNamingConventions])} -- When env = [("HASURA_GRAPHQL_EXPERIMENTAL_FEATURES", "inherited_roles")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soExperimentalFeatures) result `Hspec.shouldBe` Right (Set.fromList [Types.EFInheritedRoles, Types.EFOptimizePermissionFilters, Types.EFNamingConventions]) Hspec.describe "soEventsFetchBatchSize" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_EVENTS_FETCH_BATCH_SIZE", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEventsFetchBatchSize) result `Hspec.shouldBe` Right 200 Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEventsFetchBatchSize = Just 300} -- When env = [("HASURA_GRAPHQL_EVENTS_FETCH_BATCH_SIZE", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEventsFetchBatchSize) result `Hspec.shouldBe` Right 300 Hspec.describe "soGracefulShutdownTimeout" $ do Hspec.it "Default == 60" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soGracefulShutdownTimeout) result `Hspec.shouldBe` Right 60 Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When -- When env = [("HASURA_GRAPHQL_GRACEFUL_SHUTDOWN_TIMEOUT", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soGracefulShutdownTimeout) result `Hspec.shouldBe` Right 200 Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoGracefulShutdownTimeout = Just 300} -- When env = [("HASURA_GRAPHQL_GRACEFUL_SHUTDOWN_TIMEOUT", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soGracefulShutdownTimeout) result `Hspec.shouldBe` Right 300 Hspec.describe "soWebSocketConnectionInitTimeout" $ do Hspec.it "Default == 3" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soWebSocketConnectionInitTimeout) result `Hspec.shouldBe` Right (UUT.WSConnectionInitTimeout 3) Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When env = [("HASURA_GRAPHQL_WEBSOCKET_CONNECTION_INIT_TIMEOUT", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soWebSocketConnectionInitTimeout) result `Hspec.shouldBe` Right (UUT.WSConnectionInitTimeout 200) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoWebSocketConnectionInitTimeout = Just (UUT.WSConnectionInitTimeout 300)} -- When env = [("HASURA_GRAPHQL_WEBSOCKET_CONNECTION_INIT_TIMEOUT", "200")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soWebSocketConnectionInitTimeout) result `Hspec.shouldBe` Right (UUT.WSConnectionInitTimeout 300) Hspec.describe "soEnableMetadataQueryLoggingEnv" $ do Hspec.it "Default == MetadataQueryLoggingDisabled" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When -- When env = [] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEnableMetadataQueryLogging) result `Hspec.shouldBe` Right Logging.MetadataQueryLoggingDisabled Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When -- When env = [("HASURA_GRAPHQL_ENABLE_METADATA_QUERY_LOGGING", "true")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEnableMetadataQueryLogging) result `Hspec.shouldBe` Right Logging.MetadataQueryLoggingEnabled Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoEnableMetadataQueryLoggingEnv = Logging.MetadataQueryLoggingEnabled} -- When env = [("HASURA_GRAPHQL_ENABLE_METADATA_QUERY_LOGGING", "False")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soEnableMetadataQueryLogging) result `Hspec.shouldBe` Right Logging.MetadataQueryLoggingEnabled Hspec.describe "soDefaultNamingConvention" $ do Hspec.it "Env > Nothing" $ do let -- Given rawServeOptions = emptyServeOptionsRaw -- When -- When env = [("HASURA_GRAPHQL_DEFAULT_NAMING_CONVENTION", "graphql-default")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soDefaultNamingConvention) result `Hspec.shouldBe` Right (Just NC.GraphqlCase) Hspec.it "Arg > Env" $ do let -- Given rawServeOptions = emptyServeOptionsRaw {UUT.rsoDefaultNamingConvention = Just NC.GraphqlCase} -- When env = [("HASURA_GRAPHQL_DEFAULT_NAMING_CONVENTION", "hasura-default")] -- Then result = UUT.runWithEnv env (UUT.mkServeOptions @Logging.Hasura rawServeOptions) fmap (UUT.soDefaultNamingConvention) result `Hspec.shouldBe` Right (Just NC.GraphqlCase)