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

188 lines
12 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 тесты, которые проверяют базовую функциональность создания плана питания:
- **Создание CreatePlanCubit** - проверяет корректное создание cubit'а
- **Отображение полей формы** - проверяет наличие всех необходимых полей
- **Обновление полей** - проверяет корректное обновление полей при вводе данных
- **Выбор типа плана** - проверяет функциональность выбора типа плана питания
- **Продолжительность плана** - проверяет выбор продолжительности
- **Статус плана** - проверяет выбор статуса (активный, черновик, личный)
- **Опции плана** - проверяет настройку опций плана питания
- **Отображение лейблов** - проверяет корректное отображение подписей полей
- **Placeholder текст** - проверяет отображение подсказок в полях
- **Кнопка публикации** - проверяет наличие и функциональность кнопки
- **Обработка нажатий** - проверяет корректную обработку нажатий на кнопки
- **Состояния загрузки** - проверяет отображение индикатора загрузки
- **Сообщения об ошибках** - проверяет отображение ошибок
- **Сообщения об успехе** - проверяет отображение сообщений об успешном выполнении
- **Валидация полей** - проверяет отображение ошибок валидации
- **Полная форма** - проверяет отображение всех полей формы
- **Опции типов планов** - проверяет отображение доступных типов планов
- **Опции продолжительности** - проверяет отображение доступных продолжительностей
- **Опции с ценами** - проверяет отображение опций с ценообразованием
### 2. `advanced_widget_test.dart`
Продвинутые тесты, которые работают с реальными виджетами приложения:
- **PlanTypeChoiceWidget** - тестирует виджет выбора типа плана питания
- **PlanDurationDropDownWidget** - тестирует виджет выбора продолжительности
- **OptionWidget** - тестирует виджет настройки опций
- **Интерактивность** - тестирует взаимодействие с виджетами
- **Макет экрана** - тестирует общий макет экрана создания плана питания
- **Валидация** - тестирует валидацию с реальными виджетами
- **Настройка опций** - тестирует функциональность настройки опций
- **Выбор изображения** - тестирует функциональность выбора изображения
- **Тарифные планы** - тестирует отображение различных тарифных планов
### 3. `integration_widget_test.dart`
Интеграционные тесты для полного экрана создания плана питания:
- **CreatePlanScreen** - тестирует весь экран создания плана питания
- **Workflow создания** - тестирует полный процесс создания плана питания
- **Валидация формы** - проверяет валидацию всей формы
- **Состояния успеха/ошибки** - тестирует различные состояния
- **Редактирование плана** - тестирует режим редактирования
- **Загрузка** - тестирует состояние загрузки
- **Опции плана** - тестирует настройку опций плана питания
## Запуск тестов
### Запуск всех тестов создания плана питания:
```bash
flutter test test/features/create_plan/
```
### Запуск конкретного файла тестов:
```bash
# Базовые тесты (рекомендуется)
flutter test test/features/create_plan/basic_widget_test.dart
# Продвинутые тесты с реальными виджетами
flutter test test/features/create_plan/advanced_widget_test.dart
# Интеграционные тесты
flutter test test/features/create_plan/integration_widget_test.dart
```
## Структура тестов
Все тесты используют:
- **Mockito** для создания мок-объектов
- **Flutter Test** для widget тестирования
- **BlocProvider** для управления состоянием
- **Key** для поиска элементов по ключам
## Покрытие тестами
Тесты покрывают:
- ✅ Создание и инициализация CreatePlanCubit
- ✅ Отображение всех полей формы (название, описание, продолжительность, статус)
- ✅ Выбор типа плана питания (похудение, фитнес, здоровье, поведение)
- ✅ Выбор продолжительности плана (7, 14, 21, 30 дней)
- ✅ Выбор статуса плана (активный, черновик, личный)
- ✅ Настройка опций плана питания
- ✅ Ввод данных в поля
- ✅ Валидация полей
- ✅ Обработка состояний (загрузка, ошибка, успех)
- ✅ Интерактивность (нажатия, ввод текста, выбор опций)
- ✅ Отображение лейблов и подсказок
- ✅ Настройка опций с ценообразованием
- ✅ Выбор изображения плана питания
- ✅ Редактирование существующих планов
- ✅ Тарифные планы (базовый, премиум)
## Типы планов питания
Тесты покрывают следующие типы планов:
- **Похудение** - план для снижения веса
- **Фитнес** - план для активного образа жизни
- **Здоровье** - план для общего оздоровления
- **Поведение** - план для изменения пищевых привычек
## Продолжительности планов
Тесты покрывают следующие продолжительности:
- **7 дней** - недельный план
- **14 дней** - двухнедельный план
- **21 день** - трехнедельный план
- **30 дней** - месячный план
## Статусы планов
Тесты покрывают следующие статусы:
- **Активный** - публичный план питания
- **Черновик** - неопубликованный план
- **Личный** - приватный план
## Опции планов питания
Тесты покрывают настройку опций:
- **Базовая опция** - включает базовое меню и консультации
- **Премиум опция** - включает расширенное меню и персональные консультации
- **Ценообразование** - настройка цен для различных опций
- **Описания опций** - детальное описание каждой опции
## Зависимости
Тесты используют следующие пакеты:
- `flutter_test` - основной пакет для тестирования
- `mockito` - для создания мок-объектов
- `flutter_bloc` - для тестирования BLoC/Cubit
- `build_runner` - для генерации мок-файлов
## Генерация мок-файлов
После изменения тестов запустите:
```bash
dart run build_runner build --delete-conflicting-outputs
```
Это сгенерирует необходимые `.mocks.dart` файлы.
## Результаты тестирования
**Базовые тесты**: ✅ 21 тест прошел успешно
- Покрывают основную функциональность создания плана питания
- Стабильны и быстры в выполнении
- Рекомендуются для регулярного запуска
**Продвинутые тесты**: Требуют реальных виджетов приложения
- Тестируют интеграцию с реальными компонентами
- Могут быть нестабильными при изменениях в UI
**Интеграционные тесты**: Полное тестирование экрана
- Тестируют весь workflow создания плана питания
- Требуют настройки зависимостей
## Особенности планов питания
Планы питания отличаются от диет и рецептов:
### Отличия от диет:
- **Коммерческая направленность** - планы питания предназначены для продажи
- **Опции и тарифы** - возможность настройки различных опций с разными ценами
- **Типы планов** - более специфичные типы (похудение, фитнес, здоровье, поведение)
- **Продолжительность** - гибкая настройка продолжительности
### Отличия от рецептов:
- **Структурированность** - планы питания имеют четкую структуру с опциями
- **Ценообразование** - встроенная система ценообразования
- **Коммерческий характер** - предназначены для монетизации
- **Комплексность** - включают не только рецепты, но и консультации
## Модели данных
Тесты работают с моделями:
- **CreatePlanModel** - модель для создания плана питания
- **PlanModel** - модель плана питания
- **PlanType** - тип плана питания (slim, fit, wellness, behavior)
- **PacketOptions** - опции пакета плана питания
- **PlanValidationState** - состояние валидации плана питания
- **OptionValidationState** - состояние валидации опций