headroom-0.4.2.0: test/Headroom/PostProcessSpec.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module Headroom.PostProcessSpec
( spec
)
where
import Headroom.Configuration.Types ( PostProcessConfig(..)
, PostProcessConfigs(..)
, UpdateCopyrightConfig(..)
)
import Headroom.Data.Has ( Has(..) )
import Headroom.Data.Text ( fromLines )
import Headroom.PostProcess
import Headroom.PostProcess.Types
import Headroom.PostProcess.UpdateCopyright
import Headroom.Template.Mustache ( Mustache )
import Headroom.Types ( CurrentYear(..) )
import Headroom.Variables ( mkVariables )
import RIO
import Test.Hspec
spec :: Spec
spec = do
let currentYear = CurrentYear 2020
mode = UpdateSelectedAuthors . SelectedAuthors $ "2nd Author" :| []
vars = mkVariables [("sndAuthor", "2nd Author")]
configs a = PostProcessConfigs
{ ppcsUpdateCopyright = PostProcessConfig
{ ppcEnabled = True
, ppcConfig = UpdateCopyrightConfig
{ uccSelectedAuthors = Just
$ a
:| []
}
}
}
configuredEnv a = ConfiguredEnv { ceCurrentYear = currentYear
, cePostProcessConfigs = configs a
, ceUpdateCopyrightMode = mode
}
describe "postProcess" $ do
it "executes the function for given environment" $ do
let testEnv = TestEnv "ENV"
input = "input"
expected = "input_ENV"
postProcess testFn testEnv input `shouldBe` expected
describe "postProcessHeader" $ do
it "post-processes license header using given configuration" $ do
let header = fromLines
[ "License header"
, "Copyright (c) 2019 1st Author"
, "Copyright (c) 2018-2019 2nd Author"
]
expected = fromLines
[ "License header"
, "Copyright (c) 2019 1st Author"
, "Copyright (c) 2018-2020 2nd Author"
]
env = configuredEnv "2nd Author"
postProcessHeader env header `shouldBe` expected
describe "mkConfiguredEnv" $ do
it "makes ConfiguredEnv from input parameters" $ do
let configsIn = configs "{{ sndAuthor }}"
out = configuredEnv "2nd Author"
mkConfiguredEnv @Mustache currentYear vars configsIn `shouldBe` Just out
------------------------------- Test Data Types ------------------------------
newtype TestEnv = TestEnv Text
instance Has TestEnv TestEnv where
hasLens = id
testFn :: (Has TestEnv env) => PostProcess env
testFn = PostProcess $ \input -> do
TestEnv text <- viewL
pure $ input <> "_" <> text