Добавлены классы моделей данных Account, Session
This commit is contained in:
@@ -7,3 +7,6 @@
|
||||
"""
|
||||
Пакет описания тестов классов моделей данных
|
||||
"""
|
||||
|
||||
from .account_model_tests import AccountModelTests
|
||||
from .session_model_tests import SessionModelTests
|
||||
|
||||
72
net/xeaf/rack/tests/models/account_model_tests.py
Normal file
72
net/xeaf/rack/tests/models/account_model_tests.py
Normal file
@@ -0,0 +1,72 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса AccountModelTests
|
||||
"""
|
||||
|
||||
from django.db.utils import IntegrityError
|
||||
from django.test import TestCase
|
||||
|
||||
from net.xeaf.rack.models import AccountModel
|
||||
|
||||
|
||||
class AccountModelTests(TestCase):
|
||||
"""
|
||||
Тесты для класса AccountModel
|
||||
"""
|
||||
|
||||
def test_create_account_with_defaults(self):
|
||||
"""
|
||||
Проверяет корректное создание аккаунта с дефолтными полями
|
||||
"""
|
||||
|
||||
email = "test_user@example.com"
|
||||
|
||||
# Создаем через чистый ORM, как ты любишь, построчно
|
||||
account = AccountModel()
|
||||
account.username = email
|
||||
account.save()
|
||||
|
||||
# Проверяем контракт полей
|
||||
self.assertEqual(account.username, email)
|
||||
self.assertIsNone(account.full_name)
|
||||
self.assertIsNone(account.nick_name)
|
||||
|
||||
# Если ты исправил дефолт на dict, тест гарантирует безопасность:
|
||||
self.assertEqual(account.extra, {})
|
||||
|
||||
def test_compatibility_methods(self):
|
||||
"""
|
||||
Проверяет методы совместимости get_full_name и get_short_name
|
||||
"""
|
||||
|
||||
account = AccountModel()
|
||||
account.username = "names@example.com"
|
||||
account.full_name = "Иван Иванов"
|
||||
account.nick_name = "vanya"
|
||||
account.save()
|
||||
|
||||
self.assertEqual(account.get_full_name(), "Иван Иванов")
|
||||
self.assertEqual(account.get_short_name(), "vanya")
|
||||
|
||||
def test_username_uniqueness_constraint(self):
|
||||
"""
|
||||
Проверяет жесткое ограничение уникальности на уровне UniqueConstraint
|
||||
"""
|
||||
|
||||
duplicate_email = "duplicate@example.com"
|
||||
|
||||
# Создаем первого
|
||||
account1 = AccountModel(username=duplicate_email)
|
||||
account1.save()
|
||||
|
||||
# Попытка создать второго с тем же username должна намертво упасть в БД
|
||||
account2 = AccountModel(username=duplicate_email)
|
||||
|
||||
with self.assertRaises(IntegrityError):
|
||||
account2.save()
|
||||
|
||||
83
net/xeaf/rack/tests/models/session_model_tests.py
Normal file
83
net/xeaf/rack/tests/models/session_model_tests.py
Normal file
@@ -0,0 +1,83 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: 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()
|
||||
Reference in New Issue
Block a user