From d9de5e15ada2bd299bb2b2edd0c1035b63ab6e39 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Tue, 7 Sep 2021 19:45:31 +0530 Subject: [PATCH 1/2] test(core): fix message search list core tests Signed-off-by: xsahil03x --- .../lib/src/message_search_list_core.dart | 8 +- .../test/message_search_list_core_test.dart | 103 ++++++++++++++---- 2 files changed, 82 insertions(+), 29 deletions(-) diff --git a/packages/stream_chat_flutter_core/lib/src/message_search_list_core.dart b/packages/stream_chat_flutter_core/lib/src/message_search_list_core.dart index 47ffe28b..4cc6c46b 100644 --- a/packages/stream_chat_flutter_core/lib/src/message_search_list_core.dart +++ b/packages/stream_chat_flutter_core/lib/src/message_search_list_core.dart @@ -38,7 +38,7 @@ class MessageSearchListCore extends StatefulWidget { /// * [errorBuilder] /// * [loadingBuilder] /// * [childBuilder] - MessageSearchListCore({ + const MessageSearchListCore({ Key? key, required this.emptyBuilder, required this.errorBuilder, @@ -58,12 +58,6 @@ class MessageSearchListCore extends StatefulWidget { messageQuery == null || messageFilters == null, "Can't provide both `query` and `messageFilters` at the same time", ), - assert( - paginationParams?.offset == null || - paginationParams?.offset == 0 || - sortOptions == null, - 'Cannot specify `offset` with `sortOptions` parameter', - ), super(key: key); /// A [MessageSearchListController] allows reloading and pagination. diff --git a/packages/stream_chat_flutter_core/test/message_search_list_core_test.dart b/packages/stream_chat_flutter_core/test/message_search_list_core_test.dart index 6b700c76..2c398013 100644 --- a/packages/stream_chat_flutter_core/test/message_search_list_core_test.dart +++ b/packages/stream_chat_flutter_core/test/message_search_list_core_test.dart @@ -7,6 +7,7 @@ import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'mocks.dart'; const testFilter = Filter.custom(operator: '\$test', value: 'testValue'); +const testMessageFilter = Filter.custom(operator: '\$test', value: 'testValue'); void main() { List _generateMessages({ @@ -28,6 +29,40 @@ void main() { }, ); + testWidgets( + 'should throw if both `messageQuery` and `messageFilters` are provided', + (tester) async { + expect( + () => MessageSearchListCore( + childBuilder: (_) => const Offstage(), + loadingBuilder: (_) => const Offstage(), + emptyBuilder: (_) => const Offstage(), + errorBuilder: (_, __) => const Offstage(), + filters: testFilter, + messageFilters: testMessageFilter, + messageQuery: 'test', + ), + throwsAssertionError, + ); + }, + ); + + testWidgets( + 'should throw if both `messageQuery` and `messageFilters` are not provided', + (tester) async { + expect( + () => MessageSearchListCore( + childBuilder: (_) => const Offstage(), + loadingBuilder: (_) => const Offstage(), + emptyBuilder: (_) => const Offstage(), + errorBuilder: (_, __) => const Offstage(), + filters: testFilter, + ), + throwsAssertionError, + ); + }, + ); + testWidgets( 'should throw if MessageSearchListCore is used where MessageSearchBloc ' 'is not present in the widget tree', @@ -40,6 +75,7 @@ void main() { emptyBuilder: (BuildContext context) => const Offstage(), errorBuilder: (BuildContext context, Object? error) => const Offstage(), filters: testFilter, + messageFilters: testMessageFilter, ); await tester.pumpWidget(messageSearchListCore); @@ -61,6 +97,7 @@ void main() { emptyBuilder: (BuildContext context) => const Offstage(), errorBuilder: (BuildContext context, Object? error) => const Offstage(), filters: testFilter, + messageFilters: testMessageFilter, ); final mockClient = MockClient(); @@ -92,6 +129,7 @@ void main() { errorBuilder: (BuildContext context, Object error) => const Offstage(), messageSearchListController: controller, filters: testFilter, + messageFilters: testMessageFilter, ); expect(controller.loadData, isNull); @@ -129,6 +167,7 @@ void main() { key: errorWidgetKey, ), filters: testFilter, + messageFilters: testMessageFilter, ); final mockClient = MockClient(); @@ -138,7 +177,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: any(named: 'paginationParams'), )).thenThrow(error); @@ -159,7 +198,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: any(named: 'paginationParams'), )).called(1); }, @@ -179,6 +218,7 @@ void main() { const Offstage(key: emptyWidgetKey), errorBuilder: (BuildContext context, Object error) => const Offstage(), filters: testFilter, + messageFilters: testMessageFilter, ); final mockClient = MockClient(); @@ -188,10 +228,13 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: any(named: 'paginationParams'), )).thenAnswer( - (_) async => SearchMessagesResponse()..results = messageResponseList, + (_) async => SearchMessagesResponse() + ..results = messageResponseList + ..next = null + ..previous = null, ); await tester.pumpWidget( @@ -211,7 +254,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: any(named: 'paginationParams'), )).called(1); }, @@ -231,6 +274,7 @@ void main() { emptyBuilder: (BuildContext context) => const Offstage(), errorBuilder: (BuildContext context, Object error) => const Offstage(), filters: testFilter, + messageFilters: testMessageFilter, ); final mockClient = MockClient(); @@ -240,10 +284,13 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: any(named: 'paginationParams'), )).thenAnswer( - (_) async => SearchMessagesResponse()..results = messageResponseList, + (_) async => SearchMessagesResponse() + ..results = messageResponseList + ..next = null + ..previous = null, ); await tester.pumpWidget( @@ -263,7 +310,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: any(named: 'paginationParams'), )).called(1); }, @@ -289,6 +336,7 @@ void main() { errorBuilder: (BuildContext context, Object error) => const Offstage(), paginationParams: pagination, filters: testFilter, + messageFilters: testMessageFilter, ); final mockClient = MockClient(); @@ -298,10 +346,13 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: pagination, )).thenAnswer( - (_) async => SearchMessagesResponse()..results = messageResponseList, + (_) async => SearchMessagesResponse() + ..results = messageResponseList + ..next = null + ..previous = null, ); await tester.pumpWidget( @@ -332,7 +383,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: pagination, )).called(1); @@ -348,11 +399,13 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: updatedPagination, )).thenAnswer( - (_) async => - SearchMessagesResponse()..results = paginatedMessageResponseList, + (_) async => SearchMessagesResponse() + ..results = paginatedMessageResponseList + ..next = null + ..previous = null, ); await messageSearchListCoreState.paginateData(); @@ -372,7 +425,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: updatedPagination, )).called(1); }, @@ -406,6 +459,7 @@ void main() { const Offstage(), paginationParams: pagination.copyWith(limit: limit), filters: testFilter, + messageFilters: testMessageFilter, ); final mockClient = MockClient(); @@ -415,10 +469,13 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: pagination, )).thenAnswer( - (_) async => SearchMessagesResponse()..results = messageResponseList, + (_) async => SearchMessagesResponse() + ..results = messageResponseList + ..next = null + ..previous = null, ); await tester.pumpWidget( @@ -453,7 +510,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: pagination, )).called(1); @@ -466,11 +523,13 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: updatedPagination, )).thenAnswer( - (_) async => - SearchMessagesResponse()..results = updatedMessageResponseList, + (_) async => SearchMessagesResponse() + ..results = updatedMessageResponseList + ..next = null + ..previous = null, ); await tester.pumpAndSettle(); @@ -487,7 +546,7 @@ void main() { testFilter, query: any(named: 'query'), sort: any(named: 'sort'), - messageFilters: any(named: 'messageFilters'), + messageFilters: testMessageFilter, paginationParams: updatedPagination, )).called(1); }, From 3069f8762935a1f972c3298deed678ed054bc735 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Tue, 7 Sep 2021 20:20:49 +0530 Subject: [PATCH 2/2] test(core): fix tests Signed-off-by: xsahil03x --- .../lib/src/channels_bloc.dart | 3 ++- .../lib/src/users_bloc.dart | 4 +++- .../test/message_search_bloc_test.dart | 21 ++++++++++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart b/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart index 6687eef5..1aed7198 100644 --- a/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart +++ b/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart @@ -105,7 +105,8 @@ class ChannelsBlocState extends State }) async { final client = _streamChatCoreState!.client; - final clear = paginationParams.offset == 0; + final offset = paginationParams.offset; + final clear = offset == null || offset == 0; if (clear && _paginationEnded) { _paginationEnded = false; } diff --git a/packages/stream_chat_flutter_core/lib/src/users_bloc.dart b/packages/stream_chat_flutter_core/lib/src/users_bloc.dart index e7916478..f2ec10d9 100644 --- a/packages/stream_chat_flutter_core/lib/src/users_bloc.dart +++ b/packages/stream_chat_flutter_core/lib/src/users_bloc.dart @@ -75,7 +75,9 @@ class UsersBlocState extends State } try { - final clear = pagination == null || pagination.offset == 0; + final clear = pagination == null || + pagination.offset == null || + pagination.offset == 0; final oldUsers = List.from(users ?? []); diff --git a/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart b/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart index 979ca5b2..3e56ca76 100644 --- a/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart +++ b/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart @@ -74,7 +74,10 @@ void main() { messageFilters: any(named: 'messageFilters'), paginationParams: any(named: 'paginationParams'), )).thenAnswer( - (_) async => SearchMessagesResponse()..results = messageResponseList, + (_) async => SearchMessagesResponse() + ..results = messageResponseList + ..next = null + ..previous = null, ); messageSearchBlocState.search(filter: testFilter); @@ -177,7 +180,10 @@ void main() { messageFilters: any(named: 'messageFilters'), paginationParams: any(named: 'paginationParams'), )).thenAnswer( - (_) async => SearchMessagesResponse()..results = messageResponseList, + (_) async => SearchMessagesResponse() + ..results = messageResponseList + ..next = null + ..previous = null, ); messageSearchBlocState.search(filter: testFilter); @@ -206,8 +212,10 @@ void main() { messageFilters: any(named: 'messageFilters'), paginationParams: pagination, )).thenAnswer( - (_) async => - SearchMessagesResponse()..results = paginatedMessageResponseList, + (_) async => SearchMessagesResponse() + ..results = paginatedMessageResponseList + ..next = null + ..previous = null, ); messageSearchBlocState.search(pagination: pagination, filter: testFilter); @@ -269,7 +277,10 @@ void main() { messageFilters: any(named: 'messageFilters'), paginationParams: any(named: 'paginationParams'), )).thenAnswer( - (_) async => SearchMessagesResponse()..results = messageResponseList, + (_) async => SearchMessagesResponse() + ..results = messageResponseList + ..next = null + ..previous = null, ); messageSearchBlocState.search(filter: testFilter);