Фиксируем модели, UserStory и тесты
This commit is contained in:
@@ -9,75 +9,56 @@
|
||||
"""
|
||||
|
||||
from django.db.utils import IntegrityError
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
|
||||
from net.xeaf.rack.managers import CryptoManager
|
||||
from net.xeaf.rack.models import AccountModel
|
||||
from net.xeaf.rack.core import CoreTestCase
|
||||
from net.xeaf.rack.management.userstory import AccountTestData
|
||||
from net.xeaf.rack.management.userstory import SessionTestData
|
||||
from net.xeaf.rack.models import SessionModel
|
||||
|
||||
|
||||
class SessionModelTests(TestCase):
|
||||
class SessionModelTests(CoreTestCase):
|
||||
"""
|
||||
Тесты для класса SessionModel
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
def test_user_story_sessions_exist_and_linked(self):
|
||||
"""
|
||||
Атомарно создаем тестовых пользователей для связей
|
||||
Проверяет, что сессии из User Story созданы и правильно связаны с аккаунтами
|
||||
"""
|
||||
|
||||
self.primary_user = AccountModel.objects.create_user(
|
||||
username="primary@example.com",
|
||||
password="secure_password_123"
|
||||
)
|
||||
self.actual_user = AccountModel.objects.create_user(
|
||||
username="actual@example.com",
|
||||
password="secure_password_456"
|
||||
)
|
||||
# Ищем сессию Ивана по фиксированному токену
|
||||
session = SessionModel.objects.get(token=SessionTestData.I_IVANOV_SESSION_TOKEN)
|
||||
|
||||
def test_create_session_with_defaults_and_relations(self):
|
||||
"""
|
||||
Проверяет успешное создание сессии, заполнение дефолтных полей и внешних ключей
|
||||
"""
|
||||
# Проверяем связи (включая твой крутой механизм имперсонации)
|
||||
self.assertEqual(session.account_id, AccountTestData.I_IVANOV_ID)
|
||||
self.assertEqual(session.actual_account_id, AccountTestData.I_IVANOV_ID)
|
||||
|
||||
token_str = CryptoManager.gen_token()
|
||||
|
||||
session = SessionModel()
|
||||
session.token = token_str
|
||||
session.account = self.primary_user
|
||||
session.actual_account = self.actual_user
|
||||
session.renew(3600)
|
||||
session.save()
|
||||
|
||||
# Проверяем контракт полей и связей
|
||||
self.assertEqual(session.token, token_str)
|
||||
self.assertEqual(session.account.id, self.primary_user.id)
|
||||
self.assertEqual(session.actual_account.id, self.actual_user.id)
|
||||
# Проверяем дефолты текстовых полей, которые мы закладывали в модель
|
||||
self.assertEqual(session.device_id, "WEB")
|
||||
self.assertIsNone(session.fcm_token)
|
||||
|
||||
def test_session_expiration_logic(self):
|
||||
"""
|
||||
Проверяет, что метод renew() правильно выставил expires_at в будущем
|
||||
"""
|
||||
|
||||
session = SessionModel.objects.get(token=SessionTestData.I_IVANOV_SESSION_TOKEN)
|
||||
|
||||
# Сессия должна быть активной прямо сейчас
|
||||
self.assertGreater(session.expires_at, timezone.now())
|
||||
|
||||
def test_token_uniqueness_constraint(self):
|
||||
"""
|
||||
Проверяет жесткое ограничение уникальности токена сессии в базе данных
|
||||
Проверяет жесткое ограничение уникальности токенов сессий
|
||||
"""
|
||||
|
||||
duplicate_token = "same_token_xyz"
|
||||
|
||||
# Создаем первую валидную сессию
|
||||
session1 = SessionModel(
|
||||
token=duplicate_token,
|
||||
account=self.primary_user,
|
||||
actual_account=self.actual_user
|
||||
)
|
||||
session1.renew(3600)
|
||||
session1.save()
|
||||
|
||||
# Попытка создать вторую сессию с тем же токеном должна намертво упасть в БД
|
||||
session2 = SessionModel(
|
||||
token=duplicate_token,
|
||||
account=self.primary_user,
|
||||
actual_account=self.actual_user
|
||||
)
|
||||
# Попытка создать новую сессию с токеном Петра должна упасть
|
||||
duplicate_session = SessionModel()
|
||||
duplicate_session.token = SessionTestData.P_PETROV_SESSION_TOKEN
|
||||
duplicate_session.account_id = AccountTestData.I_IVANOV_ID
|
||||
duplicate_session.actual_account_id = AccountTestData.I_IVANOV_ID
|
||||
duplicate_session.expire()
|
||||
|
||||
with self.assertRaises(IntegrityError):
|
||||
session2.renew(3600)
|
||||
session2.save()
|
||||
duplicate_session.save()
|
||||
|
||||
Reference in New Issue
Block a user