ArchiveBox/archivebox/tests/test_setup_script.py
2026-08-31 22:37:05 -07:00

45 lines
2.1 KiB
Python

import subprocess
from pathlib import Path
SETUP_SCRIPT = Path(__file__).parents[2] / "bin" / "setup.sh"
def test_setup_script_initializes_then_links_container_dependencies():
script = SETUP_SCRIPT.read_text()
compose_flow = script.partition('if [ "$DOCKER_IMAGE_READY" = "true" ] && "$DOCKER_BINARY" compose version')[2].partition(
'elif [ "$DOCKER_IMAGE_READY" = "true" ]',
)[0]
docker_flow = script.partition('elif [ "$DOCKER_IMAGE_READY" = "true" ]')[2].partition("\nfi")[0]
docker_init = script.partition("docker_run_archivebox_init() {")[2].partition("\n}")[0]
# Docker images already contain every runtime dependency. Initialization
# must only create collection state; the following install command merely
# projects the preloaded image cache into that collection.
assert "docker_run_archivebox init" in docker_init
assert "--install" not in docker_init
assert compose_flow.index("docker_compose_run_archivebox init") < compose_flow.index("docker_compose_run_archivebox install")
assert docker_flow.index("docker_run_archivebox_init") < docker_flow.index("docker_run_archivebox_install")
assert "init --install" not in script
def test_setup_script_keeps_uv_as_the_native_fallback():
script = SETUP_SCRIPT.read_text()
native_flow = script.partition("install_archivebox_with_uv\n")[2]
assert 'ARCHIVEBOX_PYTHON="${ARCHIVEBOX_PYTHON:-3.13}"' in script
assert 'ARCHIVEBOX_PACKAGE="${ARCHIVEBOX_PACKAGE:-archivebox>=0.9.0rc0,<0.10}"' in script
assert (
'run_as_archivebox_user "$UV_BINARY" --no-config tool install --python "$ARCHIVEBOX_PYTHON" '
'--prerelease explicit --upgrade "$ARCHIVEBOX_PACKAGE"'
) in script
assert "https://astral.sh/uv/install.sh" in script
assert ': | "$ARCHIVEBOX_BINARY" init' in native_flow
assert native_flow.index(': | "$ARCHIVEBOX_BINARY" init') < native_flow.index('"$ARCHIVEBOX_BINARY" install')
def test_setup_script_has_valid_bash_syntax():
result = subprocess.run(["bash", "-n", SETUP_SCRIPT], capture_output=True, text=True, timeout=10)
assert result.returncode == 0, result.stderr