@@ -67,9 +67,91 @@ def test_npm_packages(mock_get):
6767 mock_get .side_effect = side_effect
6868 packages = list (info (purl ))
6969
70+ mock_get .assert_called_once_with ("http://registry.npmjs.org/express" )
7071 check_packages (packages , expected_data )
7172
7273
74+ SCOPED_NPM_REGISTRY = {
75+ "name" : "@angular/core" ,
76+ "repository" : {"url" : "git+https://github.com/angular/angular.git" },
77+ "bugs" : {"url" : "https://github.com/angular/angular/issues" },
78+ "license" : "MIT" ,
79+ "homepage" : "https://angular.io" ,
80+ "versions" : {
81+ "1.0.0" : {
82+ "version" : "1.0.0" ,
83+ "repository" : {"type" : "git" , "url" : "git+https://github.com/angular/angular.git" },
84+ "dist" : {"tarball" : "https://registry.npmjs.org/@angular/core/-/core-1.0.0.tgz" },
85+ },
86+ "1.0.1" : {
87+ "version" : "1.0.1" ,
88+ "repository" : {"type" : "git" , "url" : "git+https://github.com/angular/angular.git" },
89+ "dist" : {"tarball" : "https://registry.npmjs.org/@angular/core/-/core-1.0.1.tgz" },
90+ },
91+ },
92+ }
93+
94+
95+ @mock .patch ("fetchcode.package.get_response" )
96+ def test_npm_scoped_packages (mock_get ):
97+ mock_get .return_value = SCOPED_NPM_REGISTRY
98+ packages = list (info ("pkg:npm/%40angular/core" ))
99+
100+ mock_get .assert_called_once_with ("http://registry.npmjs.org/@angular/core" )
101+ assert [p .version for p in packages ] == ["1.0.0" , "1.0.1" ]
102+ assert all (p .namespace == "@angular" and p .name == "core" for p in packages )
103+ assert packages [0 ].purl == "pkg:npm/%40angular/core@1.0.0"
104+ assert packages [0 ].api_url == "http://registry.npmjs.org/@angular/core"
105+ assert packages [0 ].download_url == "https://registry.npmjs.org/@angular/core/-/core-1.0.0.tgz"
106+ assert packages [0 ].homepage_url == "https://angular.io"
107+ assert packages [0 ].bug_tracking_url == "https://github.com/angular/angular/issues"
108+ assert packages [0 ].vcs_url == "git+https://github.com/angular/angular.git"
109+ assert packages [0 ].declared_license == "MIT"
110+
111+
112+ @mock .patch ("fetchcode.package.get_response" )
113+ def test_npm_scoped_package_with_version (mock_get ):
114+ mock_get .return_value = SCOPED_NPM_REGISTRY
115+ packages = list (info ("pkg:npm/%40angular/core@1.0.1" ))
116+
117+ mock_get .assert_called_once_with ("http://registry.npmjs.org/@angular/core" )
118+ assert len (packages ) == 1
119+ package = packages [0 ]
120+ assert package .namespace == "@angular"
121+ assert package .name == "core"
122+ assert package .version == "1.0.1"
123+ assert package .purl == "pkg:npm/%40angular/core@1.0.1"
124+ assert package .download_url == "https://registry.npmjs.org/@angular/core/-/core-1.0.1.tgz"
125+
126+
127+ @mock .patch ("fetchcode.package.get_response" )
128+ def test_npm_string_repository_and_bugs (mock_get ):
129+ mock_get .return_value = {
130+ "name" : "@babel/core" ,
131+ "repository" : "https://github.com/babel/babel.git" ,
132+ "bugs" : "https://github.com/babel/babel/issues" ,
133+ "license" : "MIT" ,
134+ "homepage" : "https://babeljs.io" ,
135+ "versions" : {
136+ "7.0.0" : {
137+ "version" : "7.0.0" ,
138+ "repository" : "https://github.com/babel/babel.git" ,
139+ "bugs" : "https://github.com/babel/babel/issues" ,
140+ "dist" : {"tarball" : "https://registry.npmjs.org/@babel/core/-/core-7.0.0.tgz" },
141+ }
142+ },
143+ }
144+ packages = list (info ("pkg:npm/%40babel/core@7.0.0" ))
145+
146+ assert len (packages ) == 1
147+ package = packages [0 ]
148+ assert package .namespace == "@babel"
149+ assert package .name == "core"
150+ assert package .vcs_url == "https://github.com/babel/babel.git"
151+ assert package .bug_tracking_url == "https://github.com/babel/babel/issues"
152+ assert package .download_url == "https://registry.npmjs.org/@babel/core/-/core-7.0.0.tgz"
153+
154+
73155@mock .patch ("fetchcode.package.get_response" )
74156def test_pypi_packages (mock_get ):
75157 side_effect = [load_json ("tests/data/pypi_mock_data.json" )]
0 commit comments