packages feed

hakyll-convert-0.3.0.1: test/golden/Golden/IO.hs

{-# LANGUAGE OverloadedStrings #-}

module Golden.IO where

import qualified Data.ByteString.Lazy.Char8 as LBS
import Data.DateTime (fromGregorian)
import Data.Default (def)
import Hakyll.Convert.Common (DistilledPost (..))
import Hakyll.Convert.IO (savePost)
import System.FilePath ((</>))
import System.IO.Temp (withSystemTempDirectory)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.Golden (goldenVsString)

goldenTests :: TestTree
goldenTests =
  testGroup
    "IO.savePost"
    [ writesUntitledPost,
      writesPostWithTitle
    ]

writesUntitledPost :: TestTree
writesUntitledPost =
  goldenVsString
    "Writes untitled post to a file"
    "test/golden/data/io-000/untitled-post.golden"
    ( withSystemTempDirectory "hakyll-convert" $ \tempDir -> do
        let output_format = "output"
        let file_extension = "html"
        let post =
              def
                { dpUri = "https://example.com/~joe/2011/01/02/just-testing.php",
                  dpDate = fromGregorian 2011 1 2 3 14 59,
                  dpCategories = ["Category 1", "Category 2"],
                  dpTags = ["Tagged", "with", "<3"],
                  dpBody = "<p>This tool is <em>awesome</em>!</p>"
                }

        -- Ignore the generated filename -- we'll just check if the file is at
        -- the expected place instead.
        _filename <- savePost tempDir output_format file_extension post

        let filename = tempDir </> "output.html"
        LBS.readFile filename
    )

writesPostWithTitle :: TestTree
writesPostWithTitle =
  goldenVsString
    "Writes post with title to a file"
    "test/golden/data/io-000/post-with-title.golden"
    ( withSystemTempDirectory "hakyll-convert" $ \tempDir -> do
        let output_format = "output"
        let file_extension = "aspx"
        let post =
              def
                { dpUri = "https://example.com/~joe/a%20joke.php",
                  dpDate = fromGregorian 1999 12 31 23 59 1,
                  dpCategories = ["jokes"],
                  dpTags = ["non-funny", "unoriginal"],
                  dpTitle = Just "And now for something completely different…",
                  dpBody = "Wonder what it is?"
                }

        -- Ignore the generated filename -- we'll just check if the file is at
        -- the expected place instead.
        _filename <- savePost tempDir output_format file_extension post

        let filename = tempDir </> "output.aspx"
        LBS.readFile filename
    )