hspec-junit-formatter-1.0.3.0: library/Test/Hspec/JUnit/Config/Env.hs
-- | Load a 'JUnitConfig' using environment variables
module Test.Hspec.JUnit.Config.Env
( envJUnitEnabled
, envJUnitConfig
) where
import Prelude
import Data.Semigroup (Endo(..))
import Data.Text (pack)
import System.Directory (getCurrentDirectory)
import System.Environment (lookupEnv)
import System.FilePath (takeBaseName)
import Test.Hspec.JUnit.Config
-- | Is @JUNIT_ENABLED=1@ set in the environment?
envJUnitEnabled :: IO Bool
envJUnitEnabled = (== Just "1") <$> lookupEnv (envPrefix <> "ENABLED")
-- | Produce a 'JUnitConfig' by reading environment variables
--
-- Variable names align with setter functions from "Test.Hspec.JUnit.Config":
--
-- * @JUNIT_OUTPUT_DIRECTORY@ 'setJUnitConfigOutputDirectory'
-- * @JUNIT_OUTPUT_NAME@ 'setJUnitConfigOutputName
-- * and so on
--
envJUnitConfig :: IO JUnitConfig
envJUnitConfig = do
modify <- appEndo . foldMap Endo <$> sequence
[ lookupEnvOverride "OUTPUT_DIRECTORY" setJUnitConfigOutputDirectory
, lookupEnvOverride "OUTPUT_NAME" setJUnitConfigOutputName
, lookupEnvOverride "OUTPUT_FILE" setJUnitConfigOutputFile
, lookupEnvOverride "SUITE_NAME" $ setJUnitConfigSuiteName . pack
, lookupEnvOverride "SOURCE_PATH_PREFIX" setJUnitConfigSourcePathPrefix
]
modify . defaultJUnitConfig . pack . takeBaseName <$> getCurrentDirectory
lookupEnvOverride
:: String
-> (String -> JUnitConfig -> JUnitConfig)
-> IO (JUnitConfig -> JUnitConfig)
lookupEnvOverride name setter =
maybe id setter <$> lookupEnv (envPrefix <> name)
envPrefix :: String
envPrefix = "JUNIT_"