nvfetcher-0.6.0.0: test/NixExprSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE QuasiQuotes #-}
module NixExprSpec where
import NeatInterpolation (trimming)
import NvFetcher.NixExpr
import NvFetcher.NixFetcher
import NvFetcher.Types
import PrefetchSpec
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 (fakeFetch (gitFetcher "https://example.com" "fake_rev"))
`shouldBe` [trimming|
fetchgit {
url = "https://example.com";
rev = "fake_rev";
fetchSubmodules = false;
deepClone = false;
leaveDotGit = false;
sha256 = "0000000000000000000000000000000000000000000000000000000000000000";
}
|]
it "renders fresh gitHubFetcher" $
toNixExpr (fakeFetch (gitHubFetcher ("owner", "repo") "fake_rev"))
`shouldBe` [trimming|
fetchFromGitHub ({
owner = "owner";
repo = "repo";
rev = "fake_rev";
fetchSubmodules = false;
sha256 = "0000000000000000000000000000000000000000000000000000000000000000";
})
|]
it "renders fresh urlFetcher" $
toNixExpr (fakeFetch (urlFetcher "https://example.com"))
`shouldBe` [trimming|
fetchurl {
url = "https://example.com";
sha256 = "0000000000000000000000000000000000000000000000000000000000000000";
}
|]
it "renders filename for vsc extension" $
toNixExpr (fakeFetch (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 = "0000000000000000000000000000000000000000000000000000000000000000";
}
|]
it "renders fresh FetchDocker" $ do
toNixExpr (fakeFetch testDockerFetcher)
`shouldBe` [trimming|
dockerTools.pullImage {
imageName = "library/alpine";
imageDigest = "sha256:0000000000000000000000000000000000000000000000000000000000000000";
sha256 = "0000000000000000000000000000000000000000000000000000000000000000";
finalImageTag = "3.16.2";
}
|]
fakeFetch :: NixFetcher Fresh -> NixFetcher Fetched
fakeFetch = \case
FetchGit {..} -> FetchGit {_sha256 = fakeSha256, ..}
FetchGitHub {..} -> FetchGitHub {_sha256 = fakeSha256, ..}
FetchUrl {..} -> FetchUrl {_sha256 = fakeSha256, ..}
FetchTarball {..} -> FetchTarball {_sha256 = fakeSha256, ..}
FetchDocker {..} -> FetchDocker {_sha256 = fakeSha256, _imageDigest = fakeDigest, ..}
where
fakeSha256 = Checksum "0000000000000000000000000000000000000000000000000000000000000000"
fakeDigest = ContainerDigest "sha256:0000000000000000000000000000000000000000000000000000000000000000"