""" Тесты для модуля валидации данных. Проверяет корректность работы всех функций валидации. """ import pytest from utils.validators import Validator, InputValidator from core.exceptions import ValidationError class TestValidator: """Тесты базового класса Validator""" def test_validate_string_length_valid(self): """Тест валидации корректной длины строки""" assert Validator.validate_string_length("test", 1, 10) is True assert Validator.validate_string_length("", 0, 10) is True assert Validator.validate_string_length("a" * 1000, 0, 1000) is True def test_validate_string_length_invalid(self): """Тест валидации некорректной длины строки""" assert Validator.validate_string_length("", 1, 10) is False assert Validator.validate_string_length("test", 10, 1) is False assert Validator.validate_string_length("a" * 1001, 0, 1000) is False assert Validator.validate_string_length(None, 0, 10) is False def test_validate_numeric_range_valid(self): """Тест валидации корректного числового диапазона""" assert Validator.validate_numeric_range(5, 1, 10) is True assert Validator.validate_numeric_range(1, 1, 10) is True assert Validator.validate_numeric_range(10, 1, 10) is True assert Validator.validate_numeric_range(5.5, 1.0, 10.0) is True def test_validate_numeric_range_invalid(self): """Тест валидации некорректного числового диапазона""" assert Validator.validate_numeric_range(0, 1, 10) is False assert Validator.validate_numeric_range(15, 1, 10) is False assert Validator.validate_numeric_range("not_a_number", 1, 10) is False assert Validator.validate_numeric_range(None, 1, 10) is False def test_validate_user_id_valid(self): """Тест валидации корректного ID пользователя""" assert Validator.validate_user_id(123456789) is True assert Validator.validate_user_id("123456789") is True assert Validator.validate_user_id(1) is True assert Validator.validate_user_id(2147483647) is True def test_validate_user_id_invalid(self): """Тест валидации некорректного ID пользователя""" assert Validator.validate_user_id(0) is False assert Validator.validate_user_id(-1) is False assert Validator.validate_user_id(2147483648) is False assert Validator.validate_user_id("not_a_number") is False assert Validator.validate_user_id(None) is False class TestInputValidator: """Тесты класса InputValidator""" def test_validate_email_valid(self): """Тест валидации корректных email адресов""" assert InputValidator.validate_email("test@example.com") is True assert InputValidator.validate_email("user.name+tag@domain.co.uk") is True assert InputValidator.validate_email("admin@localhost") is True def test_validate_email_invalid(self): """Тест валидации некорректных email адресов""" assert InputValidator.validate_email("") is False assert InputValidator.validate_email("invalid-email") is False assert InputValidator.validate_email("@example.com") is False assert InputValidator.validate_email("test@") is False assert InputValidator.validate_email("test.example.com") is False def test_validate_phone_valid(self): """Тест валидации корректных номеров телефона""" assert InputValidator.validate_phone("+7 999 123-45-67") is True assert InputValidator.validate_phone("8(999)1234567") is True assert InputValidator.validate_phone("+1234567890") is True assert InputValidator.validate_phone("1234567890") is True def test_validate_phone_invalid(self): """Тест валидации некорректных номеров телефона""" assert InputValidator.validate_phone("") is False assert InputValidator.validate_phone("123") is False assert InputValidator.validate_phone("phone") is False assert InputValidator.validate_phone("+123") is False def test_validate_url_valid(self): """Тест валидации корректных URL""" assert InputValidator.validate_url("https://example.com") is True assert InputValidator.validate_url("http://localhost:8080") is True assert InputValidator.validate_url("https://sub.domain.org/path") is True def test_validate_url_invalid(self): """Тест валидации некорректных URL""" assert InputValidator.validate_url("") is False assert InputValidator.validate_url("not-a-url") is False assert InputValidator.validate_url("ftp://example.com") is False assert InputValidator.validate_url("https://") is False def test_validate_city_name_valid(self): """Тест валидации корректных названий городов""" assert InputValidator.validate_city_name("Москва") is True assert InputValidator.validate_city_name("New York") is True assert InputValidator.validate_city_name("Санкт-Петербург") is True assert InputValidator.validate_city_name("Saint-Petersburg") is True def test_validate_city_name_invalid(self): """Тест валидации некорректных названий городов""" assert InputValidator.validate_city_name("") is False assert InputValidator.validate_city_name("A") is False assert InputValidator.validate_city_name("A" * 51) is False assert InputValidator.validate_city_name("City123") is False assert InputValidator.validate_city_name("City@Name") is False def test_validate_username_valid(self): """Тест валидации корректных username""" assert InputValidator.validate_username("user123") is True assert InputValidator.validate_username("test_user") is True assert InputValidator.validate_username("a" + "b" * 28) is True # 30 символов def test_validate_username_invalid(self): """Тест валидации некорректных username""" assert InputValidator.validate_username("") is False assert InputValidator.validate_username("ab") is False # слишком короткий assert InputValidator.validate_username("A" * 33) is False # слишком длинный assert InputValidator.validate_username("user-name") is False # дефис запрещен assert InputValidator.validate_username("user.name") is False # точка запрещена assert InputValidator.validate_username("123user") is False # не начинается с буквы def test_validate_text_content_valid(self): """Тест валидации корректного текстового контента""" assert InputValidator.validate_text_content("Привет мир!") is True assert InputValidator.validate_text_content("Текст с цифрами 123") is True assert InputValidator.validate_text_content("A" * 4000) is True def test_validate_text_content_invalid(self): """Тест валидации некорректного текстового контента""" assert InputValidator.validate_text_content("") is False assert InputValidator.validate_text_content("A" * 4001) is False assert InputValidator.validate_text_content("Текст с