Ответ
Тестирование текстового поля name требует проверки функциональности, валидации, безопасности и удобства использования.
Основные категории проверок:
| Категория | Что проверять | Примеры тестовых данных / Действий |
|---|---|---|
| Валидные данные | Приём корректных значений согласно требованиям. | "John", "Анна", "O'Connor", "Van Damme", строка максимально допустимой длины. |
| Невалидные данные | Обработка ошибок и понятные сообщения пользователю. | Пустая строка, только пробелы, строка длиннее лимита, запрещённые символы (эмодзи, <>), SQL-инъекция (' OR '1'='1). |
| Граничные значения | Поведение на границах допустимых значений. | Минимальная длина (например, 2 символа), максимальная длина (например, 100 символов). Проверить ввод ровно 2, 100, 1 и 101 символ. |
| Безопасность | Защита от инъекций и некорректной обработки. | XSS (<script>alert(1)</script>), HTML-теги (<b>name</b>), специальные символы для формата данных (кавычки, запятые). |
| Функциональность UI | Поведение интерфейса. | Тримминг пробелов в начале/конце, реакция на Paste/Cut/Copy, ограничение длины в реальном времени, подсказки (placeholder), сообщения об ошибках. |
| Интеграция | Корректное сохранение и отображение данных. | Введённое имя корректно сохраняется в БД, отображается в профиле, в списках, используется в письмах. |
Пример комплексного теста (Python + pytest):
import html
def sanitize_and_validate_name(input_name: str, max_len: int = 100) -> tuple[bool, str]:
"""Функция очистки и валидации имени."""
# 1. Тримминг
trimmed_name = input_name.strip()
# 2. Проверка на пустоту после тримминга
if not trimmed_name:
return False, "Name cannot be empty"
# 3. Проверка длины
if len(trimmed_name) > max_len:
return False, f"Name exceeds maximum length of {max_len}"
# 4. Базовая санитизация (экранирование HTML)
safe_name = html.escape(trimmed_name)
# В реальности здесь могут быть дополнительные правила (допустимые символы и т.д.)
return True, safe_name
# Тесты
def test_name_field_validation():
# Валидные случаи
is_valid, result = sanitize_and_validate_name(" John Doe ")
assert is_valid == True
assert result == "John Doe" # Проверяем тримминг
# Невалидные случаи
assert sanitize_and_validate_name(" ")[0] == False # Только пробелы
assert sanitize_and_validate_name("A" * 101)[0] == False # Превышение длины
# Безопасность
is_valid, result = sanitize_and_validate_name("<script>alert('xss')</script>")
# Функция должна вернуть экранированную строку
assert result == "<script>alert('xss')</script>"