diff --git a/net/xeaf/rack/enums/__init__.py b/net/xeaf/rack/enums/__init__.py index d29fc0f..fc5cf30 100644 --- a/net/xeaf/rack/enums/__init__.py +++ b/net/xeaf/rack/enums/__init__.py @@ -10,4 +10,5 @@ from .ui_language import UILanguage from .auth_reject_reson import AuthRejectReason +from .view_set_action import ViewSetAction diff --git a/net/xeaf/rack/enums/view_set_action.py b/net/xeaf/rack/enums/view_set_action.py new file mode 100644 index 0000000..d618a32 --- /dev/null +++ b/net/xeaf/rack/enums/view_set_action.py @@ -0,0 +1,63 @@ +# DRF Rack +# Библиотека классов расширений для Django REST Framework +# +# Автор: Николай В. Анохин +# Все права защищены. Лицензия: 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}") diff --git a/net/xeaf/rack/tests/enums/__init__.py b/net/xeaf/rack/tests/enums/__init__.py index 1893610..46738d4 100644 --- a/net/xeaf/rack/tests/enums/__init__.py +++ b/net/xeaf/rack/tests/enums/__init__.py @@ -8,4 +8,6 @@ Пакет описания тестов для классов перечислений """ -from .ui_language_tests import * +from .ui_language_tests import UILanguageTests +from .view_set_action_tests import ViewSetActionTests + diff --git a/net/xeaf/rack/tests/enums/view_set_action_tests.py b/net/xeaf/rack/tests/enums/view_set_action_tests.py new file mode 100644 index 0000000..c83e827 --- /dev/null +++ b/net/xeaf/rack/tests/enums/view_set_action_tests.py @@ -0,0 +1,41 @@ +# DRF Rack +# Библиотека классов расширений для Django REST Framework +# +# Автор: Николай В. Анохин +# Все права защищены. Лицензия: 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