Files
SenSu/tests/test_phase1.py
AskaEth 8dbf628dd6 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)
2026-06-10 20:41:24 +08:00

47 lines
1.6 KiB
Python

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)