scripts/__tests__/test_check_uv_lock_export_drift.py
Rama main · réplica de lectura del repositorio original.
"""Tests for the frozen uv export integrity gate."""
from __future__ import annotations
import importlib.util
from pathlib import Path
_SCRIPT = Path(__file__).resolve().parents[1] / "check-uv-lock-export-drift.py"
_SPEC = importlib.util.spec_from_file_location("check_uv_lock_export_drift", _SCRIPT)
assert _SPEC is not None and _SPEC.loader is not None
checker = importlib.util.module_from_spec(_SPEC)
_SPEC.loader.exec_module(checker)
def _write_locks(tmp_path: Path, requirements: str) -> tuple[Path, Path]:
uv_lock = tmp_path / "uv.lock"
requirements_lock = tmp_path / "requirements.lock"
uv_lock.write_text("version = 1\n", encoding="utf-8")
requirements_lock.write_text(requirements, encoding="utf-8")
return uv_lock, requirements_lock
def test_matching_frozen_export_passes(tmp_path: Path, monkeypatch, capsys) -> None:
actual = (
"# This file was autogenerated by uv via the following command:\n"
"# uv export --output-file requirements.lock\n"
"example==1.0 --hash=sha256:abc\n"
)
exported = (
"# This file was autogenerated by uv via the following command:\n"
"# uv export\n"
"example==1.0 --hash=sha256:abc\n"
)
uv_lock, requirements_lock = _write_locks(tmp_path, actual)
monkeypatch.setattr(checker, "UV_LOCK", uv_lock)
monkeypatch.setattr(checker, "REQUIREMENTS_LOCK", requirements_lock)
monkeypatch.setattr(checker, "_export_requirements", lambda: exported)
assert checker.main() == 0
assert capsys.readouterr().out == ""
def test_dependency_drift_fails(tmp_path: Path, monkeypatch, capsys) -> None:
uv_lock, requirements_lock = _write_locks(tmp_path, "example==1.0\n")
monkeypatch.setattr(checker, "UV_LOCK", uv_lock)
monkeypatch.setattr(checker, "REQUIREMENTS_LOCK", requirements_lock)
monkeypatch.setattr(checker, "_export_requirements", lambda: "example==2.0\n")
assert checker.main() == 1
output = capsys.readouterr().out
assert "does not match" in output
assert "uv export" in output
def test_missing_lock_fails_without_export(tmp_path: Path, monkeypatch, capsys) -> None:
export_called = False
def export() -> str:
nonlocal export_called
export_called = True
return ""
monkeypatch.setattr(checker, "UV_LOCK", tmp_path / "uv.lock")
monkeypatch.setattr(checker, "REQUIREMENTS_LOCK", tmp_path / "requirements.lock")
monkeypatch.setattr(checker, "_export_requirements", export)
assert checker.main() == 1
assert export_called is False
assert "missing lockfile" in capsys.readouterr().out
def test_export_failure_fails_closed(tmp_path: Path, monkeypatch, capsys) -> None:
uv_lock, requirements_lock = _write_locks(tmp_path, "example==1.0\n")
monkeypatch.setattr(checker, "UV_LOCK", uv_lock)
monkeypatch.setattr(checker, "REQUIREMENTS_LOCK", requirements_lock)
def fail() -> str:
raise checker.ExportError("uv export failed")
monkeypatch.setattr(checker, "_export_requirements", fail)
assert checker.main() == 1
assert "uv export failed" in capsys.readouterr().out