import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:eatvio_app/features/chat/models/chat_message_model.dart'; import 'package:eatvio_app/features/chat/presentation/widgets/chat_bubble_widget.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { group('Chat Basic Widget Tests', () { Widget createTestWidget(Widget child) { return MaterialApp( theme: ThemeHelper().themeData(), localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('ru')], home: Scaffold(body: SingleChildScrollView(child: child)), ); } testWidgets('ChatBubbleWidget - отображает сообщение', (WidgetTester tester) async { final widget = ChatBubbleWidget( sendTime: DateTime.now(), text: 'Test message', isCurrentUser: true, mediaData: const [], isRead: false, messageState: MessageState.sent, messageUuid: 'uuid-1', userSlug: 'user-slug', ); await tester.pumpWidget(createTestWidget(widget)); await tester.pumpAndSettle(); expect(find.text('Test message'), findsOneWidget); }); testWidgets('ChatBubbleWidget - отображает сообщение от другого пользователя', (WidgetTester tester) async { final widget = ChatBubbleWidget( sendTime: DateTime.now(), text: 'Other user message', isCurrentUser: false, mediaData: const [], isRead: false, messageState: MessageState.sent, messageUuid: 'uuid-2', userSlug: 'user-slug', ); await tester.pumpWidget(createTestWidget(widget)); await tester.pumpAndSettle(); expect(find.text('Other user message'), findsOneWidget); }); testWidgets('ChatBubbleWidget - отображает сообщение в состоянии загрузки', (WidgetTester tester) async { // Note: This widget may require ChatRoomCubit in context for error state // For now, we'll test the basic rendering final widget = ChatBubbleWidget( sendTime: DateTime.now(), text: 'Loading message', isCurrentUser: true, mediaData: const [], isRead: false, messageState: MessageState.loading, messageUuid: 'uuid-3', userSlug: 'user-slug', ); await tester.pumpWidget(createTestWidget(widget)); // Don't use pumpAndSettle as it may wait for animations that require context await tester.pump(); // The widget should render, even if some interactions require context expect(find.text('Loading message'), findsOneWidget); }); testWidgets('ChatBubbleWidget - отображает сообщение с ошибкой', (WidgetTester tester) async { final widget = ChatBubbleWidget( sendTime: DateTime.now(), text: 'Error message', isCurrentUser: true, mediaData: const [], isRead: false, messageState: MessageState.error, messageUuid: 'uuid-4', userSlug: 'user-slug', ); await tester.pumpWidget(createTestWidget(widget)); await tester.pumpAndSettle(); expect(find.text('Error message'), findsOneWidget); }); }); }