Complete tasks 3-7: harden verdict parsing, outputs retention, base branch, linux schedule parity, claim loop task
CI / build (push) Has been cancelled
CI / build (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
"""Tests for task fix-install-update-flow.
|
||||
|
||||
Covers R1-R8 from tasks/fix-install-update-flow/SPEC.md: git URL argument,
|
||||
venv cwd fix, Windows venv path, hook copy-vs-symlink, version check.
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
_FRAMEWORK = Path.home() / ".automaton"
|
||||
_INSTALL_SH = _FRAMEWORK / "scripts" / "install.sh"
|
||||
_UPDATE_SH = _FRAMEWORK / "scripts" / "update.sh"
|
||||
_UPGRADE_SH = _FRAMEWORK / "scripts" / "upgrade.sh"
|
||||
_INSTALL_HOOKS_SH = _FRAMEWORK / "scripts" / "install-hooks.sh"
|
||||
|
||||
|
||||
class TestInstallShGitUrl:
|
||||
def test_install_sh_requires_git_url(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "GIT_URL" in content
|
||||
assert '${1:-}' in content or '"${1:-}"' in content
|
||||
|
||||
def test_install_sh_no_hardcoded_url(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "10.37.0.86" not in content
|
||||
assert "hermes/automaton" not in content
|
||||
|
||||
def test_install_sh_has_usage_message(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "Usage:" in content
|
||||
assert "git-url" in content.lower() or "git url" in content.lower()
|
||||
|
||||
def test_install_sh_has_irreversibility_warning(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "cannot be changed" in content or "carefully" in content
|
||||
|
||||
|
||||
class TestInstallShVenv:
|
||||
def test_install_sh_venv_in_framework_dir(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "$FRAMEWORK_DIR/.venv" in content or '"$FRAMEWORK_DIR/.venv"' in content
|
||||
assert 'requirements.txt' in content
|
||||
assert "$FRAMEWORK_DIR/requirements.txt" in content
|
||||
|
||||
def test_install_sh_windows_venv_path(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "Scripts/python.exe" in content
|
||||
assert "VENV_PY" in content
|
||||
|
||||
def test_install_sh_uses_m_pip(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "-m pip" in content
|
||||
|
||||
def test_install_sh_no_relative_venv(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
lines = content.splitlines()
|
||||
for line in lines:
|
||||
stripped = line.strip()
|
||||
if stripped.startswith(".venv/bin/pip"):
|
||||
pytest.fail("install.sh still has relative .venv/bin/pip path")
|
||||
if 'venv .venv' in stripped and "FRAMEWORK_DIR" not in stripped:
|
||||
pytest.fail("install.sh creates .venv without FRAMEWORK_DIR")
|
||||
|
||||
|
||||
class TestInstallShVersionCheck:
|
||||
def test_install_sh_has_version_check(self):
|
||||
content = _INSTALL_SH.read_text()
|
||||
assert "--version" in content
|
||||
assert "status.py" in content
|
||||
|
||||
|
||||
class TestHookConsistency:
|
||||
def test_update_sh_uses_cp_for_hooks(self):
|
||||
content = _UPDATE_SH.read_text()
|
||||
assert "cp " in content or 'cp "' in content
|
||||
assert 'ln -sf' not in content
|
||||
|
||||
def test_upgrade_sh_uses_cp_for_hooks(self):
|
||||
content = _UPGRADE_SH.read_text()
|
||||
assert "cp " in content or 'cp "' in content
|
||||
assert 'ln -sf' not in content
|
||||
|
||||
def test_install_hooks_sh_uses_cp(self):
|
||||
content = _INSTALL_HOOKS_SH.read_text()
|
||||
assert "cp " in content or 'cp "' in content
|
||||
|
||||
def test_update_sh_has_chmod(self):
|
||||
content = _UPDATE_SH.read_text()
|
||||
assert "chmod +x" in content
|
||||
|
||||
def test_upgrade_sh_has_chmod(self):
|
||||
content = _UPGRADE_SH.read_text()
|
||||
assert "chmod +x" in content
|
||||
|
||||
def test_upgrade_sh_no_symlink_check(self):
|
||||
content = _UPGRADE_SH.read_text()
|
||||
assert "readlink" not in content
|
||||
assert "-L " not in content or "-L\"" not in content
|
||||
Reference in New Issue
Block a user