65 lines
2.6 KiB
Python
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()
|