packages feed

cachix-0.1.0.0: test/InstallationModeSpec.hs

module InstallationModeSpec where

import Protolude
import Test.Hspec

import qualified Cachix.Client.NixConf as NixConf
import           Cachix.Client.NixVersion ( NixMode(..) )
import           Cachix.Client.InstallationMode


spec :: Spec
spec = do
  describe "getInstallationMode" $ do
    it "Nix 1.X is unsupported" $
      let
        nixenv = NixEnv
          { nixMode = Nix1XX
          , isTrusted = False -- any
          , isRoot = False -- any
          , isNixOS = False -- any
          }
      in getInstallationMode nixenv `shouldBe` UnsupportedNix1X
    it "NixOS with root prints configuration" $
      let
        nixenv = NixEnv
          { nixMode = Nix20 -- any except 1.0
          , isTrusted = True -- any
          , isRoot = True
          , isNixOS = True
          }
      in getInstallationMode nixenv `shouldBe` EchoNixOS
    it "NixOS without trust prints configuration plus trust" $
      let
        nixenv = NixEnv
          { nixMode = Nix20
          , isTrusted = False
          , isRoot = False
          , isNixOS = True
          }
      in getInstallationMode nixenv `shouldBe` EchoNixOSWithTrustedUser
    it "NixOS non-root trusted results into local install" $
      let
        nixenv = NixEnv
          { nixMode = Nix201
          , isTrusted = True
          , isRoot = False
          , isNixOS = True
          }
      in getInstallationMode nixenv `shouldBe` Install NixConf.Local
    it "non-NixOS root results into global install" $
      let
        nixenv = NixEnv
          { nixMode = Nix201
          , isTrusted = True
          , isRoot = True
          , isNixOS = False
          }
      in getInstallationMode nixenv `shouldBe` Install NixConf.Global
    it "non-NixOS non-root trusted results into local install" $
      let
        nixenv = NixEnv
          { nixMode = Nix201
          , isTrusted = True
          , isRoot = False
          , isNixOS = False
          }
      in getInstallationMode nixenv `shouldBe` Install NixConf.Local
    it "non-NixOS non-root non-trusted results into required sudo" $
      let
        nixenv = NixEnv
          { nixMode = Nix201
          , isTrusted = False
          , isRoot = False
          , isNixOS = False
          }
      in getInstallationMode nixenv `shouldBe` UntrustedRequiresSudo
    it "non-NixOS non-root non-trusted on Nix 2.0.0 results into required sudo with upgrade warning" $
      let
        nixenv = NixEnv
          { nixMode = Nix20
          , isTrusted = False
          , isRoot = False
          , isNixOS = False
          }
      in getInstallationMode nixenv `shouldBe` Nix20RequiresSudo
    it "non-NixOS non-root trusted on Nix 2.0.0 results into required sudo with upgrade warning" $
      let
        nixenv = NixEnv
          { nixMode = Nix20
          , isTrusted = True
          , isRoot = False
          , isNixOS = False
          }
      in getInstallationMode nixenv `shouldBe` Nix20RequiresSudo