@@ -853,6 +853,101 @@ def test_provider_direct_min_version_revalidates_old_install_and_upgrades(
853853 min_release_age = 3 ,
854854 ).update ("zx" , min_version = SemVer ("999.0.0" ))
855855
856+ def test_literal_version_override_cannot_replace_installed_package_version (
857+ self ,
858+ test_machine ,
859+ ):
860+ test_machine .require_tool ("node" )
861+ with tempfile .TemporaryDirectory () as tmpdir :
862+ install_root = Path (tmpdir ) / "pnpm"
863+ provider = PnpmProvider (
864+ install_root = install_root ,
865+ postinstall_scripts = True ,
866+ min_release_age = 0 ,
867+ ).get_provider_with_overrides (
868+ overrides = {
869+ "zx" : {
870+ "install_args" : ["zx@7.2.3" ],
871+ "version" : "999.0.0" ,
872+ },
873+ },
874+ )
875+
876+ installed = provider .install ("zx" , min_version = SemVer ("1.0.0" ))
877+
878+ assert installed is not None
879+ package_json = install_root / "node_modules" / "zx" / "package.json"
880+ assert package_json .exists ()
881+ import json as _json
882+
883+ observed_version = _json .loads (package_json .read_text ())["version" ]
884+ assert installed .loaded_version == SemVer ("7.2.3" )
885+ assert observed_version == "7.2.3"
886+ assert str (installed .loaded_version ) != "999.0.0"
887+
888+ def test_global_cache_compares_installed_package_version (self , tmp_path ):
889+ global_root = tmp_path / "global"
890+ package_dir = global_root / ".pnpm" / "zx@7.2.3" / "node_modules" / "zx"
891+ executable = package_dir / "build" / "cli.js"
892+ executable .parent .mkdir (parents = True )
893+ executable .write_text ("#!/usr/bin/env node\n " )
894+ executable .chmod (0o755 )
895+ (executable .parent / "package.json" ).write_text (
896+ '{"name": "not-zx", "version": "999.0.0"}' ,
897+ )
898+ (package_dir / "package.json" ).write_text (
899+ '{"name": "zx", "version": "7.2.3"}' ,
900+ )
901+ launcher = global_root / "bin" / "zx"
902+ launcher .parent .mkdir ()
903+ launcher .write_text (
904+ '#!/bin/sh\n exec node "$basedir/../.pnpm/zx@7.2.3/node_modules/zx/build/cli.js" "$@"\n ' ,
905+ )
906+ launcher .chmod (0o755 )
907+ provider = PnpmProvider (install_root = None )
908+
909+ assert provider .host_projection_target (launcher ) == executable
910+
911+ assert provider .cached_binary_state_mismatch (
912+ "zx" ,
913+ {"abspath" : str (launcher ), "loaded_version" : "999.0.0" },
914+ )
915+ assert not provider .cached_binary_state_mismatch (
916+ "zx" ,
917+ {"abspath" : str (launcher ), "loaded_version" : "7.2.3" },
918+ )
919+
920+ def test_global_cache_rejects_executable_without_owned_package (self , tmp_path ):
921+ global_root = tmp_path / "global"
922+ executable = (
923+ global_root
924+ / ".pnpm"
925+ / "not-zx@7.2.3"
926+ / "node_modules"
927+ / "not-zx"
928+ / "build"
929+ / "cli.js"
930+ )
931+ executable .parent .mkdir (parents = True )
932+ executable .write_text ("#!/usr/bin/env node\n " )
933+ executable .chmod (0o755 )
934+ (executable .parent .parent / "package.json" ).write_text (
935+ '{"name": "not-zx", "version": "7.2.3"}' ,
936+ )
937+ launcher = global_root / "bin" / "zx"
938+ launcher .parent .mkdir ()
939+ launcher .write_text (
940+ '#!/bin/sh\n exec node "$basedir/../.pnpm/not-zx@7.2.3/node_modules/not-zx/build/cli.js" "$@"\n ' ,
941+ )
942+ launcher .chmod (0o755 )
943+ provider = PnpmProvider (install_root = None )
944+
945+ assert provider .host_projection_target (launcher ) == executable
946+ assert provider .cached_binary_state_mismatch (
947+ "zx" ,
948+ {"abspath" : str (launcher ), "loaded_version" : "7.2.3" },
949+ )
950+
856951 def test_provider_defaults_and_binary_overrides_enforce_min_release_age (
857952 self ,
858953 test_machine ,
0 commit comments