Files
eatvio_app/test/features/registration/README.md
2025-10-21 21:02:17 +03:00

254 lines
15 KiB
Markdown
Raw 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.
# 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 тестирование** - тестирование различных вариантов форм
## Локализация
Тесты поддерживают локализацию:
- **Русский язык** - основной язык интерфейса
- **Многоязычность** - поддержка других языков
- **Локализованные сообщения** - ошибки и подсказки
## Производительность
Тесты оптимизированы для производительности:
- **Быстрое выполнение** - минимальное время выполнения
- **Эффективное использование ресурсов** - оптимизация памяти
- **Параллельное выполнение** - возможность параллельного запуска