packages feed

ghcup-0.2.1.0: test/optparse-test/ConfigTest.hs

{-# LANGUAGE QuasiQuotes #-}

module ConfigTest where

import Test.Tasty
import Test.Tasty.HUnit
import GHCup.OptParse
import GHCup.Types (NewURLSource(..), ChannelAlias(..))
import Utils
import Control.Monad.IO.Class
import URI.ByteString.QQ

configTests :: TestTree
configTests = testGroup "config" $ map (uncurry check) checkList
  where
    check :: String -> ConfigCommand -> TestTree
    check args expected = testCase args $ do
      res <- configParseWith (words args)
      liftIO $ res @?= expected

checkList :: [(String, ConfigCommand)]
checkList =
  [ ("config", ShowConfig)
  , ("config init", InitConfig)
  , ("config show", ShowConfig)
  , ("config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml"
    , AddReleaseChannel False (NewURI [uri|https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml|])
    )
  , ("config add-release-channel GHCupURL"
    , AddReleaseChannel False NewGHCupURL
    )
  , ("config add-release-channel StackSetupURL"
    , AddReleaseChannel False NewStackSetupURL
    )
  , ("config add-release-channel default"
    , AddReleaseChannel False (NewChannelAlias DefaultChannel)
    )
  , ("config add-release-channel stack"
    , AddReleaseChannel False (NewChannelAlias StackChannel)
    )
  , ("config add-release-channel cross"
    , AddReleaseChannel False (NewChannelAlias CrossChannel)
    )
  , ("config add-release-channel prereleases"
    , AddReleaseChannel False (NewChannelAlias PrereleasesChannel)
    )
  , ("config add-release-channel vanilla"
    , AddReleaseChannel False (NewChannelAlias VanillaChannel)
    )
  , ("config set cache true", SetConfig "cache" (Just "true"))
  , ("config reset all", ResetConfig ResetAll)
  , ("config reset keys cache downloader", ResetConfig (ResetKeys ["cache", "downloader"]))
  , ("config reset keys cache", ResetConfig (ResetKeys ["cache"]))
  , ("config reset keys meta-cache", ResetConfig (ResetKeys ["meta-cache"]))
  , ("config reset keys meta-mode", ResetConfig (ResetKeys ["meta-mode"]))
  , ("config reset keys no-verify", ResetConfig (ResetKeys ["no-verify"]))
  , ("config reset keys verbose", ResetConfig (ResetKeys ["verbose"]))
  , ("config reset keys keep-dirs", ResetConfig (ResetKeys ["keep-dirs"]))
  , ("config reset keys downloader", ResetConfig (ResetKeys ["downloader"]))
  , ("config reset keys key-bindings", ResetConfig (ResetKeys ["key-bindings"]))
  , ("config reset keys url-source", ResetConfig (ResetKeys ["url-source"]))
  , ("config reset keys no-network", ResetConfig (ResetKeys ["no-network"]))
  , ("config reset keys gpg-setting", ResetConfig (ResetKeys ["gpg-setting"]))
  , ("config reset keys platform-override", ResetConfig (ResetKeys ["platform-override"]))
  , ("config reset keys mirrors", ResetConfig (ResetKeys ["mirrors"]))
  , ("config reset keys def-ghc-conf-options", ResetConfig (ResetKeys ["def-ghc-conf-options"]))
  , ("config reset keys pager", ResetConfig (ResetKeys ["pager"]))
  , ("config reset keys guess-version", ResetConfig (ResetKeys ["guess-version"]))
  ]

configParseWith :: [String] -> IO ConfigCommand
configParseWith args = do
  Config a <- parseWith args
  pure a