Files
xiaoxia-saas/tests/unit/test_permissions.py
T
Xiaoxia AI b79d6718d6
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 21s
Deploy / Deploy Production (push) Has been cancelled
Deploy / Deploy Staging (push) Has been cancelled
style: normalize python formatting gates
2026-06-21 06:52:19 +08:00

204 lines
7.4 KiB
Python

"""
权限验证辅助函数测试
"""
from unittest.mock import Mock
import pytest
from packages.domain.entities import WorkspaceMember, WorkspaceMemberRole
from packages.domain.permissions import Permission, PermissionChecker, has_permission
class TestPermissionChecker:
"""权限检查器测试"""
@pytest.fixture
def mock_member_repo(self):
repo = Mock()
repo.find_by_workspace_and_user = Mock(return_value=None)
return repo
@pytest.fixture
def checker(self, mock_member_repo):
return PermissionChecker(workspace_member_repository=mock_member_repo)
def test_check_workspace_access_has_access(self, checker, mock_member_repo):
"""测试有访问权限"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.MEMBER,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
has_access, role = checker.check_workspace_access("workspace-123", "user-123")
assert has_access is True
assert role == "member"
def test_check_workspace_access_no_access(self, checker, mock_member_repo):
"""测试无访问权限"""
mock_member_repo.find_by_workspace_and_user.return_value = None
has_access, role = checker.check_workspace_access("workspace-123", "user-123")
assert has_access is False
assert role is None
def test_check_is_owner_true(self, checker, mock_member_repo):
"""测试是 Owner"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.OWNER,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
is_owner = checker.check_is_owner("workspace-123", "user-123")
assert is_owner is True
def test_check_is_owner_false(self, checker, mock_member_repo):
"""测试不是 Owner"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.ADMIN,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
is_owner = checker.check_is_owner("workspace-123", "user-123")
assert is_owner is False
def test_check_is_admin_or_owner_admin(self, checker, mock_member_repo):
"""测试是 Admin"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.ADMIN,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
is_admin_or_owner = checker.check_is_admin_or_owner("workspace-123", "user-123")
assert is_admin_or_owner is True
def test_check_is_admin_or_owner_owner(self, checker, mock_member_repo):
"""测试是 Owner"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.OWNER,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
is_admin_or_owner = checker.check_is_admin_or_owner("workspace-123", "user-123")
assert is_admin_or_owner is True
def test_check_is_admin_or_owner_member(self, checker, mock_member_repo):
"""测试是普通成员"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.MEMBER,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
is_admin_or_owner = checker.check_is_admin_or_owner("workspace-123", "user-123")
assert is_admin_or_owner is False
def test_check_can_create_project_member(self, checker, mock_member_repo):
"""测试 Member 可以创建项目"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.MEMBER,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
can_create = checker.check_can_create_project("workspace-123", "user-123")
assert can_create is True
def test_check_can_create_project_viewer(self, checker, mock_member_repo):
"""测试 Viewer 不能创建项目"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.VIEWER,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
can_create = checker.check_can_create_project("workspace-123", "user-123")
assert can_create is False
def test_check_can_delete_project_member(self, checker, mock_member_repo):
"""测试 Member 不能删除项目"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.MEMBER,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
can_delete = checker.check_can_delete_project("workspace-123", "user-123")
assert can_delete is False
def test_check_can_delete_project_admin(self, checker, mock_member_repo):
"""测试 Admin 可以删除项目"""
member = WorkspaceMember(
id="member-1",
workspace_id="workspace-123",
user_id="user-123",
role=WorkspaceMemberRole.ADMIN,
)
mock_member_repo.find_by_workspace_and_user.return_value = member
can_delete = checker.check_can_delete_project("workspace-123", "user-123")
assert can_delete is True
class TestPermissionFunctions:
"""权限函数测试"""
def test_has_permission_owner(self):
"""测试 Owner 权限"""
assert has_permission(WorkspaceMemberRole.OWNER, Permission.WORKSPACE_DELETE) is True
assert has_permission(WorkspaceMemberRole.OWNER, Permission.MEMBER_REMOVE) is True
assert has_permission(WorkspaceMemberRole.OWNER, Permission.PROJECT_CREATE) is True
def test_has_permission_admin(self):
"""测试 Admin 权限"""
assert has_permission(WorkspaceMemberRole.ADMIN, Permission.WORKSPACE_EDIT) is True
assert has_permission(WorkspaceMemberRole.ADMIN, Permission.MEMBER_REMOVE) is True
assert has_permission(WorkspaceMemberRole.ADMIN, Permission.WORKSPACE_DELETE) is False
def test_has_permission_member(self):
"""测试 Member 权限"""
assert has_permission(WorkspaceMemberRole.MEMBER, Permission.PROJECT_CREATE) is True
assert has_permission(WorkspaceMemberRole.MEMBER, Permission.PROJECT_DELETE) is False
assert has_permission(WorkspaceMemberRole.MEMBER, Permission.MEMBER_INVITE) is False
def test_has_permission_viewer(self):
"""测试 Viewer 权限"""
assert has_permission(WorkspaceMemberRole.VIEWER, Permission.WORKSPACE_VIEW) is True
assert has_permission(WorkspaceMemberRole.VIEWER, Permission.PROJECT_VIEW) is True
assert has_permission(WorkspaceMemberRole.VIEWER, Permission.PROJECT_CREATE) is False
assert has_permission(WorkspaceMemberRole.VIEWER, Permission.ASSET_UPLOAD) is False