""" Пример теста для модели User Этот файл демонстрирует, как должны выглядеть реальные тесты. Остальные файлы содержат только заглушки с TODO комментариями. """ import pytest from datetime import datetime from models.user import User, escape_html class TestUserExample: """Пример тестов для модели User""" def test_user_creation_basic(self): """Тест базового создания пользователя""" # Arrange telegram_id = 123456789 first_name = "Test" chat_id = 123456789 profile_link = "test_link" # Act user = User( telegram_id=telegram_id, first_name=first_name, chat_id=chat_id, profile_link=profile_link ) # Assert assert user.telegram_id == telegram_id assert user.first_name == first_name assert user.chat_id == chat_id assert user.profile_link == profile_link assert user.is_active is True assert user.is_superuser is False assert user.created_at is not None assert user.updated_at is not None def test_user_creation_with_all_fields(self): """Тест создания пользователя со всеми полями""" # Arrange telegram_id = 123456789 username = "testuser" first_name = "Test" last_name = "User" chat_id = 123456789 profile_link = "test_link" is_active = True is_superuser = False created_at = datetime.now() updated_at = datetime.now() banned_until = None ban_reason = None # Act user = User( telegram_id=telegram_id, username=username, first_name=first_name, last_name=last_name, chat_id=chat_id, profile_link=profile_link, is_active=is_active, is_superuser=is_superuser, created_at=created_at, updated_at=updated_at, banned_until=banned_until, ban_reason=ban_reason ) # Assert assert user.telegram_id == telegram_id assert user.username == username assert user.first_name == first_name assert user.last_name == last_name assert user.chat_id == chat_id assert user.profile_link == profile_link assert user.is_active == is_active assert user.is_superuser == is_superuser assert user.created_at == created_at assert user.updated_at == updated_at assert user.banned_until == banned_until assert user.ban_reason == ban_reason def test_user_validation_telegram_id_positive(self): """Тест валидации положительного Telegram ID""" # Arrange telegram_id = 123456789 # Act user = User( telegram_id=telegram_id, first_name="Test", chat_id=123456789, profile_link="test_link" ) # Assert assert user.telegram_id == telegram_id assert user.telegram_id > 0 def test_user_display_name_with_username(self): """Тест метода get_display_name с username""" # Arrange user = User( telegram_id=123456789, username="testuser", first_name="Test", last_name="User", chat_id=123456789, profile_link="test_link" ) # Act display_name = user.get_display_name() # Assert assert display_name == "@testuser" def test_user_display_name_without_username(self): """Тест метода get_display_name без username""" # Arrange user = User( telegram_id=123456789, first_name="Test", last_name="User", chat_id=123456789, profile_link="test_link" ) # Act display_name = user.get_display_name() # Assert assert display_name == "Test User" def test_user_display_name_first_name_only(self): """Тест метода get_display_name только с first_name""" # Arrange user = User( telegram_id=123456789, first_name="Test", chat_id=123456789, profile_link="test_link" ) # Act display_name = user.get_display_name() # Assert assert display_name == "Test" def test_user_profile_link_generation(self): """Тест генерации ссылки профиля""" # Arrange user = User( telegram_id=123456789, first_name="Test", chat_id=123456789, profile_link="test_link" ) # Act profile_link = user.get_profile_link() # Assert assert profile_link == "test_link" assert profile_link.startswith("https://t.me/") def test_user_string_representation(self): """Тест строкового представления пользователя""" # Arrange user = User( telegram_id=123456789, username="testuser", first_name="Test", last_name="User", chat_id=123456789, profile_link="test_link" ) # Act str_repr = str(user) # Assert assert "User" in str_repr assert "123456789" in str_repr assert "testuser" in str_repr class TestEscapeHtmlExample: """Пример тестов для функции escape_html""" def test_escape_html_basic(self): """Тест базового HTML экранирования""" # Arrange text = "" # Act escaped = escape_html(text) # Assert assert escaped == "<script>alert('xss')</script>" assert "<" not in escaped assert ">" not in escaped assert "'" not in escaped def test_escape_html_special_characters(self): """Тест экранирования специальных символов""" # Arrange text = "Test & < > \" '" # Act escaped = escape_html(text) # Assert assert escaped == "Test & < > " '" def test_escape_html_none_input(self): """Тест обработки None входных данных""" # Arrange text = None # Act escaped = escape_html(text) # Assert assert escaped is None def test_escape_html_empty_string(self): """Тест обработки пустой строки""" # Arrange text = "" # Act escaped = escape_html(text) # Assert assert escaped == "" def test_escape_html_already_escaped(self): """Тест обработки уже экранированного текста""" # Arrange text = "<script>" # Act escaped = escape_html(text) # Assert assert escaped == "&lt;script&gt;"