1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module NormalRepoSpec
( spec
) where
import Control.Monad
import qualified Data.ByteString as SB
import GitHash
import System.Directory
import System.FilePath
import System.Process
import Test.Hspec
import UnliftIO.Temporary
spec :: Spec
spec =
around setupGitRepo $ do
describe "getGitInfo" $ do
it "it makes sensible git info for a regular git repository" $ \fp -> do
errOrGi <- getGitInfo fp
case errOrGi of
Left err -> expectationFailure $ show err
Right gi -> do
length (giHash gi) `shouldNotBe` 128
giBranch gi `shouldBe` initialBranchName
giDirty gi `shouldBe` False
giCommitDate gi `shouldNotBe` []
giCommitCount gi `shouldBe` 1
giCommitMessage gi `shouldBe` "Initial commit"
length (giDescribe gi) `shouldBe` 7
describe "getGitRoot" $ do
it "it gets the expected git root for a regular git repository" $ \fp ->
getGitRoot fp `shouldReturn` Right fp
setupGitRepo :: (FilePath -> IO ()) -> IO ()
setupGitRepo runTest =
withSystemTempDirectory "normal" $ \fp -> do
createDirectoryIfMissing True fp
let runGit args =
void $ readCreateProcess ((proc "git" args) {cwd = Just fp}) ""
runGit ["init", "--initial-branch", initialBranchName]
SB.writeFile
(fp </> "README.md")
"This is a readme, you should read it."
runGit ["add", "README.md"]
runGit
[ "-c"
, "user.name='Test User'"
, "-c"
, "user.email='test@example.com'"
, "commit"
, "-m"
, "Initial commit"
]
runTest fp
initialBranchName :: String
initialBranchName = "main"
|