Files
drf-rack/net/xeaf/rack/tests/enums/ui_language_tests.py

113 lines
3.7 KiB
Python

# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса UILanguageTests
"""
from django.test import TestCase
from net.xeaf.rack.enums import UILanguage
class UILanguageTests(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())
def test_from_string_returns_english_for_en(self):
"""
Проверяем, что from_string возвращает ENGLISH для 'en'
"""
result = UILanguage.from_string('en')
self.assertEqual(result, UILanguage.ENGLISH)
def test_from_string_returns_russian_for_ru(self):
"""
Проверяем, что from_string возвращает RUSSIAN для 'ru'
"""
result = UILanguage.from_string('ru')
self.assertEqual(result, UILanguage.RUSSIAN)
def test_from_string_handles_uppercase(self):
"""
Проверяем, что from_string корректно обрабатывает заглавные буквы
"""
result = UILanguage.from_string('EN')
self.assertEqual(result, UILanguage.ENGLISH)
result = UILanguage.from_string('RU')
self.assertEqual(result, UILanguage.RUSSIAN)
def test_from_string_handles_regional_variants(self):
"""
Проверяем, что from_string корректно обрабатывает региональные варианты и лишние суффиксы
"""
test_cases = [
('en-us', UILanguage.ENGLISH),
('en-US', UILanguage.ENGLISH),
('en-gb', UILanguage.ENGLISH),
('en-GB', UILanguage.ENGLISH),
('en-us-extra', UILanguage.ENGLISH), # лишний суффикс
('en-us-extra-stuff', UILanguage.ENGLISH), # несколько суффиксов
('ru-ru', UILanguage.RUSSIAN),
('ru-RU', UILanguage.RUSSIAN),
]
for value, expected in test_cases:
with self.subTest(value=value):
result = UILanguage.from_string(value)
self.assertEqual(result, expected)
def test_from_string_raises_value_error_for_unknown(self):
"""
Проверяем, что from_string выбрасывает ValueError для неизвестного языка
"""
with self.assertRaises(ValueError):
UILanguage.from_string('fr')
with self.assertRaises(ValueError):
UILanguage.from_string('de')
with self.assertRaises(ValueError):
UILanguage.from_string('es')
def test_from_string_raises_value_error_for_invalid_format(self):
"""
Проверяем, что from_string выбрасывает ValueError для некорректного формата
"""
with self.assertRaises(ValueError):
UILanguage.from_string('123')
with self.assertRaises(ValueError):
UILanguage.from_string('')
with self.assertRaises(ValueError):
UILanguage.from_string('fr-FR') # 'fr' не поддерживается