60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import zipfile
|
|
from pathlib import Path
|
|
|
|
|
|
def test_built_wheel_installs_vector_migrations_and_discovers_cli(tmp_path):
|
|
harness = Path(__file__).parents[1]
|
|
wheelhouse = tmp_path / "wheelhouse"
|
|
target = tmp_path / "site"
|
|
wheelhouse.mkdir()
|
|
uv = shutil.which("uv")
|
|
assert uv is not None, "uv is required to verify the production wheel"
|
|
build_env = {**os.environ, "UV_CACHE_DIR": str(tmp_path / "uv-cache")}
|
|
subprocess.run(
|
|
[
|
|
uv,
|
|
"build",
|
|
"--wheel",
|
|
"--out-dir",
|
|
str(wheelhouse),
|
|
str(harness),
|
|
],
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
env=build_env,
|
|
)
|
|
wheel = next(wheelhouse.glob("tht-*.whl"))
|
|
with zipfile.ZipFile(wheel) as archive:
|
|
names = set(archive.namelist())
|
|
assert "tht/migrations/vector/001_extensions.sql" in names
|
|
assert "tht/migrations/vector/003_roles.sql" in names
|
|
|
|
subprocess.run(
|
|
[sys.executable, "-m", "pip", "install", "--no-deps", "--target", str(target), wheel],
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
env = {**os.environ, "PYTHONPATH": str(target)}
|
|
probe = subprocess.run(
|
|
[
|
|
sys.executable,
|
|
"-c",
|
|
"from typer.testing import CliRunner; from tht.cli import app; "
|
|
"r=CliRunner().invoke(app, ['vector','migrate','--help']); "
|
|
"print(r.output); raise SystemExit(r.exit_code)",
|
|
],
|
|
env=env,
|
|
check=False,
|
|
capture_output=True,
|
|
text=True,
|
|
cwd=tmp_path,
|
|
)
|
|
assert probe.returncode == 0, probe.stderr + probe.stdout
|
|
assert "--status" in probe.stdout
|