headroom-0.1.0.0: test/Headroom/Template/MustacheSpec.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Headroom.Template.MustacheSpec
( spec
)
where
import Headroom.Template
import Headroom.Template.Mustache
import Headroom.Types
import RIO
import qualified RIO.HashMap as HM
import Test.Hspec
import Test.Utils ( matchesException )
spec :: Spec
spec = do
describe "parseTemplate" $ do
it "parses Mustache template from raw text" $ do
let template = "Hello, {{ name }}"
parsed = parseTemplate (Just "template") template :: Maybe Mustache
parsed `shouldSatisfy` isJust
describe "renderTemplate" $ do
it "renders Mustache template with given variables" $ do
let template = "Hello, {{ name }}"
variables = HM.fromList [("name", "John")]
parsed = parseTemplate (Just "template") template :: Maybe Mustache
rendered = parsed >>= renderTemplate variables :: Maybe Text
rendered `shouldBe` Just "Hello, John"
it "fails if not enough variables is provided" $ do
let template = "Hello, {{ name }} {{ surname }}"
variables = HM.fromList [("name", "John")]
parsed :: Either SomeException Mustache
parsed = parseTemplate (Just "test") template
rendered = parsed >>= renderTemplate variables
check (Just (MissingVariables "test" ["surname"])) = True
check _ = False
rendered `shouldSatisfy` matchesException check