# Widget Tests для создания диеты Этот каталог содержит widget тесты для функциональности создания диеты в приложении Eatvio. ## Файлы тестов ### 1. `basic_widget_test.dart` Основные widget тесты, которые проверяют базовую функциональность создания диеты: - **Создание CreateDietCubit** - проверяет корректное создание cubit'а - **Отображение полей формы** - проверяет наличие всех необходимых полей - **Обновление полей** - проверяет корректное обновление полей при вводе данных - **Выбор типа диеты** - проверяет функциональность выбора типа диеты - **Продолжительность диеты** - проверяет выбор продолжительности - **Статус диеты** - проверяет выбор статуса (активная, черновик, личная) - **Отображение лейблов** - проверяет корректное отображение подписей полей - **Placeholder текст** - проверяет отображение подсказок в полях - **Кнопка публикации** - проверяет наличие и функциональность кнопки - **Обработка нажатий** - проверяет корректную обработку нажатий на кнопки - **Состояния загрузки** - проверяет отображение индикатора загрузки - **Сообщения об ошибках** - проверяет отображение ошибок - **Сообщения об успехе** - проверяет отображение сообщений об успешном выполнении - **Валидация полей** - проверяет отображение ошибок валидации - **Полная форма** - проверяет отображение всех полей формы - **Опции типов диет** - проверяет отображение доступных типов диет - **Опции продолжительности** - проверяет отображение доступных продолжительностей ### 2. `advanced_widget_test.dart` Продвинутые тесты, которые работают с реальными виджетами приложения: - **DietTypeChoiceWidget** - тестирует виджет выбора типа диеты - **DietDurationDropDownWidget** - тестирует виджет выбора продолжительности - **StatusDropDownWidget** - тестирует виджет выбора статуса - **Интерактивность** - тестирует взаимодействие с виджетами - **Макет экрана** - тестирует общий макет экрана создания диеты - **Валидация** - тестирует валидацию с реальными виджетами - **Планирование приемов пищи** - тестирует функциональность планирования - **Выбор изображения** - тестирует функциональность выбора изображения ### 3. `integration_widget_test.dart` Интеграционные тесты для полного экрана создания диеты: - **CreateDietScreen** - тестирует весь экран создания диеты - **Workflow создания** - тестирует полный процесс создания диеты - **Валидация формы** - проверяет валидацию всей формы - **Состояния успеха/ошибки** - тестирует различные состояния - **Редактирование диеты** - тестирует режим редактирования - **Загрузка** - тестирует состояние загрузки ## Запуск тестов ### Запуск всех тестов создания диеты: ```bash flutter test test/features/create_diet/ ``` ### Запуск конкретного файла тестов: ```bash # Базовые тесты (рекомендуется) flutter test test/features/create_diet/basic_widget_test.dart # Продвинутые тесты с реальными виджетами flutter test test/features/create_diet/advanced_widget_test.dart # Интеграционные тесты flutter test test/features/create_diet/integration_widget_test.dart ``` ## Структура тестов Все тесты используют: - **Mockito** для создания мок-объектов - **Flutter Test** для widget тестирования - **BlocProvider** для управления состоянием - **Key** для поиска элементов по ключам ## Покрытие тестами Тесты покрывают: - ✅ Создание и инициализация CreateDietCubit - ✅ Отображение всех полей формы (название, описание, продолжительность, статус) - ✅ Выбор типа диеты (веганская, мясная, углеводная, легкая) - ✅ Выбор продолжительности диеты (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` файлы. ## Результаты тестирования **Базовые тесты**: ✅ 19 тестов прошли успешно - Покрывают основную функциональность создания диеты - Стабильны и быстры в выполнении - Рекомендуются для регулярного запуска **Продвинутые тесты**: Требуют реальных виджетов приложения - Тестируют интеграцию с реальными компонентами - Могут быть нестабильными при изменениях в UI **Интеграционные тесты**: Полное тестирование экрана - Тестируют весь workflow создания диеты - Требуют настройки зависимостей