Files
drf-rack/net/xeaf/rack/tests/models/session_model_tests.py

65 lines
2.6 KiB
Python

# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса SessionModelTests
"""
from django.db.utils import IntegrityError
from django.utils import timezone
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(CoreTestCase):
"""
Тесты для класса SessionModel
"""
def test_user_story_sessions_exist_and_linked(self):
"""
Проверяет, что сессии из User Story созданы и правильно связаны с аккаунтами
"""
# Ищем сессию Ивана по фиксированному токену
session = SessionModel.objects.get(token=SessionTestData.I_IVANOV_SESSION_TOKEN)
# Проверяем связи (включая твой крутой механизм имперсонации)
self.assertEqual(session.account_id, AccountTestData.I_IVANOV_ID)
self.assertEqual(session.actual_account_id, AccountTestData.I_IVANOV_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_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):
duplicate_session.save()