@@ -30,23 +30,31 @@ def test_engines_deno(self) -> None:
3030
3131 def test_package_manager_pnpm (self ) -> None :
3232 pkg = {"packageManager" : "pnpm@8.15.4" }
33- assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "pnpm" )
33+ assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "pnpm" , pm_version = "8.15.4" )
3434
3535 def test_package_manager_bun (self ) -> None :
3636 pkg = {"packageManager" : "bun@1.1.0" }
37- assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "bun" )
37+ assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "bun" , pm_version = "1.1.0" )
3838
3939 def test_package_manager_npm (self ) -> None :
4040 pkg = {"packageManager" : "npm@10.2.4" }
41- assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "npm" )
41+ assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "npm" , pm_version = "10.2.4" )
4242
4343 def test_package_manager_yarn_classic (self ) -> None :
4444 pkg = {"packageManager" : "yarn@1.22.22" }
45- assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "yarn-classic" )
45+ assert detect_from_package_json (pkg ) == DetectedToolchain (
46+ pm = "yarn-classic" , pm_version = "1.22.22"
47+ )
4648
4749 def test_package_manager_yarn_berry (self ) -> None :
4850 pkg = {"packageManager" : "yarn@4.0.0" }
49- assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "yarn-berry" )
51+ assert detect_from_package_json (pkg ) == DetectedToolchain (
52+ pm = "yarn-berry" , pm_version = "4.0.0"
53+ )
54+
55+ def test_package_manager_without_version_omits_pm_version (self ) -> None :
56+ pkg = {"packageManager" : "pnpm" }
57+ assert detect_from_package_json (pkg ) == DetectedToolchain (pm = "pnpm" , pm_version = None )
5058
5159 def test_ignores_unknown_package_manager (self ) -> None :
5260 pkg = {"packageManager" : "unknown@1.0" }
@@ -60,7 +68,7 @@ def test_engines_bun_overrides_package_manager(self) -> None:
6068 def test_engines_node_plus_package_manager_pnpm (self ) -> None :
6169 pkg = {"engines" : {"node" : ">=18" }, "packageManager" : "pnpm@8" }
6270 result = detect_from_package_json (pkg )
63- assert result == DetectedToolchain (runtime = "node" , pm = "pnpm" )
71+ assert result == DetectedToolchain (runtime = "node" , pm = "pnpm" , pm_version = "8" )
6472
6573
6674class TestDetectFromLockfiles :
@@ -130,4 +138,12 @@ def test_yarn_berry_from_package_manager(self, tmp_path) -> None:
130138 pkg = json .dumps ({"packageManager" : "yarn@4.5.0" })
131139 (tmp_path / "package.json" ).write_text (pkg )
132140 (tmp_path / "yarn.lock" ).touch ()
133- assert detect (str (tmp_path )) == DetectedToolchain (pm = "yarn-berry" )
141+ assert detect (str (tmp_path )) == DetectedToolchain (pm = "yarn-berry" , pm_version = "4.5.0" )
142+
143+ def test_pm_version_propagates_through_detect (self , tmp_path ) -> None :
144+ pkg = json .dumps ({"packageManager" : "pnpm@10.33.0" })
145+ (tmp_path / "package.json" ).write_text (pkg )
146+ (tmp_path / "pnpm-lock.yaml" ).touch ()
147+ result = detect (str (tmp_path ))
148+ assert result .pm == "pnpm"
149+ assert result .pm_version == "10.33.0"
0 commit comments