{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} module CsvSpec where import Control.Monad import Data.ByteString.Lazy.Char8 import Data.Csv import GHC.Generics import Hakyll.Contrib.Csv import Test.Hspec import qualified Text.Blaze.Html.Renderer.String as H import Text.Blaze.Html5 (Html) import qualified Text.Blaze.Html5 as H spec :: Spec spec = describe "csvTable" $ do it "generates correct Html." $ (H.renderHtml . csvTableContents $ testCsv) `shouldBe` H.renderHtml testHtml data Person = Person {name :: !String, age :: !Int} deriving (Generic, Show) instance ToNamedRecord Person instance FromNamedRecord Person instance DefaultOrdered Person testCsv :: ByteString testCsv = encodeDefaultOrderedByName testPeople testHtml :: Html testHtml = do H.thead $ H.tr $ do H.td $ H.toHtml ("name" :: String) H.td $ H.toHtml ("age" :: String) H.tbody $ forM_ testPeople $ \person -> H.tr $ do H.td $ H.toHtml $ name person H.td $ H.toHtml $ age person testPeople :: [Person] testPeople = [ Person "Bobby" 29 , Person "Michelle" 34 , Person "Rachael" 19 ]