74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
import fcntl
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import zipfile
|
|
from pathlib import Path
|
|
|
|
|
|
def test_repo_upgrade_refuses_concurrent_run(tmp_path):
|
|
script = Path(__file__).parents[1] / "deploy" / "repo-upgrade.sh"
|
|
lock_path = tmp_path / "repo-upgrade.lock"
|
|
bin_dir = tmp_path / "bin"
|
|
bin_dir.mkdir()
|
|
fake_id = bin_dir / "id"
|
|
fake_id.write_text("#!/bin/sh\nprintf '0\\n'\n")
|
|
fake_id.chmod(0o755)
|
|
|
|
with lock_path.open("w") as lock:
|
|
fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
|
result = subprocess.run(
|
|
["sh", str(script)],
|
|
env={
|
|
**os.environ,
|
|
"PATH": f"{bin_dir}:{os.environ['PATH']}",
|
|
"IMPORTARR_ENV_FILE": str(tmp_path / "missing.env"),
|
|
"IMPORTARR_PREFIX": str(tmp_path),
|
|
},
|
|
capture_output=True,
|
|
text=True,
|
|
check=False,
|
|
)
|
|
|
|
assert result.returncode == 1
|
|
assert "another Importarr upgrade is already running" in result.stderr
|
|
|
|
|
|
def test_wheel_contains_built_frontend_assets(tmp_path):
|
|
root = Path(__file__).parents[1]
|
|
subprocess.run(
|
|
[sys.executable, "-m", "pip", "wheel", "--no-deps", "--wheel-dir", str(tmp_path), str(root)],
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
|
|
wheel = next(tmp_path.glob("importarr-*.whl"))
|
|
with zipfile.ZipFile(wheel) as archive:
|
|
packaged = set(archive.namelist())
|
|
|
|
assert "importarr/static/index.html" in packaged
|
|
assert "importarr/static/assets/app.js" in packaged
|
|
assert "importarr/static/assets/app.css" in packaged
|
|
|
|
|
|
def test_repo_upgrade_forces_fresh_install_without_skipping_dependencies():
|
|
script = (Path(__file__).parents[1] / "deploy/repo-upgrade.sh").read_text()
|
|
|
|
assert "pip\" install --upgrade --force-reinstall --no-cache-dir" in script
|
|
assert "--no-deps" not in script
|
|
|
|
|
|
def test_repo_upgrade_deploys_only_origin_main():
|
|
script = (Path(__file__).parents[1] / "deploy/repo-upgrade.sh").read_text()
|
|
|
|
assert "git fetch --prune origin main" in script
|
|
assert "git checkout -B main origin/main" in script
|
|
assert "refs/tags" not in script
|
|
|
|
|
|
def test_repo_upgrade_removes_obsolete_update_command():
|
|
script = (Path(__file__).parents[1] / "deploy/repo-upgrade.sh").read_text()
|
|
|
|
assert "IMPORTARR_UPDATE_COMMAND=/d" in script
|