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