113 lines
3.7 KiB
Python
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' не поддерживается
|