packages feed

etc-0.0.0.0: test/System/Etc/Resolver/DefaultTest.hs

{-# LANGUAGE NoImplicitPrelude   #-}
{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE ScopedTypeVariables #-}
module System.Etc.Resolver.DefaultTest (tests) where

import Protolude

import Test.Tasty       (TestTree, testGroup)
import Test.Tasty.HUnit (assertBool, assertFailure, testCase)


import qualified Data.Set as Set

import System.Etc

tests :: TestTree
tests =
  testGroup "default"
  [
    testCase "default is used when defined on spec" $ do
      let
        input =
          mconcat
            [
              "{\"etc/entries\": {"
            , " \"greeting\": { \"etc/spec\": { \"default\": \"hello default\" }}}}"
            ]
      (spec :: ConfigSpec ()) <- parseConfigSpec input

      let
        config =
            resolveDefault spec

      case getAllConfigSources ["greeting"] config of
        Nothing ->
          assertFailure ("expecting to get entries for greeting\n"
                         <> show config)
        Just set ->
          assertBool ("expecting to see entry from env; got " <> show set)
                   (Set.member (Default "hello default") set)

  , testCase "default can be raw JSON value on entries spec" $ do
      let
        input =
          mconcat
            [
              "{\"etc/entries\": {"
            , " \"greeting\": \"hello default\"}}"
            ]
      (spec :: ConfigSpec ()) <- parseConfigSpec input

      let
        config =
            resolveDefault spec

      case getAllConfigSources ["greeting"] config of
        Nothing ->
          assertFailure ("expecting to get entries for greeting\n"
                         <> show config)
        Just set ->
          assertBool ("expecting to see entry from env; got " <> show set)
                   (Set.member (Default "hello default") set)

  ]