headroom-0.3.0.0: test/Headroom/VariablesSpec.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Headroom.VariablesSpec
( spec
)
where
import Headroom.Types ( CurrentYear(..) )
import Headroom.Variables
import Headroom.Variables.Types ( Variables(..) )
import RIO
import qualified RIO.HashMap as HM
import Test.Hspec
spec :: Spec
spec = do
describe "mkVariables" $ do
it "constructs new Variables" $ do
let sample = [("key1", "value1")]
expected = Variables $ HM.fromList sample
mkVariables sample `shouldBe` expected
describe "parseVariables" $ do
it "parses variables from key=value textual representation" $ do
let sample = ["key1=value1", "key2=value2"]
expected = mkVariables [("key1", "value1"), ("key2", "value2")]
parseVariables sample `shouldBe` Just expected
describe "compileVariables" $ do
it "compiles template-like variable values" $ do
let sample1 = mkVariables
[("name", "John Smith"), ("greeting", "Hello, {{ name }}")]
expected = mkVariables
[("name", "John Smith"), ("greeting", "Hello, John Smith")]
result <- compileVariables sample1
result `shouldBe` expected
it "doesn't get stuck in infinite loop on invalid recursive variable" $ do
let sample1 = mkVariables [("greeting", "Hello, {{ greeting }}")]
expected = mkVariables [("greeting", "Hello, Hello, {{ greeting }}")]
result <- compileVariables sample1
result `shouldBe` expected
describe "dynamicVariables" $ do
it "returns map of all expected dynamic variables" $ do
let year = CurrentYear 2020
expected = mkVariables [("_current_year", "2020")]
dynamicVariables year `shouldBe` expected