seihou-cli-0.4.0.0: test/Seihou/CLI/InitSpec.hs
module Seihou.CLI.InitSpec (tests) where
import Data.Text qualified as T
import Seihou.CLI.Init (formatInitOutput)
import Test.Hspec
import Test.Tasty
import Test.Tasty.Hspec (testSpec)
tests :: IO TestTree
tests = testSpec "Seihou.CLI.Init" spec
spec :: Spec
spec = do
describe "formatInitOutput" $ do
it "includes header with base path" $ do
let result = formatInitOutput "~/.config/seihou" []
T.isInfixOf "Initialized Seihou configuration at ~/.config/seihou/" result
`shouldBe` True
it "shows Created: for newly created items" $ do
let items = [("config.dhall", "global defaults", True)]
result = formatInitOutput "~/.config/seihou" items
T.isInfixOf "Created: config.dhall (global defaults)" result
`shouldBe` True
it "shows Exists: for already existing items" $ do
let items = [("config.dhall", "global defaults", False)]
result = formatInitOutput "~/.config/seihou" items
T.isInfixOf "Exists: config.dhall (global defaults)" result
`shouldBe` True
it "formats all three spec items correctly when all created" $ do
let items =
[ ("config.dhall", "global defaults", True),
("modules/", "user modules", True),
("installed/", "git-installed modules", True)
]
result = formatInitOutput "~/.config/seihou" items
resultLines = T.lines result
length resultLines `shouldBe` 4
(resultLines !! 0) `shouldBe` "Initialized Seihou configuration at ~/.config/seihou/"
(resultLines !! 1) `shouldBe` " Created: config.dhall (global defaults)"
(resultLines !! 2) `shouldBe` " Created: modules/ (user modules)"
(resultLines !! 3) `shouldBe` " Created: installed/ (git-installed modules)"
it "formats mixed created and existing items" $ do
let items =
[ ("config.dhall", "global defaults", False),
("modules/", "user modules", True),
("installed/", "git-installed modules", False)
]
result = formatInitOutput "~/.config/seihou" items
resultLines = T.lines result
(resultLines !! 1) `shouldBe` " Exists: config.dhall (global defaults)"
(resultLines !! 2) `shouldBe` " Created: modules/ (user modules)"
(resultLines !! 3) `shouldBe` " Exists: installed/ (git-installed modules)"
it "uses two-space indentation for items" $ do
let items = [("test.txt", "test file", True)]
result = formatInitOutput "~/path" items
resultLines = T.lines result
T.isPrefixOf " " (resultLines !! 1) `shouldBe` True