import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:ikar/backend/api.dart'; import 'package:ikar/core/protocol/opcode_map.dart'; import 'package:shared_preferences/shared_preferences.dart'; Future _failureOf(Future request) async { try { await request; return null; } catch (error) { return error; } } void main() { TestWidgetsFlutterBinding.ensureInitialized(); setUp(() => SharedPreferences.setMockInitialValues({})); test('без подключения запрос отклоняется сразу', () async { final api = Api(); addTearDown(api.dispose); final failure = await _failureOf( api.sendRequest(Opcode.contactPhotos, const {}), ); expect(failure, isA()); expect((failure as StateError).message, contains('CONTACT_PHOTOS')); }); test('запрос во время подключения ждёт сессию, а не падает', () async { final api = Api(); addTearDown(api.dispose); unawaited(api.connect()); expect(api.state, SessionState.connecting); var settled = false; final failure = _failureOf( api.sendRequest(Opcode.contactPhotos, const {}), ).whenComplete(() => settled = true); await Future.microtask(() {}); expect(settled, isFalse); await api.disconnect(); final error = await failure; expect(error, isA()); expect((error as StateError).message, isNot(contains('CONTACT_PHOTOS'))); }); }