packages feed

cachix-0.1.0.1: 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 = 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