# DRF Rack # Библиотека классов расширений для Django REST Framework # # Автор: Николай В. Анохин # Все права защищены. Лицензия: MIT """ Описание класса SessionModelTests """ from django.db.utils import IntegrityError from django.test import TestCase from net.xeaf.rack.managers import CryptoManager from net.xeaf.rack.models import AccountModel from net.xeaf.rack.models import SessionModel class SessionModelTests(TestCase): """ Тесты для класса SessionModel """ def setUp(self): """ Атомарно создаем тестовых пользователей для связей """ 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" ) def test_create_session_with_defaults_and_relations(self): """ Проверяет успешное создание сессии, заполнение дефолтных полей и внешних ключей """ 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") 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 ) with self.assertRaises(IntegrityError): session2.renew(3600) session2.save()