stacker-0.0.0.0: test/TestBump.hs
module TestBump (bumpTestsIO) where
import Test.Tasty ( TestTree )
import Test.Tasty.Golden ( goldenVsFileDiff )
import System.Directory (copyFile, setCurrentDirectory, getCurrentDirectory)
import System.IO.Temp (createTempDirectory, getCanonicalTemporaryDirectory)
import Control.Monad (forM_)
import Data.Maybe (catMaybes)
-- Import from library
import StackYaml (findStackYamlFiles, getSymlinkMap, applyAction)
import Analysis (analyzeStackYaml)
import CSV (loadSnapshotDB, ensureCSVFiles)
import PathUtil ((</>))
-- | Generate bump tests - all files are bumped in one temp directory
bumpTestsIO :: IO [TestTree]
bumpTestsIO = do
-- Ensure CSV files are available
ensureCSVFiles
-- Create a temp directory for this test run
sysTempDir <- getCanonicalTemporaryDirectory
tempDir <- createTempDirectory sysTempDir "stacker-test"
-- Find all stack*.yaml files using library function
cwd <- getCurrentDirectory
setCurrentDirectory "test/tests"
stackYamlFiles <- findStackYamlFiles
setCurrentDirectory cwd
-- Copy all files to temp directory
forM_ stackYamlFiles $ \file -> do
copyFile ("test/tests" </> file) (tempDir </> file)
-- Run bump logic using library functions
setCurrentDirectory tempDir
-- Load snapshot database
db <- loadSnapshotDB
-- Get symlink map
symlinkMap <- getSymlinkMap stackYamlFiles
-- Get and run actions for each file
actions <- catMaybes <$> mapM (analyzeStackYaml db symlinkMap) stackYamlFiles
mapM_ (applyAction False) actions
setCurrentDirectory cwd
-- Create a golden test for each file
return $ map (makeGoldenTest tempDir) stackYamlFiles
where
makeGoldenTest tempDir file = goldenVsFileDiff
("bump " ++ file)
(\ref new -> ["diff", "-u", ref, new])
("test/golden/tests" </> file)
(tempDir </> file)
(return ()) -- Action is empty since bump already ran