# 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** - состояние валидации опций