forked from eatvio/eatvio_app
148 lines
7.8 KiB
Markdown
148 lines
7.8 KiB
Markdown
# Интеграционные тесты создания рецепта
|
||
|
||
Этот набор интеграционных тестов покрывает полный пользовательский путь создания нового рецепта в приложении Eatvio.
|
||
|
||
## Структура файлов
|
||
|
||
- `create_recipe_test.dart` - Основные интеграционные тесты
|
||
- `create_recipe_helpers.dart` - Helper функции для тестирования
|
||
- `README.md` - Документация
|
||
|
||
## Тестовые сценарии
|
||
|
||
### 1. Полное создание рецепта
|
||
**Файл:** `create_recipe_test.dart` - `should create and publish a new recipe successfully`
|
||
|
||
**Описание:** Тестирует полный пользовательский путь создания рецепта с заполнением всех полей.
|
||
|
||
**Шаги:**
|
||
1. Запуск приложения и вход в систему
|
||
2. Навигация к экрану создания рецепта
|
||
3. Заполнение основной информации (название, тип, порции, калории, время)
|
||
4. Добавление тегов
|
||
5. Добавление ингредиентов
|
||
6. Добавление шагов приготовления
|
||
7. Симуляция добавления изображения
|
||
8. Публикация рецепта
|
||
9. Проверка успешного перехода
|
||
|
||
### 2. Валидация полей
|
||
**Файл:** `create_recipe_test.dart` - `should validate required fields before publishing`
|
||
|
||
**Описание:** Проверяет, что валидация обязательных полей работает корректно.
|
||
|
||
**Шаги:**
|
||
1. Запуск приложения и вход в систему
|
||
2. Навигация к экрану создания рецепта
|
||
3. Попытка публикации без заполнения полей
|
||
4. Проверка, что остались на экране создания (валидация не прошла)
|
||
|
||
### 3. Минимальное создание рецепта
|
||
**Файл:** `create_recipe_test.dart` - `should create recipe with minimal required fields`
|
||
|
||
**Описание:** Тестирует создание рецепта с минимально необходимыми полями.
|
||
|
||
**Шаги:**
|
||
1. Запуск приложения и вход в систему
|
||
2. Навигация к экрану создания рецепта
|
||
3. Заполнение только обязательных полей
|
||
4. Добавление минимума ингредиентов
|
||
5. Симуляция добавления изображения
|
||
6. Публикация рецепта
|
||
7. Проверка успешного перехода
|
||
|
||
## Helper функции
|
||
|
||
### Навигация
|
||
- `navigateToCreateRecipeScreen()` - Переход к экрану создания рецепта
|
||
|
||
### Заполнение формы
|
||
- `fillRecipeBasicInfo()` - Заполнение основной информации о рецепте
|
||
- `selectRecipeType()` - Выбор типа рецепта
|
||
- `addTags()` - Добавление тегов
|
||
- `addIngredients()` - Добавление ингредиентов
|
||
- `addCookingSteps()` - Добавление шагов приготовления
|
||
|
||
### Публикация и проверки
|
||
- `publishRecipe()` - Публикация рецепта
|
||
- `verifyRecipePublished()` - Проверка успешной публикации
|
||
- `verifyValidationErrors()` - Проверка ошибок валидации
|
||
|
||
### Симуляция изображений
|
||
- `mockImageSelection()` - Симуляция выбора изображения для рецепта
|
||
- `mockStepImageSelection()` - Симуляция выбора изображения для шага
|
||
|
||
### Тестовые данные
|
||
- `createTestRecipeData()` - Создание набора тестовых данных
|
||
|
||
## Ключи для тестирования
|
||
|
||
В файле `lib/app_keys.dart` добавлены следующие ключи для стабильного тестирования:
|
||
|
||
### Основные поля
|
||
- `recipeCreateScreenTitleField` - Поле названия
|
||
- `recipeCreateScreenDescriptionField` - Поле описания
|
||
- `recipeCreateScreenTypeDropdown` - Выпадающий список типа рецепта
|
||
- `recipeCreateScreenPortionsField` - Поле количества порций
|
||
- `recipeCreateScreenCaloriesField` - Поле калорийности
|
||
|
||
### Время приготовления
|
||
- `recipeCreateScreenTotalHoursField` - Часы общего времени
|
||
- `recipeCreateScreenTotalMinutesField` - Минуты общего времени
|
||
- `recipeCreateScreenActiveHoursField` - Часы активного времени
|
||
- `recipeCreateScreenActiveMinutesField` - Минуты активного времени
|
||
|
||
### Теги и ингредиенты
|
||
- `recipeCreateScreenTagField` - Поле для ввода тега
|
||
- `recipeCreateScreenAddTagButton` - Кнопка добавления тега
|
||
- `recipeCreateScreenAddIngredientButton` - Кнопка добавления ингредиента
|
||
|
||
### Шаги приготовления
|
||
- `recipeCreateScreenAddStepButton` - Кнопка добавления шага
|
||
- `recipeCreateScreenStepDescriptionField` - Поле описания шага
|
||
- `recipeCreateScreenStepImageWidget` - Виджет изображения шага
|
||
|
||
### Изображения и публикация
|
||
- `recipeCreateScreenImageWidget` - Виджет основного изображения
|
||
- `recipeCreateScreenPublishButton` - Кнопка публикации
|
||
|
||
## Запуск тестов
|
||
|
||
```bash
|
||
# Запуск всех интеграционных тестов
|
||
flutter test integration_test/
|
||
|
||
# Запуск только тестов создания рецепта
|
||
flutter test integration_test/create_recipe/
|
||
|
||
# Запуск конкретного теста
|
||
flutter test integration_test/create_recipe/create_recipe_test.dart
|
||
```
|
||
|
||
## Требования
|
||
|
||
- Flutter SDK
|
||
- Настроенная тестовая среда (AppBuildType.tests)
|
||
- Тестовые учетные данные в .env файле
|
||
- Доступ к API бэкенда для тестирования
|
||
|
||
## Примечания
|
||
|
||
1. **Изображения**: В текущей реализации используется симуляция выбора изображений. Для полноценного тестирования рекомендуется добавить моки для `image_picker`.
|
||
|
||
2. **API взаимодействие**: Тесты взаимодействуют с реальным API бэкенда. Убедитесь, что тестовая среда настроена корректно.
|
||
|
||
3. **Время выполнения**: Тесты могут занимать значительное время из-за анимаций и API запросов. Используйте `pumpAndSettle()` с достаточными таймаутами.
|
||
|
||
4. **Стабильность**: Ключи для тестирования добавлены в UI компоненты для обеспечения стабильности тестов при изменениях в интерфейсе.
|
||
|
||
## Расширение тестов
|
||
|
||
Для добавления новых тестовых сценариев:
|
||
|
||
1. Создайте новый `testWidgets` в `create_recipe_test.dart`
|
||
2. Используйте существующие helper функции или создайте новые в `create_recipe_helpers.dart`
|
||
3. При необходимости добавьте новые ключи в `app_keys.dart`
|
||
4. Обновите документацию в этом файле
|
||
|