feat(test): enhance internet connection tests with dotenv integration and async handling

This commit is contained in:
mso7nueh
2025-12-01 23:54:41 +03:00
parent 965ae2f02b
commit d0becb9e11

View File

@@ -1,6 +1,7 @@
import 'package:eatvio_app/core/internet_connection_cubit/internet_connection_cubit.dart';
import 'package:eatvio_app/core/internet_connection_cubit/internet_connection_state.dart';
import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
@@ -10,7 +11,15 @@ void main() {
late InternetConnectionCubit cubit;
const MethodChannel connectivityChannel = MethodChannel('dev.fluttercommunity.plus/connectivity');
setUp(() {
setUp(() async {
// Инициализируем dotenv для тестов
dotenv.loadFromString(envString: '''
BASE_URL=https://api.example.com
DEV_BASE_URL=https://dev-api.example.com
GOOGLE_CHECK_URL=https://www.google.com
YANDEX_CHECK_URL=https://ya.ru
''');
// Мокируем MethodChannel для connectivity
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(
connectivityChannel,
@@ -37,20 +46,27 @@ void main() {
}
});
test('начальное состояние - isInternetAvailable = true', () {
test('начальное состояние - isInternetAvailable = true', () async {
cubit = InternetConnectionCubit();
// Ждем завершения асинхронных операций, запущенных в конструкторе
await Future.delayed(const Duration(milliseconds: 500));
expect(cubit.state.isInternetAvailable, isTrue);
});
test('checkConnection - успешная проверка с интернетом', () async {
cubit = InternetConnectionCubit();
// Ждем немного, чтобы cubit инициализировался
await Future.delayed(const Duration(milliseconds: 100));
// Ждем завершения асинхронных операций, запущенных в конструкторе
await Future.delayed(const Duration(milliseconds: 500));
// Проверяем, что метод checkConnection не выбрасывает исключений
await cubit.checkConnection();
// Ждем завершения обновления состояния
await Future.delayed(const Duration(milliseconds: 500));
// Состояние должно быть определено (true или false в зависимости от реального состояния)
expect(cubit.state, isA<InternetConnectionState>());
});
@@ -60,16 +76,24 @@ void main() {
// так как Connectivity создается внутри cubit
// Оставим базовую проверку, что метод не падает
cubit = InternetConnectionCubit();
await Future.delayed(const Duration(milliseconds: 100));
// Ждем завершения асинхронных операций, запущенных в конструкторе
await Future.delayed(const Duration(milliseconds: 500));
// Просто проверяем, что метод выполняется без ошибок
await cubit.checkConnection();
// Ждем завершения обновления состояния
await Future.delayed(const Duration(milliseconds: 500));
expect(cubit.state, isA<InternetConnectionState>());
});
test('close - корректно закрывает cubit и освобождает ресурсы', () async {
cubit = InternetConnectionCubit();
await Future.delayed(const Duration(milliseconds: 100));
// Ждем завершения асинхронных операций, запущенных в конструкторе
await Future.delayed(const Duration(milliseconds: 500));
await cubit.close();