packages feed

dotenv-0.6.0.1: spec/Configuration/Dotenv/Scheme/ParseSpec.hs

{-# LANGUAGE OverloadedStrings #-}

{-# OPTIONS_GHC -fno-warn-orphans #-}

module Configuration.Dotenv.Scheme.ParseSpec (spec) where

import Data.Yaml (decodeFileEither)
import Test.Hspec

import Configuration.Dotenv.Scheme.Types

-- | Extract Right from Either
--
fromRight :: (Show a, Show b) => Either a b -> b
fromRight (Right v) = v
fromRight (Left v) = error ("Left " ++ show v ++ " constructor instead" )

-- |
--
spec :: Spec
spec =
  describe "parse a config env file" $
    it "parses the env config values from a file" $
      let expected :: [Env]
          expected =
            [ Env "DOTENV" (EnvType "bool") True
            , Env "OTHERENV" (EnvType "bool") False
            , Env "PORT" (EnvType "integer") True
            , Env "TOKEN" (EnvType "integer") False
            , Env "URL" (EnvType "text") True
            , Env "TWO" (EnvType "twoLetters") False
            ]
       in do
         actual <- decodeFileEither "spec/fixtures/.scheme.yml"
         fromRight actual `shouldBe` expected