132 lines
3.9 KiB
Python
132 lines
3.9 KiB
Python
"""Tests for web dependencies."""
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from app.domain.roles import Role
|
|
from app.presentation.web.deps import (
|
|
can_create_post,
|
|
can_delete_post,
|
|
can_edit_post,
|
|
can_see_draft,
|
|
get_user_role,
|
|
)
|
|
|
|
|
|
class TestGetUserRole:
|
|
"""Test get_user_role function."""
|
|
|
|
def test_none_returns_guest(self) -> None:
|
|
"""Test None user returns GUEST role."""
|
|
assert get_user_role(None) == Role.GUEST
|
|
|
|
def test_admin_roles(self) -> None:
|
|
"""Test admin role detection."""
|
|
user = MagicMock()
|
|
user.roles = ["admin"]
|
|
assert get_user_role(user) == Role.ADMIN
|
|
|
|
def test_user_roles(self) -> None:
|
|
"""Test user role detection."""
|
|
user = MagicMock()
|
|
user.roles = ["user"]
|
|
assert get_user_role(user) == Role.USER
|
|
|
|
def test_empty_roles_returns_guest(self) -> None:
|
|
"""Test empty roles list returns GUEST."""
|
|
user = MagicMock()
|
|
user.roles = []
|
|
assert get_user_role(user) == Role.GUEST
|
|
|
|
|
|
class TestCanCreatePost:
|
|
"""Test can_create_post function."""
|
|
|
|
def test_guest_cannot_create(self) -> None:
|
|
"""Test guest cannot create posts."""
|
|
assert can_create_post(None) is False
|
|
|
|
def test_user_can_create(self) -> None:
|
|
"""Test user can create posts."""
|
|
user = MagicMock()
|
|
user.roles = ["user"]
|
|
assert can_create_post(user) is True
|
|
|
|
def test_admin_can_create(self) -> None:
|
|
"""Test admin can create posts."""
|
|
user = MagicMock()
|
|
user.roles = ["admin"]
|
|
assert can_create_post(user) is True
|
|
|
|
|
|
class TestCanEditPost:
|
|
"""Test can_edit_post function."""
|
|
|
|
def test_guest_cannot_edit(self) -> None:
|
|
"""Test guest cannot edit any post."""
|
|
assert can_edit_post(None, "author-1") is False
|
|
|
|
def test_user_can_edit_own(self) -> None:
|
|
"""Test user can edit own post."""
|
|
user = MagicMock()
|
|
user.roles = ["user"]
|
|
user.user_id = "author-1"
|
|
assert can_edit_post(user, "author-1") is True
|
|
|
|
def test_user_cannot_edit_other(self) -> None:
|
|
"""Test user cannot edit other's post."""
|
|
user = MagicMock()
|
|
user.roles = ["user"]
|
|
user.user_id = "user-2"
|
|
assert can_edit_post(user, "author-1") is False
|
|
|
|
def test_admin_can_edit_any(self) -> None:
|
|
"""Test admin can edit any post."""
|
|
user = MagicMock()
|
|
user.roles = ["admin"]
|
|
user.user_id = "admin-1"
|
|
assert can_edit_post(user, "author-1") is True
|
|
|
|
|
|
class TestCanDeletePost:
|
|
"""Test can_delete_post function."""
|
|
|
|
def test_delegates_to_can_edit(self) -> None:
|
|
"""Test can_delete_post delegates to can_edit_post logic."""
|
|
user = MagicMock()
|
|
user.roles = ["user"]
|
|
user.user_id = "author-1"
|
|
assert can_delete_post(user, "author-1") is True
|
|
|
|
def test_guest_cannot_delete(self) -> None:
|
|
"""Test guest cannot delete posts."""
|
|
assert can_delete_post(None, "author-1") is False
|
|
|
|
|
|
class TestCanSeeDraft:
|
|
"""Test can_see_draft function."""
|
|
|
|
def test_guest_cannot_see(self) -> None:
|
|
"""Test guest cannot see drafts."""
|
|
assert can_see_draft(None, "author-1") is False
|
|
|
|
def test_user_can_see_own(self) -> None:
|
|
"""Test user can see own draft."""
|
|
user = MagicMock()
|
|
user.roles = ["user"]
|
|
user.user_id = "author-1"
|
|
assert can_see_draft(user, "author-1") is True
|
|
|
|
def test_user_cannot_see_other(self) -> None:
|
|
"""Test user cannot see other's draft."""
|
|
user = MagicMock()
|
|
user.roles = ["user"]
|
|
user.user_id = "user-2"
|
|
assert can_see_draft(user, "author-1") is False
|
|
|
|
def test_admin_can_see_any(self) -> None:
|
|
"""Test admin can see any draft."""
|
|
user = MagicMock()
|
|
user.roles = ["admin"]
|
|
user.user_id = "admin-1"
|
|
assert can_see_draft(user, "author-1") is True
|