nvfetcher-0.5.0.0: test/NixExprSpec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module NixExprSpec where
import qualified Data.List.NonEmpty as NE
import NeatInterpolation (trimming)
import NvFetcher.NixExpr
import NvFetcher.NixFetcher
import NvFetcher.Types
import Test.Hspec
spec :: Spec
spec = describe "toNixExpr" $ do
it "works on bool" $ do
toNixExpr True `shouldBe` "true"
toNixExpr False `shouldBe` "false"
it "works on string" $
toNixExpr ("Foo" :: String) `shouldBe` [trimming|"Foo"|]
it "works on list of strings" $
toNixExpr ["Alice" :: String, "Bob", "Carol"] `shouldBe` [trimming|[ "Alice" "Bob" "Carol" ]|]
it "renders fresh gitFetcher" $
toNixExpr (gitFetcher "https://example.com" "fake_rev")
`shouldBe` [trimming|
fetchgit {
url = "https://example.com";
rev = "fake_rev";
fetchSubmodules = false;
deepClone = false;
leaveDotGit = false;
sha256 = lib.fakeSha256;
}
|]
it "renders fresh gitHubFetcher" $
toNixExpr (gitHubFetcher ("owner", "repo") "fake_rev")
`shouldBe` [trimming|
fetchFromGitHub ({
owner = "owner";
repo = "repo";
rev = "fake_rev";
fetchSubmodules = false;
sha256 = lib.fakeSha256;
})
|]
it "renders fresh urlFetcher" $
toNixExpr (urlFetcher "https://example.com")
`shouldBe` [trimming|
fetchurl {
url = "https://example.com";
sha256 = lib.fakeSha256;
}
|]
it "renders filename for vsc extension" $
toNixExpr (openVsxFetcher ("publisher", "extension") "fake_version")
`shouldBe` [trimming|
fetchurl {
url = "https://open-vsx.org/api/publisher/extension/fake_version/file/publisher.extension-fake_version.vsix";
name = "extension-fake_version.zip";
sha256 = lib.fakeSha256;
}
|]
it "renders IFD of ExtractSrcQ" $
toNixExpr
( ExtractSrcQ
(FetchUrl "https://example.com" Nothing (Checksum "calculated sha256"))
(NE.fromList ["a.txt", "b.txt"])
)
`shouldBe` [trimming|
let
drv = import (pkgs.writeText "src" ''
pkgs: {
src = pkgs.fetchurl {
url = "https://example.com";
sha256 = "calculated sha256";
};
}
'');
fileNames = [ "a.txt" "b.txt" ];
toFile = f: builtins.readFile ((drv pkgs).src + "/" + f);
in builtins.listToAttrs (builtins.map (x: {
name = x;
value = toFile x;
}) fileNames)
|]