packages feed

cachix-1.7.3: test/NixVersionSpec.hs

module NixVersionSpec (spec) where

import Cachix.Client.NixVersion
import Data.Versions (Versioning, versioning)
import Protolude
import Test.Hspec

spec :: Spec
spec = do
  describe "parseNixVersion" $ do
    it "fails with unknown string 'foobar'" $
      parseNixVersion "foobar" `shouldSatisfy` isLeft

    it "parses out a semver out of an unexpected string" $
      parseNixVersion "foobar 2.0.1 other stuff"
        `shouldBe` Right (toVersioning "2.0.1")

    describe "Nix" $
      runParserTests
        [ ("nix-env (Nix) 2.0", toVersioning "2.0"),
          ("nix-env (Nix) 2.0.1", toVersioning "2.0.1"),
          ("nix-env (Nix) 2.0.1\n", toVersioning "2.0.1")
        ]

    describe "Lix" $
      runParserTests
        [ ("nix-env (Lix, like Nix) 2.90-beta.0", toVersioning "2.90-beta.0"),
          ("nix-env (Lix, like Nix) 2.90-beta.1-lixpre20240506-b6799ab", toVersioning "2.90-beta.1-lixpre20240506-b6799ab")
        ]

runParserTests :: [(Text, Versioning)] -> Spec
runParserTests tests = do
  forM_ tests $ \(input, expected) ->
    it ("parses '" <> toS input <> "'") $
      parseNixVersion input `shouldBe` Right expected

toVersioning :: Text -> Versioning
toVersioning str =
  versioning str & fromRight (panic "Couldn't parse version")