From d3811b72ce17aa6226cee3d33c3b2d3a62b18212 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 21 Sep 2020 12:47:48 +0200 Subject: [PATCH] add basic testing for channel_preview widget --- lib/src/channel_image.dart | 2 +- lib/src/typing_indicator.dart | 2 +- pubspec.yaml | 3 ++ test/src/channel_preview_test.dart | 52 ++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 test/src/channel_preview_test.dart diff --git a/lib/src/channel_image.dart b/lib/src/channel_image.dart index bef666db..82bea25e 100644 --- a/lib/src/channel_image.dart +++ b/lib/src/channel_image.dart @@ -71,7 +71,7 @@ class ChannelImage extends StatelessWidget { String image; if (snapshot.data?.containsKey('image') == true) { image = snapshot.data['image']; - } else if (channel.state.members.length == 2) { + } else if (channel.state.members?.length == 2) { final otherMember = channel.state.members .firstWhere((member) => member.user.id != client.user.id); image = otherMember.user.extraData['image']; diff --git a/lib/src/typing_indicator.dart b/lib/src/typing_indicator.dart index 57427da6..69a16b98 100644 --- a/lib/src/typing_indicator.dart +++ b/lib/src/typing_indicator.dart @@ -34,7 +34,7 @@ class TypingIndicator extends StatelessWidget { builder: (context, snapshot) { return AnimatedSwitcher( duration: Duration(milliseconds: 300), - child: snapshot.data.isNotEmpty + child: snapshot.data?.isNotEmpty == true ? Align( key: Key('typings'), alignment: alignment, diff --git a/pubspec.yaml b/pubspec.yaml index 35674c61..34a48b8f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,3 +30,6 @@ dependencies: dev_dependencies: pedantic: ^1.9.0 + flutter_test: + sdk: flutter + mockito: ^4.1.1 diff --git a/test/src/channel_preview_test.dart b/test/src/channel_preview_test.dart new file mode 100644 index 00000000..f5e0fbd0 --- /dev/null +++ b/test/src/channel_preview_test.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +class MockClient extends Mock implements Client {} + +class MockChannel extends Mock implements Channel {} + +class MockChannelState extends Mock implements ChannelClientState {} + +void main() { + testWidgets( + 'it should show basic channel information', + (WidgetTester tester) async { + final client = MockClient(); + final channel = MockChannel(); + final channelState = MockChannelState(); + final lastMessageAt = DateTime.parse('2020-06-22 12:00:00'); + + when(channel.lastMessageAt).thenReturn(lastMessageAt); + when(channel.state).thenReturn(channelState); + when(channel.extraData).thenReturn({ + 'name': 'test name', + }); + when(channelState.unreadCount).thenReturn(1); + when(channelState.lastMessage).thenReturn(Message( + text: 'hello', + )); + + await tester.pumpWidget(MaterialApp( + home: StreamChat( + client: client, + child: StreamChannel( + channel: channel, + child: Scaffold( + body: ChannelPreview( + channel: channel, + ), + ), + ), + ), + )); + + expect(find.text('22/06/2020'), findsOneWidget); + expect(find.text('test name'), findsOneWidget); + expect(find.text('1'), findsOneWidget); + expect(find.text('hello'), findsOneWidget); + expect(find.byType(ChannelImage), findsOneWidget); + }, + ); +}