"""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