Unify workspace creation and add minimal-mode contract tests

This commit is contained in:
ي
2026-05-18 14:35:58 +05:30
parent 928c2f20aa
commit 882a62fa98
2 changed files with 76 additions and 35 deletions

View File

@@ -0,0 +1,53 @@
from pathlib import Path
from services.user_workspace_manager import UserWorkspaceManager
def _configure_temp_workspace(monkeypatch, tmp_path):
workspace_root = tmp_path / "workspace"
monkeypatch.setattr("services.database.WORKSPACE_DIR", str(workspace_root))
monkeypatch.setattr("services.workspace_dirs.WORKSPACE_DIR", str(workspace_root))
monkeypatch.setattr("services.user_workspace_manager.WORKSPACE_DIR", str(workspace_root))
monkeypatch.setattr("services.user_workspace_manager.init_user_database", lambda user_id: None)
return workspace_root
def _assert_required_contract(user_dir: Path):
assert user_dir.exists()
assert (user_dir / "db").exists()
assert (user_dir / "assets").exists()
assert (user_dir / "media").exists()
assert (user_dir / "content").exists()
assert (user_dir / "config" / "user_config.json").exists()
def test_create_user_workspace_development_contract(monkeypatch, tmp_path):
workspace_root = _configure_temp_workspace(monkeypatch, tmp_path)
monkeypatch.delenv("RENDER", raising=False)
monkeypatch.delenv("RAILWAY", raising=False)
monkeypatch.delenv("HEROKU", raising=False)
monkeypatch.delenv("ALWRITY_FILESYSTEM_MINIMAL_MODE", raising=False)
manager = UserWorkspaceManager(db_session=None)
result = manager.create_user_workspace("dev-user")
expected = workspace_root / "workspace_dev-user"
_assert_required_contract(expected)
assert result["workspace_path"] == str(expected)
assert result["mode"] == "development"
assert {"db", "assets", "media", "content", "config/user_config.json"}.issubset(set(result["dirs_created"]))
def test_create_user_workspace_production_filesystem_minimal_contract(monkeypatch, tmp_path):
workspace_root = _configure_temp_workspace(monkeypatch, tmp_path)
monkeypatch.setenv("RENDER", "1")
monkeypatch.setenv("ALWRITY_FILESYSTEM_MINIMAL_MODE", "1")
manager = UserWorkspaceManager(db_session=None)
result = manager.create_user_workspace("prod-user")
expected = workspace_root / "workspace_prod-user"
_assert_required_contract(expected)
assert result["workspace_path"] == str(expected)
assert result["mode"] == "filesystem_minimal"
assert {"db", "assets", "media", "content", "config/user_config.json"}.issubset(set(result["dirs_created"]))