packages feed

mighttpd2-4.0.11: test/ReportSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module ReportSpec where

import Control.Exception (bracket)
import System.Directory
import System.FilePath ((</>))
import System.Posix.Files (createSymbolicLink)
import Test.Hspec

import Program.Mighty

spec :: Spec
spec = describe "report" $ around withDir $ do
    it "appends to the report file" $ \dir -> do
        let file = dir </> "report"
            rpt = initReporter False file
        report rpt "foo"
        report rpt "bar"
        ls <- lines <$> readFile file
        length ls `shouldBe` 2
    it "does not follow a symbolic link" $ \dir -> do
        let victim = dir </> "victim"
            link = dir </> "link"
        writeFile victim "original\n"
        createSymbolicLink victim link
        report (initReporter False link) "foo"
        readFile victim `shouldReturn` "original\n"

withDir :: (FilePath -> IO ()) -> IO ()
withDir body = do
    tmp <- getTemporaryDirectory
    let dir = tmp </> "mighty-report-spec"
    bracket (mk dir) removeDirectoryRecursive body
  where
    mk dir = do
        removePathForcibly dir
        createDirectory dir
        return dir