diff --git a/orm/notification.py b/orm/notification.py index 2525db3f..db7450ef 100644 --- a/orm/notification.py +++ b/orm/notification.py @@ -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" diff --git a/tests/test_notification.py b/tests/test_notification.py index 5e9d675f..3b403786 100644 --- a/tests/test_notification.py +++ b/tests/test_notification.py @@ -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")