Добавлен класс ViewSetAction

This commit is contained in:
2026-07-14 18:03:12 +03:00
parent 9a9f25c69e
commit 4ce8a1ba58
4 changed files with 108 additions and 1 deletions

View File

@@ -10,4 +10,5 @@
from .ui_language import UILanguage
from .auth_reject_reson import AuthRejectReason
from .view_set_action import ViewSetAction

View File

@@ -0,0 +1,63 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса ViewSetAction
"""
from enum import unique
from net.xeaf.rack.core import CoreEnum
@unique
class ViewSetAction(CoreEnum):
"""
Перечисление действий набора представлений
"""
LIST = "list"
""" Список объектов """
RETRIEVE = "retrieve"
""" Получение объекта """
CREATE = "create"
""" Создание объекта """
UPDATE = "update"
""" Изменение объекта """
PARTIAL_UPDATE = "partial_update"
""" Частичное изменение объекта """
DESTROY = "destroy"
""" Удаление объекта """
@classmethod
def get_method(cls, action: ViewSetAction) -> str:
"""
Возвращает HTTP метод для указанного действия
:param action: Действие
:return: HTTP метод
"""
match action:
case cls.LIST:
return "item_list"
case cls.CREATE:
return "item_create"
case cls.RETRIEVE:
return "item_retrieve"
case cls.UPDATE:
return "item_update"
case cls.PARTIAL_UPDATE:
return "item_partial_update"
case cls.DESTROY:
return "item_destroy"
case _:
raise ValueError(f"Invalid action: {action}")

View File

@@ -8,4 +8,6 @@
Пакет описания тестов для классов перечислений
"""
from .ui_language_tests import *
from .ui_language_tests import UILanguageTests
from .view_set_action_tests import ViewSetActionTests

View File

@@ -0,0 +1,41 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса ViewSetActionTests
"""
from django.test import SimpleTestCase
from net.xeaf.rack.enums import ViewSetAction
class ViewSetActionTests(SimpleTestCase):
"""
Тесты для ViewSetAction
"""
def test_get_method_returns_correct_mapping(self):
"""
Проверяет, что get_method возвращает правильные HTTP-методы для всех действий
"""
self.assertEqual(ViewSetAction.get_method(ViewSetAction.LIST), "item_list")
self.assertEqual(ViewSetAction.get_method(ViewSetAction.RETRIEVE), "item_retrieve")
self.assertEqual(ViewSetAction.get_method(ViewSetAction.CREATE), "item_create")
self.assertEqual(ViewSetAction.get_method(ViewSetAction.UPDATE), "item_update")
self.assertEqual(ViewSetAction.get_method(ViewSetAction.PARTIAL_UPDATE), "item_partial_update")
self.assertEqual(ViewSetAction.get_method(ViewSetAction.DESTROY), "item_destroy")
def test_get_method_with_invalid_action_raises_error(self):
"""
Проверяет поведение метода при передаче невалидного значения
"""
invalid_action = "invalid_action"
with self.assertRaises(Exception): # Будет вызван MatchError или ValueError в зависимости от настроек linter/python
ViewSetAction.get_method(invalid_action) # type: ignore