From 4ce8a1ba5801ce203e87832d27b3283d5894176c Mon Sep 17 00:00:00 2001 From: "Nick V. Anokhin" Date: Tue, 14 Jul 2026 18:03:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20ViewSetAction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- net/xeaf/rack/enums/__init__.py | 1 + net/xeaf/rack/enums/view_set_action.py | 63 +++++++++++++++++++ net/xeaf/rack/tests/enums/__init__.py | 4 +- .../rack/tests/enums/view_set_action_tests.py | 41 ++++++++++++ 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 net/xeaf/rack/enums/view_set_action.py create mode 100644 net/xeaf/rack/tests/enums/view_set_action_tests.py 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