Files
state-corp-backend/tests/apps/user/test_models.py
Aleksandr Meshchriakov e9d7f24aaa
Some checks failed
CI/CD Pipeline / Run Tests (push) Failing after 0s
CI/CD Pipeline / Code Quality Checks (push) Failing after 1m43s
CI/CD Pipeline / Build Docker Images (push) Has been skipped
CI/CD Pipeline / Push to Gitea Registry (push) Has been skipped
first commit
2026-01-21 12:07:35 +01:00

133 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Tests for user models"""
from django.test import TestCase
from faker import Faker
from .factories import ProfileFactory, UserFactory
fake = Faker("ru_RU")
class UserModelTest(TestCase):
"""Tests for User model"""
def setUp(self):
self.user = UserFactory.create_user()
self.superuser = UserFactory.create_superuser()
def test_user_creation(self):
"""Test user creation"""
self.assertTrue(self.user.email)
self.assertTrue(self.user.username)
def test_user_str_representation(self):
"""Test user string representation"""
expected = f"{self.user.username} ({self.user.email})"
self.assertEqual(str(self.user), expected)
def test_superuser_creation(self):
"""Test superuser creation"""
self.assertTrue(self.superuser.is_staff)
self.assertTrue(self.superuser.is_superuser)
def test_user_email_unique(self):
"""Test email field is unique"""
self.assertTrue(self.user._meta.get_field("email").unique)
def test_user_username_required(self):
"""Test username is required field"""
self.assertFalse(self.user._meta.get_field("username").blank)
def test_user_phone_optional(self):
"""Test phone field is optional"""
phone_field = self.user._meta.get_field("phone")
self.assertTrue(phone_field.blank)
self.assertTrue(phone_field.null)
def test_user_is_verified_default_false(self):
"""Test is_verified defaults to False"""
field = self.user._meta.get_field("is_verified")
self.assertFalse(field.default)
class ProfileModelTest(TestCase):
"""Tests for Profile model"""
def setUp(self):
# Создаём профиль через фабрику с заполненными данными
self.user = UserFactory.create_user()
self.profile = ProfileFactory.create_profile(user=self.user)
def test_profile_creation(self):
"""Test profile creation"""
self.assertIsNotNone(self.profile.user)
# Проверяем, что профиль связан с пользователем
self.assertEqual(self.profile.user, self.user)
# Проверяем, что имена заполнены faker'ом
self.assertIsNotNone(self.profile.first_name)
self.assertIsNotNone(self.profile.last_name)
self.assertTrue(len(self.profile.first_name) > 0)
self.assertTrue(len(self.profile.last_name) > 0)
def test_profile_str_representation(self):
"""Test profile string representation"""
expected = f"Profile of {self.profile.user.username}"
self.assertEqual(str(self.profile), expected)
def test_profile_one_to_one_relationship(self):
"""Test OneToOne relationship with User"""
self.assertIsNotNone(self.profile.user)
def test_profile_first_name_optional(self):
"""Test first_name field is optional"""
field = self.profile._meta.get_field("first_name")
self.assertTrue(field.blank)
self.assertTrue(field.null)
def test_profile_last_name_optional(self):
"""Test last_name field is optional"""
field = self.profile._meta.get_field("last_name")
self.assertTrue(field.blank)
self.assertTrue(field.null)
def test_profile_bio_optional(self):
"""Test bio field is optional"""
field = self.profile._meta.get_field("bio")
self.assertTrue(field.blank)
self.assertTrue(field.null)
def test_profile_avatar_optional(self):
"""Test avatar field is optional"""
field = self.profile._meta.get_field("avatar")
self.assertTrue(field.blank)
self.assertTrue(field.null)
def test_profile_date_of_birth_optional(self):
"""Test date_of_birth field is optional"""
field = self.profile._meta.get_field("date_of_birth")
self.assertTrue(field.blank)
self.assertTrue(field.null)
def test_profile_full_name_property(self):
"""Test full_name property"""
# Test with both names
first_name = fake.first_name()
last_name = fake.last_name()
self.profile.first_name = first_name
self.profile.last_name = last_name
self.assertEqual(self.profile.full_name, f"{first_name} {last_name}")
# Test with only first name
self.profile.last_name = ""
self.assertEqual(self.profile.full_name, first_name)
# Test with only last name
self.profile.first_name = ""
self.profile.last_name = last_name
self.assertEqual(self.profile.full_name, last_name)
# Test with no names (fallback to username)
self.profile.first_name = ""
self.profile.last_name = ""
self.assertEqual(self.profile.full_name, self.profile.user.username)