packages feed

conferer-1.1.0.0: test/Conferer/Source/EnvSpec.hs

module Conferer.Source.EnvSpec where

import Test.Hspec
import Test.QuickCheck

import Conferer.Source
import Conferer.Source.Env

spec :: Spec
spec = do
  describe "with an env source" $ do
    let
      mkEnvConfig envVars =
        return $ fromEnvList envVars "APP"

    it "getting an existent key returns unwraps top level value (without \
       \children)" $ do
      c <- mkEnvConfig
            [ ("APP_THING","thing")
            , ("APP","root")
            , ("APP_PG_HOST","some host")
            , ("APP_PG_PORT","some port")
            , ("SOMETHING_ELSE","else")
            ]
      res <- getKeyInSource c ""
      res `shouldBe` Just "root"

    it "getting an existent key for a child gets that value" $ do
      c <- mkEnvConfig
            [ ("APP_THING","thing")
            ]
      res <- getKeyInSource c "thing"
      res `shouldBe` Just "thing"

    it "listing some keys returns all the right values" $ do
      c <- mkEnvConfig
            [ ("APP_PG_HOST","some host")
            , ("APP_PG_PORT","some port")
            ]
      res <- getSubkeysInSource c "pg"
      res `shouldBe` ["pg.host", "pg.port"]

    it "listing the keys under the root list everything excluding ." $ do
      c <- mkEnvConfig
            [ ("APP_SOME","value")
            , ("APP","value")
            , ("SOMETHING_ELSE","else")
            ]
      res <- getSubkeysInSource c ""
      res `shouldBe` ["some"]

    it "key to env var and back be identity" $ property $
      forAll
        (elements ["a", "a.b", "", "a.b.c", "UPPER"])
        $ \k ->
            envVarToKey "theapp" (keyToEnvVar "theapp" k)
              == Just k