# DRF Rack # Библиотека классов расширений для Django REST Framework # # Автор: Николай В. Анохин # Все права защищены. Лицензия: 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()