Фиксируем модели, UserStory и тесты
This commit is contained in:
@@ -9,64 +9,48 @@
|
||||
"""
|
||||
|
||||
from django.db.utils import IntegrityError
|
||||
from django.test import TestCase
|
||||
|
||||
from net.xeaf.rack.core import CoreTestCase
|
||||
from net.xeaf.rack.management.userstory import AccountTestData
|
||||
from net.xeaf.rack.models import AccountModel
|
||||
|
||||
|
||||
class AccountModelTests(TestCase):
|
||||
class AccountModelTests(CoreTestCase):
|
||||
"""
|
||||
Тесты для класса AccountModel
|
||||
"""
|
||||
|
||||
def test_create_account_with_defaults(self):
|
||||
def test_user_story_accounts_exist(self):
|
||||
"""
|
||||
Проверяет корректное создание аккаунта с дефолтными полями
|
||||
Проверяет, что эталонные пользователи успешно созданы в User Story
|
||||
"""
|
||||
|
||||
email = "test_user@example.com"
|
||||
# Ищем Ивана Иванова по фиксированному UUID
|
||||
ivanov = AccountModel.objects.get(id=AccountTestData.I_IVANOV_ID)
|
||||
|
||||
# Создаем через чистый ORM, как ты любишь, построчно
|
||||
account = AccountModel()
|
||||
account.username = email
|
||||
account.save()
|
||||
self.assertEqual(ivanov.username, "i.ivanov@xeaf.net")
|
||||
self.assertEqual(ivanov.full_name, "Иван И. Иванов")
|
||||
self.assertEqual(ivanov.get_short_name(), "Иван")
|
||||
|
||||
# Проверяем контракт полей
|
||||
self.assertEqual(account.username, email)
|
||||
self.assertIsNone(account.full_name)
|
||||
self.assertIsNone(account.nick_name)
|
||||
# Проверяем, что наше исправление JSONField (default=dict) работает:
|
||||
# Поле extra должно быть пустым словарем, а не None, готовым к .update()
|
||||
self.assertEqual(ivanov.extra, {})
|
||||
|
||||
# Если ты исправил дефолт на dict, тест гарантирует безопасность:
|
||||
self.assertEqual(account.extra, {})
|
||||
def test_password_hashing_works(self):
|
||||
"""Проверяет, что пароли пользователей в User Story захешированы, а не лежат строкой"""
|
||||
ivanov = AccountModel.objects.get(id=AccountTestData.I_IVANOV_ID)
|
||||
|
||||
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")
|
||||
# Проверяем, что стандартный джанговский механизм проверки пароля работает
|
||||
self.assertTrue(ivanov.check_password(AccountTestData.DEFAULT_PASSWORD))
|
||||
# Гарантируем, что в базе лежит хэш, а не сырая строка
|
||||
self.assertNotEqual(ivanov.password, AccountTestData.DEFAULT_PASSWORD)
|
||||
|
||||
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)
|
||||
"""Проверяет жесткое ограничение уникальности email-username"""
|
||||
# Попытка создать пользователя с дублирующим email Ивана должна намертво упасть
|
||||
duplicate_account = AccountModel()
|
||||
duplicate_account.username = "i.ivanov@xeaf.net"
|
||||
|
||||
with self.assertRaises(IntegrityError):
|
||||
account2.save()
|
||||
duplicate_account.save()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user