Добавление классов CoreEnum и UILanguage

This commit is contained in:
2026-07-10 18:43:57 +03:00
parent 0370f20efd
commit ef09fb4de3
13 changed files with 377 additions and 3 deletions

View File

@@ -8,4 +8,5 @@
Пакет базовых классов
"""
from .core_enum import CoreEnum
from .core_test_case import CoreTestCase

View File

@@ -0,0 +1,47 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса CoreEnum
"""
from enum import StrEnum
class CoreEnum(StrEnum):
"""
Реализует базовые методы для классов перечислений
"""
@classmethod
def choices(cls) -> list[tuple[str, str]]:
"""
Возвращает список для организации выбора значения
:return: Список для выбора значения
"""
return [(item.value, item.name) for item in cls]
@classmethod
def keys(cls) -> list[str]:
"""
Возвращает список ключей
:return: Список ключей
"""
return [item.name for item in cls]
@classmethod
def values(cls) -> list[str]:
"""
Возвращает список значений
:return: Список значений
"""
return [item.value for item in cls]

View File

@@ -0,0 +1,11 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Пакет описания классов перечислений
"""
from .ui_language import UILanguage

View File

@@ -0,0 +1,23 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса UILanguage
"""
from net.xeaf.rack.core import CoreEnum
class UILanguage(CoreEnum):
"""
Перечисление доступных языков интерфейса
"""
ENGLISH = 'en'
""" Английский """
RUSSIAN = 'ru'
""" Русский """

View File

@@ -0,0 +1,12 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Пакет описания тестов для базовых классов
"""
from .core_enum_tests import CoreEnumTests

View File

@@ -0,0 +1,233 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса CoreEnumTests
"""
from net.xeaf.rack.core import CoreEnum
from net.xeaf.rack.core import CoreTestCase
class TestColorEnum(CoreEnum):
"""
Тестовое перечисление для проверки
"""
RED = "red"
GREEN = "green"
BLUE = "blue"
class TestStatusEnum(CoreEnum):
"""
Еще одно тестовое перечисление
"""
ACTIVE = "active"
INACTIVE = "inactive"
PENDING = "pending"
class TestEmptyEnum(CoreEnum):
"""
Пустое перечисление для граничных случаев
"""
pass
class CoreEnumTests(CoreTestCase):
"""
Тесты для класса CoreEnum
"""
def test_choices_returns_list_of_tuples(self):
"""
Проверяет, что choices() возвращает список кортежей (value, name)
"""
expected = [
("red", "RED"),
("green", "GREEN"),
("blue", "BLUE"),
]
self.assertEqual(TestColorEnum.choices(), expected)
def test_choices_contains_all_members(self):
"""
Проверяет, что choices() содержит все элементы перечисления
"""
choices = TestColorEnum.choices()
self.assertEqual(len(choices), 3)
self.assertIn(("red", "RED"), choices)
self.assertIn(("green", "GREEN"), choices)
self.assertIn(("blue", "BLUE"), choices)
def test_choices_order_matches_definition(self):
"""
Проверяет, что порядок элементов сохраняется
"""
choices = TestColorEnum.choices()
self.assertEqual(choices[0][0], "red")
self.assertEqual(choices[1][0], "green")
self.assertEqual(choices[2][0], "blue")
def test_keys_returns_list_of_names(self):
"""
Проверяет, что keys() возвращает список имен
"""
expected = ["RED", "GREEN", "BLUE"]
self.assertEqual(TestColorEnum.keys(), expected)
def test_keys_contains_all_names(self):
"""
Проверяет, что keys() содержит все имена элементов
"""
keys = TestColorEnum.keys()
self.assertEqual(len(keys), 3)
self.assertIn("RED", keys)
self.assertIn("GREEN", keys)
self.assertIn("BLUE", keys)
def test_values_returns_list_of_values(self):
"""
Проверяет, что values() возвращает список значений
"""
expected = ["red", "green", "blue"]
self.assertEqual(TestColorEnum.values(), expected)
def test_values_contains_all_values(self):
"""
Проверяет, что values() содержит все значения элементов
"""
values = TestColorEnum.values()
self.assertEqual(len(values), 3)
self.assertIn("red", values)
self.assertIn("green", values)
self.assertIn("blue", values)
def test_choices_with_different_enum(self):
"""
Проверяет работу choices() с другим перечислением
"""
expected = [
("active", "ACTIVE"),
("inactive", "INACTIVE"),
("pending", "PENDING"),
]
self.assertEqual(TestStatusEnum.choices(), expected)
def test_keys_with_different_enum(self):
"""
Проверяет работу keys() с другим перечислением
"""
expected = ["ACTIVE", "INACTIVE", "PENDING"]
self.assertEqual(TestStatusEnum.keys(), expected)
def test_values_with_different_enum(self):
"""
Проверяет работу values() с другим перечислением
"""
expected = ["active", "inactive", "pending"]
self.assertEqual(TestStatusEnum.values(), expected)
def test_empty_enum_choices(self):
"""
Проверяет поведение choices() для пустого перечисления
"""
self.assertEqual(TestEmptyEnum.choices(), [])
def test_empty_enum_keys(self):
"""
Проверяет поведение keys() для пустого перечисления
"""
self.assertEqual(TestEmptyEnum.keys(), [])
def test_empty_enum_values(self):
"""
Проверяет поведение values() для пустого перечисления
"""
self.assertEqual(TestEmptyEnum.values(), [])
def test_choices_returns_different_type(self):
"""
Проверяет, что choices() возвращает list, а не tuple
"""
self.assertIsInstance(TestColorEnum.choices(), list)
self.assertIsInstance(TestColorEnum.choices()[0], tuple)
def test_keys_returns_list(self):
"""
Проверяет, что keys() возвращает list
"""
self.assertIsInstance(TestColorEnum.keys(), list)
def test_values_returns_list(self):
"""
Проверяет, что values() возвращает list
"""
self.assertIsInstance(TestColorEnum.values(), list)
def test_choices_values_match(self):
"""
Проверяет согласованность choices() и values()
"""
choices_values = [choice[0] for choice in TestColorEnum.choices()]
self.assertEqual(choices_values, TestColorEnum.values())
def test_choices_keys_match(self):
"""
Проверяет согласованность choices() и keys()
"""
choices_keys = [choice[1] for choice in TestColorEnum.choices()]
self.assertEqual(choices_keys, TestColorEnum.keys())
def test_keys_and_values_length_match(self):
"""
Проверяет, что keys() и values() имеют одинаковую длину
"""
self.assertEqual(len(TestColorEnum.keys()), len(TestColorEnum.values()))
def test_choices_length_matches_members(self):
"""
Проверяет, что количество choices совпадает с количеством элементов
"""
self.assertEqual(len(TestColorEnum.choices()), len(TestColorEnum.__members__))
def test_all_elements_are_strings(self):
"""
Проверяет, что все значения являются строками (StrEnum)
"""
for value in TestColorEnum.values():
self.assertIsInstance(value, str)
for key in TestColorEnum.keys():
self.assertIsInstance(key, str)
for choice in TestColorEnum.choices():
self.assertIsInstance(choice[0], str)
self.assertIsInstance(choice[1], str)

View File

@@ -0,0 +1,11 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Пакет описания тестов для классов перечислений
"""
from .ui_language_tests import *

View File

@@ -0,0 +1,36 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса UILanguageTests
"""
from django.test import TestCase
from net.xeaf.rack.enums import UILanguage
class UILanguageTest(TestCase):
"""
Тесты для перечисления UILanguage
"""
def test_has_expected_values(self):
"""
Проверяем, что в enum есть ожидаемые языки
"""
expected = {"en", "ru"}
self.assertEqual(set(UILanguage.values()), expected)
def test_values_format(self):
"""
Проверяем формат значений
"""
for code in UILanguage.values():
self.assertEqual(len(code), 2)
self.assertTrue(code.islower())

View File

@@ -5,7 +5,7 @@
# Все права защищены. Лицензия: MIT
"""
Пакет описания классов тестов для служебных классов и утилит
Пакет описания тестов для служебных классов и утилит
"""
from .crypto_tests import CryptoTests

View File

@@ -9,12 +9,12 @@
"""
from net.xeaf.rack.core import CoreTestCase
from net.xeaf.rack.util import Crypto
from net.xeaf.rack.utils import Crypto
class CryptoTests(CoreTestCase):
"""
Тесты для Crypto
Тесты для класса Crypto
"""
def test_gen_token(self):