Phase 1: ProjectEngine + PyEnvManager + project management WebUI
- New: services/project_engine.py (async subprocess manager) - New: services/pyenv_manager.py (Python version + venv + git clone) - New: services/web_panel/routes/projects.py (5 REST endpoints) - New: static/web_panel/pages/projects.html (WebUI) - Tests: 28/28 passing, API verified (GET /api/projects) - Docs: Phase1_Progress.md (local)
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import pytest, asyncio, os, sys, time
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
|
||||
|
||||
class TestProjectEngine:
|
||||
@pytest.fixture
|
||||
def engine(self):
|
||||
from services.project_engine import ProjectEngine
|
||||
return ProjectEngine()
|
||||
|
||||
def test_list_empty(self, engine):
|
||||
assert engine.list_projects() == []
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_run_stop_project(self, engine):
|
||||
ok = await engine.run_project("test_sleep", ["sleep", "10"], cwd=".")
|
||||
assert ok is True
|
||||
assert "test_sleep" in engine.projects
|
||||
assert engine.projects["test_sleep"].status == "running"
|
||||
# Stop
|
||||
ok2 = await engine.stop_project("test_sleep")
|
||||
assert ok2 is True
|
||||
|
||||
def test_get_logs(self, engine):
|
||||
engine.projects["dummy"] = type("obj",(),{"log_buffer":["line1","line2","line3"]})()
|
||||
logs = engine.get_logs("dummy", tail=2)
|
||||
assert len(logs) == 2
|
||||
|
||||
class TestPyEnvManager:
|
||||
def test_detect_versions(self):
|
||||
from services.pyenv_manager import PyEnvManager
|
||||
mgr = PyEnvManager("~/test_pyenv_tmp")
|
||||
versions = mgr.detect_versions()
|
||||
assert len(versions) >= 1
|
||||
assert any(v.startswith("3.") for v in versions)
|
||||
|
||||
def test_venv_creation(self):
|
||||
from services.pyenv_manager import PyEnvManager
|
||||
import tempfile, shutil
|
||||
tmp = tempfile.mkdtemp()
|
||||
try:
|
||||
mgr = PyEnvManager(tmp)
|
||||
venv = mgr.create_venv("test_venv")
|
||||
assert venv is not None
|
||||
assert (venv / "bin" / "python").exists() or (venv / "bin" / "python3").exists()
|
||||
finally:
|
||||
shutil.rmtree(tmp, ignore_errors=True)
|
||||
Reference in New Issue
Block a user