import 'package:eatvio_app/core/enums/base_state.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:eatvio_app/features/chat/presentation/bloc/chats_cubit/chats_cubit.dart'; import 'package:eatvio_app/features/chat/presentation/bloc/chats_cubit/chats_state.dart'; import 'package:eatvio_app/features/chat/presentation/pages/chats_screen.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'chats_screen_test.mocks.dart'; @GenerateNiceMocks([MockSpec()]) void main() { group('ChatsScreen', () { late MockChatsCubit mockChatsCubit; setUp(() { mockChatsCubit = MockChatsCubit(); when(mockChatsCubit.state).thenReturn( ChatsState( chatRooms: [], state: BaseState.loading, isLoadingMoreChats: false, ), ); when(mockChatsCubit.stream).thenAnswer((_) => Stream.value( ChatsState( chatRooms: [], state: BaseState.loading, isLoadingMoreChats: false, ), )); }); Widget createTestWidget() { return MaterialApp( theme: ThemeHelper().themeData(), localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('ru')], home: BlocProvider( create: (context) => mockChatsCubit, child: const ChatsScreen(), ), ); } testWidgets('displays screen', (WidgetTester tester) async { await tester.pumpWidget(createTestWidget()); await tester.pump(); expect(find.byType(ChatsScreen), findsOneWidget); }); testWidgets('displays search field', (WidgetTester tester) async { await tester.pumpWidget(createTestWidget()); await tester.pump(); expect(find.text('Поиск'), findsOneWidget); }); testWidgets('displays loading state', (WidgetTester tester) async { when(mockChatsCubit.state).thenReturn( ChatsState( chatRooms: [], state: BaseState.loading, isLoadingMoreChats: false, ), ); await tester.pumpWidget(createTestWidget()); await tester.pump(); // Screen should be displayed expect(find.byType(ChatsScreen), findsOneWidget); }); testWidgets('displays error state', (WidgetTester tester) async { when(mockChatsCubit.state).thenReturn( ChatsState( chatRooms: [], state: BaseState.error, isLoadingMoreChats: false, ), ); await tester.pumpWidget(createTestWidget()); await tester.pump(); // Screen should be displayed expect(find.byType(ChatsScreen), findsOneWidget); }); testWidgets('displays screen correctly', (WidgetTester tester) async { await tester.pumpWidget(createTestWidget()); await tester.pump(); // Screen should be displayed expect(find.byType(ChatsScreen), findsOneWidget); // Note: getChatRooms is called in initState, which is hard to test without proper setup }); }); }