diff --git a/packages/stream_chat_flutter/test/src/message_list_view_test.dart b/packages/stream_chat_flutter/test/src/message_list_view_test.dart index ae3910c1..f332694b 100644 --- a/packages/stream_chat_flutter/test/src/message_list_view_test.dart +++ b/packages/stream_chat_flutter/test/src/message_list_view_test.dart @@ -1,6 +1,3 @@ -import 'dart:convert'; -import 'dart:typed_data'; - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -26,14 +23,14 @@ void main() { when(() => channel.on(any(), any(), any(), any())) .thenAnswer((_) => const Stream.empty()); channelClientState = MockChannelState(); + when(() => channel.client).thenReturn(client); when(() => channel.state).thenReturn(channelClientState); when(() => channelClientState.threadsStream) .thenAnswer((_) => const Stream.empty()); when(() => channelClientState.messagesStream) .thenAnswer((_) => const Stream.empty()); - when(() => channelClientState.messages).thenReturn([]); - when(() => channelClientState.isUpToDateStream) - .thenAnswer((_) => Stream.value(true)); + when(() => channelClientState.messages) + .thenReturn([Message(text: 'Hello World!')]); when(() => channelClientState.isUpToDate).thenReturn(true); when(() => channelClientState.unreadCountStream) .thenAnswer((_) => Stream.value(0)); @@ -69,58 +66,64 @@ void main() { expect(find.byKey(emptyWidgetKey), findsOneWidget); }); - testWidgets('renders empty message list view with custom background', + testWidgets('renders a non empty message list view with custom background', (tester) async { - when(() => channelClientState.messagesStream) - .thenAnswer((_) => Stream.value([Message(text: 'Hello world!')])); - when(() => channelClientState.messages) - .thenReturn([Message(text: 'Hello world!')]); + final message = Message( + id: 'message1', + text: 'Hello world!', + user: User( + id: 'user', + name: 'Test User', + ), + ); - const emptyWidgetKey = Key('empty_widget'); + when(() => channelClientState.messagesStream).thenAnswer( + (_) => Stream.value([message]), + ); + when(() => channelClientState.messages).thenReturn([message]); - await tester.pumpWidget( - MaterialApp( - home: DefaultAssetBundle( - bundle: _TestAssetBundle(), - child: StreamChat( - client: client, - streamChatThemeData: StreamChatThemeData.light().copyWith( - messageListViewTheme: const MessageListViewThemeData( - backgroundColor: Colors.grey, - backgroundImage: DecorationImage( - image: AssetImage('assets/background.png'), - fit: BoxFit.cover, + const nonEmptyWidgetKey = Key('non_empty_widget'); + await tester.runAsync(() async { + await tester.pumpWidget( + MaterialApp( + home: DefaultAssetBundle( + bundle: rootBundle, + child: StreamChat( + client: client, + streamChatThemeData: StreamChatThemeData.light().copyWith( + messageListViewTheme: const MessageListViewThemeData( + backgroundColor: Colors.grey, + backgroundImage: DecorationImage( + image: AssetImage('images/placeholder.png'), + fit: BoxFit.none, + ), ), ), - ), - child: StreamChannel( - channel: channel, - child: MessageListView( - emptyBuilder: (_) => Container(key: emptyWidgetKey), + child: StreamChannel( + channel: channel, + child: const MessageListView( + key: nonEmptyWidgetKey, + ), ), ), ), ), - ), - ); - await tester.pumpAndSettle(); + ); + await tester.pumpAndSettle(); + }); + + bool findBackground(Widget widget) => + widget is Container && + widget.decoration is BoxDecoration && + (widget.decoration! as BoxDecoration).image != null; expect(find.byType(MessageListView), findsOneWidget); - expect(find.byKey(emptyWidgetKey), findsNothing); - expect(find.byType(DecorationImage, skipOffstage: false), findsOneWidget); + expect(find.byKey(nonEmptyWidgetKey), findsOneWidget); + expect( + find.byWidgetPredicate( + findBackground, + description: 'findBackground', + ), + findsOneWidget); }); } - -class _TestAssetBundle extends CachingAssetBundle { - @override - Future load(String key) async { - if (key == 'assets/background.png') { - return ByteData.view( - Uint8List.fromList( - utf8.encode('Background'), - ).buffer, - ); - } - return ByteData(0); - } -}