@@ -4,6 +4,7 @@ module Pnpm.PnpmLockSpec (
4
4
spec ,
5
5
) where
6
6
7
+ import Data.Either (fromRight )
7
8
import Data.Set qualified as Set
8
9
import Data.String.Conversion (toString )
9
10
import Data.Text (Text )
@@ -30,26 +31,40 @@ import Test.Hspec (
30
31
it ,
31
32
runIO ,
32
33
)
34
+ import Test.Hspec.Core.QuickCheck (shouldSatisfy )
35
+ import Test.Hspec.Expectations (shouldMatchList )
36
+
37
+ -- | A dependency value used as a default in case of parsing errors in tests
38
+ invalidDependency :: Dependency
39
+ invalidDependency =
40
+ Dependency
41
+ NodeJSType
42
+ " INVALID_PACKAGE_NAME"
43
+ Nothing
44
+ mempty
45
+ mempty
46
+ mempty
33
47
34
48
mkProdDep :: Text -> Dependency
35
- mkProdDep nameAtVersion = mkDep nameAtVersion (Just EnvProduction )
49
+ mkProdDep nameAtVersion = fromRight invalidDependency $ mkDep nameAtVersion (Just EnvProduction )
36
50
37
51
mkDevDep :: Text -> Dependency
38
- mkDevDep nameAtVersion = mkDep nameAtVersion (Just EnvDevelopment )
52
+ mkDevDep nameAtVersion = fromRight invalidDependency $ mkDep nameAtVersion (Just EnvDevelopment )
39
53
40
- mkDep :: Text -> Maybe DepEnvironment -> Dependency
54
+ mkDep :: Text -> Maybe DepEnvironment -> Either String Dependency
41
55
mkDep nameAtVersion env = do
42
56
let nameAndVersionSplit = Text. splitOn " @" nameAtVersion
43
57
case nameAndVersionSplit of
44
58
[name, version] ->
45
- Dependency
46
- NodeJSType
47
- name
48
- (CEq <$> (Just version))
49
- mempty
50
- (maybe mempty Set. singleton env)
51
- mempty
52
- _ -> error $ " Invalid package name format: " ++ toString nameAtVersion
59
+ Right $
60
+ Dependency
61
+ NodeJSType
62
+ name
63
+ (CEq <$> (Just version))
64
+ mempty
65
+ (maybe mempty Set. singleton env)
66
+ mempty
67
+ _ -> Left $ " Invalid package name format: " ++ toString nameAtVersion
53
68
54
69
colors :: Dependency
55
70
colors =
@@ -113,6 +128,21 @@ spec = do
113
128
describe " can work with v9.0 format" $ do
114
129
checkGraph pnpmLockV9 pnpmLockV9GraphSpec
115
130
131
+ describe " parsePnpmLock" $ do
132
+ it " parses v6 lockfile" $ do
133
+ lockfile <- readFileBS " test/Pnpm/fixtures/pnpm-lock-v6.yaml"
134
+ let result = parsePnpmLock lockfile
135
+ result `shouldSatisfy` isRight
136
+ let Right deps = result
137
+ deps
`shouldMatchList` [colors, mkDevDep
" [email protected] " , mkDevDep
" [email protected] " ]
138
+
139
+ it " parses v9 lockfile" $ do
140
+ lockfile <- readFileBS " test/Pnpm/fixtures/pnpm-lock-v9.yaml"
141
+ let result = parsePnpmLock lockfile
142
+ result `shouldSatisfy` isRight
143
+ let Right deps = result
144
+ deps
`shouldMatchList` [colors, mkDevDep
" [email protected] " , mkDevDep
" [email protected] " ]
145
+
116
146
pnpmLockGraphSpec :: Graphing Dependency -> Spec
117
147
pnpmLockGraphSpec graph = do
118
148
let hasEdge :: Dependency -> Dependency -> IO ()
@@ -403,3 +433,11 @@ pnpmLockV9GraphSpec graph = do
403
433
, mkProdDep
" @npmcli/[email protected] "
404
434
]
405
435
graph
436
+
437
+ it " should include Babel plugin dependencies" $ do
438
+ -- Test a few representative Babel plugin dependencies
439
+ hasEdge (mkProdDep
" @babel/[email protected] " ) (mkProdDep
" @babel/core@^7.0.0" )
440
+ hasEdge (mkProdDep
" @babel/[email protected] " ) (mkProdDep
" @babel/core@^7.0.0" )
441
+ hasEdge (mkProdDep
" @babel/[email protected] " ) (mkProdDep
" @babel/core@^7.0.0" )
442
+ hasEdge (mkProdDep
" @babel/[email protected] " ) (mkProdDep
" @babel/types@*" )
443
+ hasEdge (mkProdDep
" @babel/[email protected] " ) (mkProdDep
" @babel/types@*" )
0 commit comments