Files
BudgetApp/test/test_config.dart
T
2025-08-02 15:25:25 +03:00

77 lines
2.9 KiB
Dart

import 'dart:io';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:budget_app/models/ai_settings.dart';
/// Конфигурация для тестовой среды
class TestConfig {
static bool _initialized = false;
/// Инициализация тестовой среды
static Future<void> initialize() async {
if (_initialized) return;
try {
// Загружаем .env файл напрямую, так как flutter_dotenv.load() не работает в тестах
final testEnvFile = File('test/.env');
final rootEnvFile = File('.env');
if (testEnvFile.existsSync()) {
final content = await testEnvFile.readAsString();
dotenv.testLoad(fileInput: content);
print('✓ Test configuration loaded from test/.env file');
} else if (rootEnvFile.existsSync()) {
final content = await rootEnvFile.readAsString();
dotenv.testLoad(fileInput: content);
print('✓ Test configuration loaded from root .env file');
} else {
throw Exception('No .env files found');
}
} catch (e) {
// .env файл не найден, используем значения по умолчанию
print('Warning: .env file not found, using default test configuration');
print('Error details: $e');
// Инициализируем dotenv с пустыми значениями если не можем загрузить файл
dotenv.testLoad(fileInput: '''
RUN_INTEGRATION_TESTS=false
TEST_AI_TIMEOUT_SECONDS=30
''');
}
_initialized = true;
}
/// Получить настройки AI для тестов
static AiSettings getTestAiSettings() {
final apiKey = dotenv.env['OPENROUTER_API_KEY'];
final timeout = int.tryParse(dotenv.env['TEST_AI_TIMEOUT_SECONDS'] ?? '30') ?? 30;
final defaultModel = dotenv.env['AI_DEFAULT_MODEL'] ?? 'google/gemini-2.5-flash';
return AiSettings(
apiKey: apiKey,
baseUrl: 'https://openrouter.ai/api/v1',
defaultModel: defaultModel,
timeoutSeconds: timeout,
temperature: 0.1, // Низкая температура для более предсказуемых результатов
maxTokens: 500,
isEnabled: apiKey != null && apiKey.isNotEmpty,
);
}
/// Проверить, должны ли запускаться интеграционные тесты
static bool shouldRunIntegrationTests() {
final runTests = dotenv.env['RUN_INTEGRATION_TESTS']?.toLowerCase();
return runTests == 'true' || runTests == '1';
}
/// Проверить, настроен ли AI для тестов
static bool isAiConfigured() {
final apiKey = dotenv.env['OPENROUTER_API_KEY'];
return apiKey != null && apiKey.isNotEmpty;
}
/// Получить тестовый API ключ
static String? getTestApiKey() {
return dotenv.env['OPENROUTER_API_KEY'];
}
}