notifications-fix
Some checks failed
Deploy on push / deploy (push) Failing after 5s

This commit is contained in:
2025-07-25 08:49:12 +03:00
parent 3ce870c81b
commit 0f16679a06
2 changed files with 25 additions and 71 deletions

View File

@@ -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"

View File

@@ -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")