1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Pantry.BuildPlanSpec where
import Data.Aeson.WarningParser ( WithJSONWarnings(..) )
import qualified Data.ByteString.Char8 as S8
import Data.Yaml ( decodeThrow )
import Pantry
import RIO
import Test.Hspec
spec :: Spec
spec =
describe "PackageLocation" $ do
describe "Archive" $ do
describe "github" $ do
let decode' :: (HasCallStack, MonadThrow m) => ByteString -> m (WithJSONWarnings (Unresolved (NonEmpty RawPackageLocationImmutable)))
decode' = decodeThrow
decode'' :: HasCallStack => ByteString -> IO (NonEmpty RawPackageLocationImmutable)
decode'' bs = do
WithJSONWarnings unresolved warnings <- decode' bs
unless (null warnings) $ error $ show warnings
resolvePaths Nothing unresolved
it "'github' and 'commit' keys" $ do
let contents :: ByteString
contents =
S8.pack
(unlines
[ "github: oink/town"
, "commit: abc123"
])
let expected :: RawPackageLocationImmutable
expected =
RPLIArchive
RawArchive
{ raLocation = ALUrl "https://github.com/oink/town/archive/abc123.tar.gz"
, raHash = Nothing
, raSize = Nothing
, raSubdir = ""
}
RawPackageMetadata
{ rpmName = Nothing
, rpmVersion = Nothing
, rpmTreeKey = Nothing
}
actual <- decode'' contents
actual `shouldBe` pure expected
it "'github', 'commit', and 'subdirs' keys" $ do
let contents :: ByteString
contents =
S8.pack
(unlines
[ "github: oink/town"
, "commit: abc123"
, "subdirs:"
, " - foo"
])
let expected :: RawPackageLocationImmutable
expected =
RPLIArchive
RawArchive
{ raLocation = ALUrl "https://github.com/oink/town/archive/abc123.tar.gz"
, raHash = Nothing
, raSize = Nothing
, raSubdir = "foo"
}
RawPackageMetadata
{ rpmName = Nothing
, rpmVersion = Nothing
, rpmTreeKey = Nothing
}
actual <- decode'' contents
actual `shouldBe` pure expected
it "does not parse GitHub repo with no slash" $ do
let contents :: ByteString
contents =
S8.pack
(unlines
[ "github: oink"
, "commit: abc123"
])
void (decode' contents) `shouldBe` Nothing
it "does not parse GitHub repo with leading slash" $ do
let contents :: ByteString
contents =
S8.pack
(unlines
[ "github: /oink"
, "commit: abc123"
])
void (decode' contents) `shouldBe` Nothing
it "does not parse GitHub repo with trailing slash" $ do
let contents :: ByteString
contents =
S8.pack
(unlines
[ "github: oink/"
, "commit: abc123"
])
void (decode' contents) `shouldBe` Nothing
it "does not parse GitHub repo with more than one slash" $ do
let contents :: ByteString
contents =
S8.pack
(unlines
[ "github: oink/town/here"
, "commit: abc123"
])
void (decode' contents) `shouldBe` Nothing
|