forked from eatvio/eatvio_app
feat(tests): widget and unit tests for chat
This commit is contained in:
102
test/features/chat/presentation/widgets/basic_widget_test.dart
Normal file
102
test/features/chat/presentation/widgets/basic_widget_test.dart
Normal file
@@ -0,0 +1,102 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user