# Widget Tests для регистрации Этот каталог содержит widget тесты для функциональности регистрации пользователей в приложении Eatvio. ## Файлы тестов ### 1. `basic_widget_test.dart` Основные widget тесты, которые проверяют базовую функциональность регистрации: - **Создание RegistrationCubit** - проверяет корректное создание cubit'а - **Отображение полей формы** - проверяет наличие всех необходимых полей - **Обновление полей** - проверяет корректное обновление полей при вводе данных - **Выбор пола** - проверяет функциональность выбора пола пользователя - **Дата рождения** - проверяет выбор даты рождения - **Номер телефона** - проверяет ввод номера телефона - **Рост и вес** - проверяет ввод физических параметров - **Отображение лейблов** - проверяет корректное отображение подписей полей - **Placeholder текст** - проверяет отображение подсказок в полях - **Кнопка регистрации** - проверяет наличие и функциональность кнопки - **Обработка нажатий** - проверяет корректную обработку нажатий на кнопки - **Состояния загрузки** - проверяет отображение индикатора загрузки - **Сообщения об ошибках** - проверяет отображение ошибок - **Сообщения об успехе** - проверяет отображение сообщений об успешном выполнении - **Валидация полей** - проверяет отображение ошибок валидации - **Полная форма** - проверяет отображение всех полей формы - **Шаги регистрации** - проверяет отображение прогресса регистрации - **Условия использования** - проверяет чекбокс согласия с условиями - **Дополнительная информация** - проверяет поля для дополнительных данных ### 2. `advanced_widget_test.dart` Продвинутые тесты, которые работают с реальными виджетами приложения: - **NameScreen** - тестирует экран ввода имени и фамилии - **CredentialsScreen** - тестирует экран ввода email и пароля - **GenderScreen** - тестирует экран выбора пола - **DateOfBirthScreen** - тестирует экран выбора даты рождения - **Интерактивность** - тестирует взаимодействие с виджетами - **Макет экрана** - тестирует общий макет экрана регистрации - **Валидация** - тестирует валидацию с реальными виджетами - **Прогресс регистрации** - тестирует отображение прогресса - **Согласие с условиями** - тестирует функциональность согласия ### 3. `integration_widget_test.dart` Интеграционные тесты для полного экрана регистрации: - **RegistrationScreen** - тестирует весь экран регистрации - **Workflow регистрации** - тестирует полный процесс регистрации - **Валидация формы** - проверяет валидацию всей формы - **Состояния успеха/ошибки** - тестирует различные состояния - **Редактирование данных** - тестирует режим редактирования - **Загрузка** - тестирует состояние загрузки - **Дополнительная информация** - тестирует все дополнительные поля - **Физические параметры** - тестирует ввод физических данных - **Информация о здоровье** - тестирует медицинские данные - **Условия и политики** - тестирует согласие с условиями ## Запуск тестов ### Запуск всех тестов регистрации: ```bash flutter test test/features/registration/ ``` ### Запуск конкретного файла тестов: ```bash # Базовые тесты (рекомендуется) flutter test test/features/registration/basic_widget_test.dart # Продвинутые тесты с реальными виджетами flutter test test/features/registration/advanced_widget_test.dart # Интеграционные тесты flutter test test/features/registration/integration_widget_test.dart ``` ## Структура тестов Все тесты используют: - **Mockito** для создания мок-объектов - **Flutter Test** для widget тестирования - **BlocProvider** для управления состоянием - **Key** для поиска элементов по ключам ## Покрытие тестами Тесты покрывают: - ✅ Создание и инициализация RegistrationCubit - ✅ Отображение всех полей формы (имя, фамилия, email, пароль, телефон) - ✅ Выбор пола (мужской, женский) - ✅ Выбор даты рождения - ✅ Ввод номера телефона - ✅ Ввод физических параметров (рост, вес) - ✅ Ввод дополнительной информации (аллергии, лекарства, спорт) - ✅ Ввод данных в поля - ✅ Валидация полей - ✅ Обработка состояний (загрузка, ошибка, успех) - ✅ Интерактивность (нажатия, ввод текста, выбор опций) - ✅ Отображение лейблов и подсказок - ✅ Функциональность кнопки регистрации - ✅ Прогресс регистрации (15 шагов) - ✅ Согласие с условиями использования - ✅ Согласие с политикой конфиденциальности - ✅ Физические измерения (обхваты) - ✅ Медицинская информация (давление, гипотония, гипертония) - ✅ Предпочтения в еде (любимые и нелюбимые продукты) ## Типы полей регистрации Тесты покрывают следующие типы полей: ### Основная информация: - **Имя** - обязательное поле - **Фамилия** - обязательное поле - **Email** - обязательное поле с валидацией - **Пароль** - обязательное поле с маскировкой - **Подтверждение пароля** - обязательное поле с проверкой совпадения ### Личные данные: - **Пол** - выбор из двух вариантов (мужской, женский) - **Дата рождения** - выбор даты - **Номер телефона** - ввод с маской - **Рост** - числовое поле в сантиметрах - **Вес** - числовое поле в килограммах ### Физические параметры: - **Обхват груди** - числовое поле в сантиметрах - **Обхват талии** - числовое поле в сантиметрах - **Обхват бедер** - числовое поле в сантиметрах ### Медицинская информация: - **Верхнее давление** - числовое поле - **Нижнее давление** - числовое поле - **Гипотония** - чекбокс - **Гипертония** - чекбокс ### Дополнительная информация: - **Аллергии** - многострочное текстовое поле - **Принимаемые лекарства** - многострочное текстовое поле - **Любимые виды спорта** - многострочное текстовое поле - **Любимые продукты** - многострочное текстовое поле - **Нелюбимые продукты** - многострочное текстовое поле - **Дополнительная информация** - многострочное текстовое поле ### Согласия: - **Условия использования** - чекбокс - **Политика конфиденциальности** - чекбокс ## Шаги регистрации Регистрация состоит из 15 шагов: 1. **Основная информация** - имя, фамилия 2. **Учетные данные** - email, пароль 3. **Пол** - выбор пола 4. **Дата рождения** - выбор даты 5. **Номер телефона** - ввод телефона 6. **Рост** - ввод роста 7. **Вес** - ввод веса 8. **Обхват груди** - ввод обхвата груди 9. **Обхват талии** - ввод обхвата талии 10. **Обхват бедер** - ввод обхвата бедер 11. **Давление** - ввод показателей давления 12. **Медицинские условия** - гипотония, гипертония 13. **Аллергии** - информация об аллергиях 14. **Лекарства** - принимаемые лекарства 15. **Дополнительная информация** - спорт, еда, прочее ## Зависимости Тесты используют следующие пакеты: - `flutter_test` - основной пакет для тестирования - `mockito` - для создания мок-объектов - `flutter_bloc` - для тестирования BLoC/Cubit - `build_runner` - для генерации мок-файлов ## Генерация мок-файлов После изменения тестов запустите: ```bash dart run build_runner build --delete-conflicting-outputs ``` Это сгенерирует необходимые `.mocks.dart` файлы. ## Результаты тестирования **Базовые тесты**: ✅ 24 теста прошли успешно - Покрывают основную функциональность регистрации - Стабильны и быстры в выполнении - Рекомендуются для регулярного запуска **Продвинутые тесты**: Требуют реальных виджетов приложения - Тестируют интеграцию с реальными компонентами - Могут быть нестабильными при изменениях в UI **Интеграционные тесты**: Полное тестирование экрана - Тестируют весь workflow регистрации - Требуют настройки зависимостей ## Особенности регистрации Регистрация в Eatvio имеет следующие особенности: ### Многоэтапность: - **15 шагов** - регистрация разбита на логические этапы - **Прогресс-бар** - отображение текущего прогресса - **Навигация** - возможность перехода между шагами ### Комплексность данных: - **Личная информация** - имя, фамилия, пол, дата рождения - **Контактные данные** - email, телефон - **Физические параметры** - рост, вес, обхваты - **Медицинская информация** - давление, заболевания - **Предпочтения** - спорт, еда, аллергии ### Валидация: - **Обязательные поля** - проверка заполнения - **Формат данных** - валидация email, телефона - **Совпадение паролей** - проверка подтверждения - **Согласия** - обязательное согласие с условиями ### Безопасность: - **Маскировка паролей** - скрытие ввода паролей - **Валидация email** - проверка корректности email - **Согласие с условиями** - юридическая защита ## Модели данных Тесты работают с моделями: - **UserRegistrationSheet** - основная модель регистрации - **RegistrationState** - состояние процесса регистрации - **RegistrationCubit** - управление состоянием регистрации ## Интеграция с аналитикой Регистрация интегрирована с аналитикой: - **Отслеживание шагов** - аналитика прогресса регистрации - **Метрики конверсии** - отслеживание завершения регистрации - **A/B тестирование** - тестирование различных вариантов форм ## Локализация Тесты поддерживают локализацию: - **Русский язык** - основной язык интерфейса - **Многоязычность** - поддержка других языков - **Локализованные сообщения** - ошибки и подсказки ## Производительность Тесты оптимизированы для производительности: - **Быстрое выполнение** - минимальное время выполнения - **Эффективное использование ресурсов** - оптимизация памяти - **Параллельное выполнение** - возможность параллельного запуска