Тесты для AiTransactionProcessingService
Данная тестовая система покрывает функциональность обработки SMS сообщений с помощью ИИ.
Структура тестов
Unit тесты (test/services/)
- ai_transaction_processing_service_test.dart - основные unit тесты
- Тестирование валидации данных от ИИ
- Проверка парсинга ответов
- Создание правил из обработанных транзакций
- Обработка ошибок и граничных случаев
Интеграционные тесты (test/integration/)
- ai_processing_integration_test.dart - тесты с реальным ИИ
- Обработка реальных SMS с помощью OpenRouter
- Тестирование производительности
- Обработка ошибок API
Вспомогательные файлы (test/helpers/)
- test_data.dart - примеры SMS сообщений
- ai_responses.dart - заготовленные ответы ИИ
- test_objects.dart - фабрика тестовых объектов
Моки и фейки (test/mocks/)
- mocks.dart - автогенерированные моки
- fake_ai_service.dart - настраиваемый фейковый AI сервис
- fake_repositories.dart - in-memory репозитории
Настройка для запуска
1. Установка зависимостей
flutter pub get
flutter packages pub run build_runner build
2. Конфигурация AI токенов (опционально)
Скопируйте .env.example в .env и заполните:
cp .env.example .env
Добавьте ваш API ключ:
OPENROUTER_API_KEY=your_api_key_here
RUN_INTEGRATION_TESTS=true
3. Запуск тестов
Unit тесты (быстрые, не требуют AI):
flutter test test/services/
Все тесты включая интеграционные:
flutter test
Только интеграционные тесты:
flutter test test/integration/
Типы тестов
🏃♂️ Unit тесты (всегда запускаются)
- Используют моки и фейки
- Быстрые (< 1 секунды)
- Не требуют внешних зависимостей
- Покрывают всю логику валидации и парсинга
🌐 Интеграционные тесты (требуют настройки)
- Используют реальный AI сервис
- Медленные (могут занимать минуты)
- Требуют AI API ключ
- Тестируют реальное взаимодействие с OpenRouter
Конфигурация CI/CD
GitHub Actions
Добавьте в секреты репозитория:
AI_API_KEY=your_openrouter_key
RUN_INTEGRATION_TESTS=true
Локальная разработка
# Только unit тесты
flutter test test/services/
# С интеграционными (если настроен .env)
RUN_INTEGRATION_TESTS=true flutter test
Тестовые данные
SMS сообщения (TestSmsData)
- Транзакционные: покупки, снятие наличных, переводы
- Не-транзакционные: реклама, уведомления, коды подтверждения
- Граничные случаи: пустые сообщения, эмодзи, иностранные языки
Ответы ИИ (TestAiResponses)
- Корректные ответы для каждого типа SMS
- Некорректные форматы для тестирования обработки ошибок
- Автоматическое сопоставление SMS -> ответ ИИ
Тестовые объекты (TestObjects)
- Готовые категории, транзакции, правила
- Фабричные методы для создания объектов
- Консистентные данные для всех тестов
Отладка тестов
Включить подробные логи:
VERBOSE_TESTS=true flutter test
Запустить конкретный тест:
flutter test test/services/ai_transaction_processing_service_test.dart -n "should process transaction SMS"
Пропустить интеграционные тесты:
RUN_INTEGRATION_TESTS=false flutter test
Покрытие кода
Тесты покрывают:
- ✅ Парсинг ответов ИИ
- ✅ Валидация данных транзакций и не-транзакций
- ✅ Создание PrefilledTransaction объектов
- ✅ Генерация AI правил
- ✅ Обработка ошибок и исключений
- ✅ Интеграция с репозиториями
- ✅ Реальные запросы к ИИ (в интеграционных тестах)
Добавление новых тестов
- Unit тесты: добавьте в
ai_transaction_processing_service_test.dart - Новые SMS примеры: обновите
test_data.dart - Новые ответы ИИ: обновите
ai_responses.dart - Интеграционные сценарии: добавьте в
ai_processing_integration_test.dart
Известные ограничения
- Интеграционные тесты требуют рабочего интернета
- API ключи не должны коммититься в репозиторий
- Некоторые тесты могут быть медленными из-за ограничений AI API
- В CI окружении интеграционные тесты могут быть отключены