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)