179 lines
5.3 KiB
Python
179 lines
5.3 KiB
Python
"""
|
|
创建 Workspace Use Case 测试
|
|
"""
|
|
|
|
from unittest.mock import Mock
|
|
|
|
import pytest
|
|
|
|
from packages.application.workspace import (
|
|
CreateWorkspaceRequest,
|
|
CreateWorkspaceUseCase,
|
|
)
|
|
from packages.domain.entities import User
|
|
|
|
|
|
class TestCreateWorkspaceUseCase:
|
|
"""创建工作空间测试"""
|
|
|
|
@pytest.fixture
|
|
def mock_workspace_repo(self):
|
|
repo = Mock()
|
|
repo.save = Mock()
|
|
return repo
|
|
|
|
@pytest.fixture
|
|
def mock_member_repo(self):
|
|
repo = Mock()
|
|
repo.save = Mock()
|
|
return repo
|
|
|
|
@pytest.fixture
|
|
def mock_user_repo(self):
|
|
repo = Mock()
|
|
repo.find_by_id = Mock(return_value=None)
|
|
return repo
|
|
|
|
@pytest.fixture
|
|
def use_case(self, mock_workspace_repo, mock_member_repo, mock_user_repo):
|
|
return CreateWorkspaceUseCase(
|
|
workspace_repository=mock_workspace_repo,
|
|
workspace_member_repository=mock_member_repo,
|
|
user_repository=mock_user_repo,
|
|
)
|
|
|
|
@pytest.fixture
|
|
def test_user(self):
|
|
return User(
|
|
id="user-123",
|
|
email="test@example.com",
|
|
username="testuser",
|
|
display_name="Test User",
|
|
)
|
|
|
|
def test_create_workspace_success_free_plan(
|
|
self, use_case, mock_workspace_repo, mock_member_repo, mock_user_repo, test_user
|
|
):
|
|
"""测试创建免费工作空间"""
|
|
mock_user_repo.find_by_id.return_value = test_user
|
|
|
|
request = CreateWorkspaceRequest(
|
|
name="My Workspace",
|
|
owner_user_id="user-123",
|
|
subscription_plan="free",
|
|
)
|
|
|
|
response, error = use_case.execute(request)
|
|
|
|
assert error is None
|
|
assert response is not None
|
|
assert response.name == "My Workspace"
|
|
assert response.subscription_plan == "free"
|
|
assert response.max_projects == 3
|
|
assert response.max_storage_gb == 10
|
|
|
|
# 验证保存了 workspace
|
|
mock_workspace_repo.save.assert_called_once()
|
|
workspace = mock_workspace_repo.save.call_args[0][0]
|
|
assert workspace.name == "My Workspace"
|
|
assert workspace.owner_user_id == "user-123"
|
|
|
|
# 验证创建了 owner 成员
|
|
mock_member_repo.save.assert_called_once()
|
|
member = mock_member_repo.save.call_args[0][0]
|
|
assert member.user_id == "user-123"
|
|
assert member.role == "owner"
|
|
|
|
def test_create_workspace_pro_plan(
|
|
self, use_case, mock_workspace_repo, mock_member_repo, mock_user_repo, test_user
|
|
):
|
|
"""测试创建 Pro 工作空间"""
|
|
mock_user_repo.find_by_id.return_value = test_user
|
|
|
|
request = CreateWorkspaceRequest(
|
|
name="Pro Workspace",
|
|
owner_user_id="user-123",
|
|
subscription_plan="pro",
|
|
)
|
|
|
|
response, error = use_case.execute(request)
|
|
|
|
assert error is None
|
|
assert response is not None
|
|
assert response.subscription_plan == "pro"
|
|
assert response.max_projects == 999999 # unlimited
|
|
assert response.max_storage_gb == 100
|
|
|
|
def test_create_workspace_enterprise_plan(
|
|
self, use_case, mock_workspace_repo, mock_member_repo, mock_user_repo, test_user
|
|
):
|
|
"""测试创建 Enterprise 工作空间"""
|
|
mock_user_repo.find_by_id.return_value = test_user
|
|
|
|
request = CreateWorkspaceRequest(
|
|
name="Enterprise Workspace",
|
|
owner_user_id="user-123",
|
|
subscription_plan="enterprise",
|
|
)
|
|
|
|
response, error = use_case.execute(request)
|
|
|
|
assert error is None
|
|
assert response is not None
|
|
assert response.subscription_plan == "enterprise"
|
|
assert response.max_projects == 999999
|
|
assert response.max_storage_gb == 1000
|
|
|
|
def test_create_workspace_missing_name(self, use_case):
|
|
"""测试缺少名称"""
|
|
request = CreateWorkspaceRequest(
|
|
name="",
|
|
owner_user_id="user-123",
|
|
)
|
|
|
|
response, error = use_case.execute(request)
|
|
|
|
assert response is None
|
|
assert error == "Workspace name is required"
|
|
|
|
def test_create_workspace_name_too_long(self, use_case):
|
|
"""测试名称过长"""
|
|
request = CreateWorkspaceRequest(
|
|
name="A" * 101,
|
|
owner_user_id="user-123",
|
|
)
|
|
|
|
response, error = use_case.execute(request)
|
|
|
|
assert response is None
|
|
assert error == "Workspace name is too long (max 100 characters)"
|
|
|
|
def test_create_workspace_user_not_found(self, use_case, mock_user_repo):
|
|
"""测试用户不存在"""
|
|
mock_user_repo.find_by_id.return_value = None
|
|
|
|
request = CreateWorkspaceRequest(
|
|
name="My Workspace",
|
|
owner_user_id="nonexistent-user",
|
|
)
|
|
|
|
response, error = use_case.execute(request)
|
|
|
|
assert response is None
|
|
assert error == "Owner user not found"
|
|
|
|
def test_create_workspace_invalid_plan(self, use_case, mock_user_repo, test_user):
|
|
"""测试无效的订阅计划"""
|
|
mock_user_repo.find_by_id.return_value = test_user
|
|
|
|
request = CreateWorkspaceRequest(
|
|
name="My Workspace",
|
|
owner_user_id="user-123",
|
|
subscription_plan="invalid_plan",
|
|
)
|
|
|
|
response, error = use_case.execute(request)
|
|
|
|
assert response is None
|
|
assert "Invalid subscription plan" in error
|