Ctrl K
ComunidadGuías…

scripts/__tests__/test_check_uv_lock_export_drift.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""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