57 lines
2.5 KiB
Python
57 lines
2.5 KiB
Python
# DRF Rack
|
|
# Библиотека классов расширений для Django REST Framework
|
|
#
|
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
|
# Все права защищены. Лицензия: MIT
|
|
|
|
"""
|
|
Описание класса AccountModelTests
|
|
"""
|
|
|
|
from django.db.utils import IntegrityError
|
|
|
|
from net.xeaf.rack.core.tests import CoreTestCase
|
|
from net.xeaf.rack.management.userstory import AccountTestData
|
|
from net.xeaf.rack.models import AccountModel
|
|
|
|
|
|
class AccountModelTests(CoreTestCase):
|
|
"""
|
|
Тесты для класса AccountModel
|
|
"""
|
|
|
|
def test_user_story_accounts_exist(self):
|
|
"""
|
|
Проверяет, что эталонные пользователи успешно созданы в User Story
|
|
"""
|
|
|
|
# Ищем Ивана Иванова по фиксированному UUID
|
|
ivanov = AccountModel.objects.get(id=AccountTestData.I_IVANOV_ID)
|
|
|
|
self.assertEqual(ivanov.username, "i.ivanov@xeaf.net")
|
|
self.assertEqual(ivanov.full_name, "Иван И. Иванов")
|
|
self.assertEqual(ivanov.get_short_name(), "Иван")
|
|
|
|
# Проверяем, что наше исправление JSONField (default=dict) работает:
|
|
# Поле extra должно быть пустым словарем, а не None, готовым к .update()
|
|
self.assertEqual(ivanov.extra, {})
|
|
|
|
def test_password_hashing_works(self):
|
|
"""Проверяет, что пароли пользователей в User Story захешированы, а не лежат строкой"""
|
|
ivanov = AccountModel.objects.get(id=AccountTestData.I_IVANOV_ID)
|
|
|
|
# Проверяем, что стандартный джанговский механизм проверки пароля работает
|
|
self.assertTrue(ivanov.check_password(AccountTestData.DEFAULT_PASSWORD))
|
|
# Гарантируем, что в базе лежит хэш, а не сырая строка
|
|
self.assertNotEqual(ivanov.password, AccountTestData.DEFAULT_PASSWORD)
|
|
|
|
def test_username_uniqueness_constraint(self):
|
|
"""Проверяет жесткое ограничение уникальности email-username"""
|
|
# Попытка создать пользователя с дублирующим email Ивана должна намертво упасть
|
|
duplicate_account = AccountModel()
|
|
duplicate_account.username = "i.ivanov@xeaf.net"
|
|
|
|
with self.assertRaises(IntegrityError):
|
|
duplicate_account.save()
|
|
|