Unify workspace creation and add minimal-mode contract tests
This commit is contained in:
53
backend/tests/test_user_workspace_manager.py
Normal file
53
backend/tests/test_user_workspace_manager.py
Normal 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"]))
|
||||
Reference in New Issue
Block a user