73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
# 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()
|
|
|