Классы моделей исправлены
This commit is contained in:
@@ -7,10 +7,11 @@
|
||||
"""
|
||||
Описание класса CryptoTests
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
from django.test import SimpleTestCase
|
||||
|
||||
from net.xeaf.rack.managers import CryptoManager
|
||||
from net.xeaf.rack.models import SessionModel
|
||||
|
||||
|
||||
class CryptoManagerTests(SimpleTestCase):
|
||||
@@ -127,3 +128,35 @@ class CryptoManagerTests(SimpleTestCase):
|
||||
"""
|
||||
|
||||
self.assertRegex(value, r'^[0-9a-f]+$')
|
||||
|
||||
def test_crypto_manager_should_generate_default_length_by_default(self) -> None:
|
||||
"""
|
||||
Гарантируем, что генератор без параметров использует базовую длину
|
||||
"""
|
||||
|
||||
generated_token = CryptoManager.gen_token()
|
||||
self.assertEqual(len(generated_token), CryptoManager.DEFAULT_TOKEN_LENGTH)
|
||||
|
||||
def test_session_model_field_must_match_max_token_length_constant(self) -> None:
|
||||
"""
|
||||
Защита схемы БД: max_length в миграциях равен MAX_TOKEN_LENGTH
|
||||
"""
|
||||
|
||||
field = SessionModel._meta.get_field("token")
|
||||
self.assertIsInstance(field, models.CharField)
|
||||
db_max_length = field.max_length
|
||||
self.assertIsInstance(db_max_length, int)
|
||||
self.assertEqual(db_max_length, SessionModel.MAX_TOKEN_LENGTH)
|
||||
|
||||
def test_crypto_manager_should_raise_value_error_if_length_exceeds_max(self) -> None:
|
||||
"""
|
||||
Проверка Fail-Fast контракта: при превышении лимита СУБД выбрасывается ValueError
|
||||
"""
|
||||
|
||||
excessive_length = SessionModel.MAX_TOKEN_LENGTH + 1
|
||||
|
||||
# Система обязана громко упасть с ValueError
|
||||
with self.assertRaises(ValueError) as context:
|
||||
CryptoManager.gen_token(length=excessive_length)
|
||||
|
||||
self.assertIn(f"Token length must be less than {SessionModel.MAX_TOKEN_LENGTH}", str(context.exception))
|
||||
|
||||
Reference in New Issue
Block a user