packages feed

confcrypt-0.2.3.3: test/ConfCrypt/Template/Tests.hs

module ConfCrypt.Template.Tests (
    templateTests
    ) where

import ConfCrypt.Template (renderTemplate)
import ConfCrypt.Types (Parameter(..), SchemaType(..))

import Test.Tasty
import Test.Tasty.HUnit

import Data.Text (Text(..))
import Data.Either (isLeft)

templateTests :: TestTree
templateTests = testGroup "format template parser" [
    testCase "basic template works" $ 
        render "%t %n %v" param @=? Right "String name value"
    
    ,testCase "template variables can appear next to any character" $ 
        render "tt%ttt%ntt%vtt" param @=? Right "ttStringttnamettvaluett"
    
    ,testCase "invalid variable names give an error" $
        isLeft (render "%t %a" param) @=? True
    
    ,testCase "%% renders to %" $
        render "%v%%%n%%%t" param @=? Right "value%name%String"
    
    ,testCase "variables can appear more than once" $
        render "%v%v%v" param @=? Right "valuevaluevalue"
    ]

render :: Text -> Parameter -> Either Text Text
render tpl param =
    let renderFunc = renderTemplate tpl
    in renderFunc <*> pure param

param = Parameter "name" "value" (Just CString)