This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import enum
|
||||
from datetime import datetime
|
||||
from enum import Enum, auto
|
||||
from enum import Enum
|
||||
|
||||
from sqlalchemy import JSON, Column, DateTime, ForeignKey, Integer, String
|
||||
from sqlalchemy import Enum as SQLAlchemyEnum
|
||||
@@ -11,60 +10,11 @@ from orm.base import BaseModel as Base
|
||||
from utils.logger import root_logger as logger
|
||||
|
||||
|
||||
class NotificationStatus(Enum):
|
||||
"""Статусы уведомлений."""
|
||||
|
||||
UNREAD = auto()
|
||||
READ = auto()
|
||||
ARCHIVED = auto()
|
||||
|
||||
@classmethod
|
||||
def from_string(cls, value: str) -> "NotificationStatus":
|
||||
"""
|
||||
Создает экземпляр статуса уведомления из строки.
|
||||
|
||||
Args:
|
||||
value (str): Строковое представление статуса.
|
||||
|
||||
Returns:
|
||||
NotificationStatus: Экземпляр статуса уведомления.
|
||||
"""
|
||||
try:
|
||||
return cls[value.upper()]
|
||||
except KeyError:
|
||||
logger.error(f"Неверный статус уведомления: {value}")
|
||||
raise ValueError("Неверный статус уведомления") # noqa: B904
|
||||
|
||||
|
||||
class NotificationKind(Enum):
|
||||
"""Типы уведомлений."""
|
||||
|
||||
COMMENT = auto()
|
||||
MENTION = auto()
|
||||
REACTION = auto()
|
||||
FOLLOW = auto()
|
||||
INVITE = auto()
|
||||
|
||||
@classmethod
|
||||
def from_string(cls, value: str) -> "NotificationKind":
|
||||
"""
|
||||
Создает экземпляр типа уведомления из строки.
|
||||
|
||||
Args:
|
||||
value (str): Строковое представление типа.
|
||||
|
||||
Returns:
|
||||
NotificationKind: Экземпляр типа уведомления.
|
||||
"""
|
||||
try:
|
||||
return cls[value.upper()]
|
||||
except KeyError:
|
||||
logger.error(f"Неверный тип уведомления: {value}")
|
||||
raise ValueError("Неверный тип уведомления") # noqa: B904
|
||||
|
||||
|
||||
class NotificationEntity(enum.Enum):
|
||||
"""Сущности, связанные с уведомлениями."""
|
||||
class NotificationEntity(Enum):
|
||||
"""
|
||||
Перечисление сущностей для уведомлений.
|
||||
Определяет типы объектов, к которым относятся уведомления.
|
||||
"""
|
||||
|
||||
TOPIC = "topic"
|
||||
COMMENT = "comment"
|
||||
@@ -90,14 +40,19 @@ class NotificationEntity(enum.Enum):
|
||||
raise ValueError("Неверная сущность уведомления") # noqa: B904
|
||||
|
||||
|
||||
class NotificationAction(enum.Enum):
|
||||
"""Действия в уведомлениях."""
|
||||
class NotificationAction(Enum):
|
||||
"""
|
||||
Перечисление действий для уведомлений.
|
||||
Определяет типы событий, которые могут происходить с сущностями.
|
||||
"""
|
||||
|
||||
CREATE = "create"
|
||||
UPDATE = "update"
|
||||
DELETE = "delete"
|
||||
MENTION = "mention"
|
||||
REACT = "react"
|
||||
FOLLOW = "follow"
|
||||
INVITE = "invite"
|
||||
|
||||
@classmethod
|
||||
def from_string(cls, value: str) -> "NotificationAction":
|
||||
@@ -117,6 +72,11 @@ class NotificationAction(enum.Enum):
|
||||
raise ValueError("Неверное действие уведомления") # noqa: B904
|
||||
|
||||
|
||||
# Оставляем для обратной совместимости
|
||||
NotificationStatus = Enum("NotificationStatus", ["UNREAD", "READ", "ARCHIVED"])
|
||||
NotificationKind = NotificationAction # Для совместимости со старым кодом
|
||||
|
||||
|
||||
class NotificationSeen(Base):
|
||||
__tablename__ = "notification_seen"
|
||||
|
||||
|
@@ -2,31 +2,24 @@ import pytest
|
||||
|
||||
from orm.notification import (
|
||||
NotificationStatus,
|
||||
NotificationKind,
|
||||
NotificationEntity,
|
||||
NotificationAction,
|
||||
)
|
||||
|
||||
def test_notification_status():
|
||||
"""Тестирование перечисления статусов уведомлений."""
|
||||
assert NotificationStatus.UNREAD == NotificationStatus.from_string("UNREAD")
|
||||
assert NotificationStatus.READ == NotificationStatus.from_string("READ")
|
||||
assert NotificationStatus.UNREAD == NotificationStatus.UNREAD
|
||||
assert NotificationStatus.READ == NotificationStatus.READ
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
NotificationStatus.from_string("INVALID_STATUS")
|
||||
|
||||
def test_notification_kind():
|
||||
"""Тестирование перечисления типов уведомлений."""
|
||||
assert NotificationKind.COMMENT == NotificationKind.from_string("COMMENT")
|
||||
assert NotificationKind.MENTION == NotificationKind.from_string("MENTION")
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
NotificationKind.from_string("INVALID_KIND")
|
||||
# Проверяем, что старый метод from_string больше не работает
|
||||
with pytest.raises(AttributeError):
|
||||
NotificationStatus.from_string("UNREAD")
|
||||
|
||||
def test_notification_entity():
|
||||
"""Тестирование перечисления сущностей уведомлений."""
|
||||
assert NotificationEntity.TOPIC == NotificationEntity.from_string("topic")
|
||||
assert NotificationEntity.SHOUT == NotificationEntity.from_string("shout")
|
||||
assert NotificationEntity.COMMENT == NotificationEntity.from_string("comment")
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
NotificationEntity.from_string("INVALID_ENTITY")
|
||||
@@ -35,6 +28,7 @@ def test_notification_action():
|
||||
"""Тестирование перечисления действий уведомлений."""
|
||||
assert NotificationAction.CREATE == NotificationAction.from_string("create")
|
||||
assert NotificationAction.UPDATE == NotificationAction.from_string("update")
|
||||
assert NotificationAction.REACT == NotificationAction.from_string("react")
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
NotificationAction.from_string("INVALID_ACTION")
|
||||
|
Reference in New Issue
Block a user