packages feed

headroom-0.4.3.0: test/Headroom/Config/CompatSpec.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}

module Headroom.Config.CompatSpec
  ( spec
  )
where

import           Headroom.Config.Compat
import           Headroom.Meta.Version               ( Version(..)
                                                     , pvp
                                                     )
import           RIO
import           Test.Hspec


spec :: Spec
spec = do
  describe "checkCompatibility" $ do
    it "passes when config version is compatible" $ do
      let yaml     = "version: 0.4.0.0"
          curr     = [pvp|0.4.0.0|]
          version  = [pvp|0.4.0.0|]
          versions = [[pvp|0.1.0.0|], [pvp|0.2.1.0|], [pvp|0.4.0.0|]]
      checkCompatibility versions curr yaml `shouldBe` Just version

    it "fails when config version is not compatible" $ do
      let yaml     = "version: 0.2.1.0"
          curr     = [pvp|0.2.1.0|]
          versions = [[pvp|0.1.0.0|], [pvp|0.2.1.0|], [pvp|0.4.0.0|]]
      let err (UnsupportedVersion [Version 0 4 0 0] (Version 0 2 1 0)) = True
          err _ = False
      checkCompatibility versions curr yaml `shouldThrow` err

    it "fails when version is newer than Headroom version" $ do
      let yaml     = "version: 0.2.1.0"
          curr     = [pvp|0.2.0.0|]
          versions = [[pvp|0.1.0.0|]]
      let err (NewerVersionDetected (Version 0 2 1 0)) = True
          err _ = False
      checkCompatibility versions curr yaml `shouldThrow` err

    it "fails when config version cannot be determined" $ do
      let yaml     = ""
          curr     = [pvp|0.2.0.0|]
          versions = [[pvp|0.1.0.0|], [pvp|0.2.1.0|], [pvp|0.4.0.0|]]
      let err CannotParseVersion = True
          err _                  = False
      checkCompatibility versions curr yaml `shouldThrow` err