Migrate stale sidecar and private uv tests to PM's current interface

This commit is contained in:
ethernet
2026-09-12 19:07:01 -04:00
parent d190198c77
commit 1662c78702
2 changed files with 31 additions and 7 deletions

View File

@@ -9,8 +9,9 @@ import sys
import pytest
import pm
import pm.workspace as ws
from pm.package import InstallError
from pm.package import InstallError, Runner
@pytest.fixture
@@ -87,14 +88,35 @@ def test_node_sidecar_retains_output_and_exit_status(
diagnostic = "🔍 node-gyp: build toolchain unavailable"
raw = diagnostic.encode("utf-8") + b"\xff\n"
completed = []
npm_dir = tmp_path / "pm-bin"
npm_dir.mkdir()
npm = npm_dir / ("npm.cmd" if os.name == "nt" else "npm")
npm.write_text("process boundary fixture", encoding="utf-8")
npm.chmod(0o755)
context = Runner("npm", dict(os.environ, PATH=str(npm_dir)))
acquisitions = []
def acquire(name, **kwargs):
acquisitions.append((name, kwargs))
return context
def run_npm(cmd, **kwargs):
assert cmd == [str(npm), install_cmd, "--no-audit", "--no-fund"]
assert kwargs["env"] == context.env
assert kwargs["cwd"] == str(tmp_path)
# Keep the real Runner and decoding path; only replace npm's process
# with a Python child that emits controlled bytes and an exit status.
result = legacy_locale_child(**{stream: raw}, returncode=returncode, **kwargs)
completed.append(result)
return result
error = ws.install_node_sidecar(tmp_path, npm_bin=sys.executable, runner=run_npm)
monkeypatch.setattr(pm, "ensure", acquire)
monkeypatch.setattr("pm.package.subprocess.run", run_npm)
error = ws.install_node_sidecar(tmp_path)
assert acquisitions == [("npm", {"explicit": False})]
assert len(completed) == 1
assert completed[0].returncode == returncode
expected = diagnostic + "<EFBFBD>"
if returncode:
assert error == f"npm {install_cmd} exited {returncode}: {expected}"

View File

@@ -174,9 +174,8 @@ def test_bionic_verify_is_file_evidence(tmp_path: Path, monkeypatch, name):
def test_bionic_binary_and_env_contract(tmp_path: Path):
"""On bionic, _BionicDebArm.binary() must return the staged deb's main
binary path (file evidence, no exec), so the base Package.env contract
exposes the tool through PATH like every other pm package."""
"""Bionic binaries retain their staged paths, but only on_path packages
expose them in the environment; internal uv stays private to PM."""
from pm.registry import get_package
for name in ("uv", "python", "node"):
@@ -190,9 +189,12 @@ def test_bionic_binary_and_env_contract(tmp_path: Path):
assert binary == main, f"{name}.binary() on bionic: {binary}"
env = pkg.env(entry, "linux-arm64-bionic")
assert env.get("PATH") == [str(main.parent)], (
f"{name}.env() on bionic does not follow the Package.env PATH contract"
expected_path = [str(main.parent)] if pkg.on_path else None
assert env.get("PATH") == expected_path, (
f"{name}.env() on bionic does not follow its on_path declaration"
)
if pkg.internal:
assert "PATH" not in env, f"internal {name} must not leak into public PATH"
def test_stage_only_does_not_record_host_facts(tmp_path, monkeypatch):