hwm-0.2.0: test/Utils/Golden.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Utils.Golden (Golden (..), goldenTest) where
import Relude
import System.Directory (makeAbsolute, removePathForcibly)
import System.FilePath ((</>))
import qualified System.IO as IO
import Test.Hspec (Expectation, shouldBe)
import Utils.Core (copyLocalFiles, diff, inWorkDir, runHWM)
data Golden = Golden
{ cmd :: String,
scenario :: FilePath,
project :: FilePath
}
isUpdateMode :: IO Bool
isUpdateMode = (== Just "1") <$> lookupEnv "GOLDEN_UPDATE"
goldenTest :: Golden -> Expectation
goldenTest Golden {..} = do
scenarioDir <- makeAbsolute $ "test/golden/" </> scenario
let expectedDir = scenarioDir </> "expected"
let stdoutFile = scenarioDir </> "stdout.ansi"
updateMode <- isUpdateMode
inWorkDir project scenarioDir $ do
out <- runHWM cmd
if updateMode
then do
removePathForcibly expectedDir
copyLocalFiles expectedDir
IO.writeFile stdoutFile out
else do
diff expectedDir [".hwm", ".stack-work", "dist-newstyle", "*.log"]
expectedStdout <- IO.readFile stdoutFile
out `shouldBe` expectedStdout