From 678fe4e807c8f6ec81280f8e52a367752b362b8b Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Thu, 13 Jul 2023 15:17:32 +0530 Subject: [PATCH] chore: minor fix, add test Signed-off-by: xsahil03x --- .../src/stream_chat_persistence_client.dart | 17 +-- .../stream_chat_persistence_client_test.dart | 125 ++++++++++-------- 2 files changed, 78 insertions(+), 64 deletions(-) diff --git a/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart index d29819e4..8b20715e 100644 --- a/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart +++ b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart @@ -272,17 +272,14 @@ class StreamChatPersistenceClient extends ChatPersistenceClient { channels.map((e) => getChannelStateByCid(e.cid)), ); - // Only sort the channel states if the channels are not already sorted. - if (channelStateSort == null) { - var comparator = _defaultChannelStateComparator; - if (channelStateSort != null && channelStateSort.isNotEmpty) { - comparator = _combineComparators( - channelStateSort.map((it) => it.comparator).withNullifyer, - ); - } - - channelStates.sort(comparator); + // Sort the channel states + var comparator = _defaultChannelStateComparator; + if (channelStateSort != null && channelStateSort.isNotEmpty) { + comparator = _combineComparators( + channelStateSort.map((it) => it.comparator).withNullifyer, + ); } + channelStates.sort(comparator); final offset = paginationParams?.offset; if (offset != null && offset > 0 && channelStates.isNotEmpty) { diff --git a/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart b/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart index 0f3223a6..f0392d0f 100644 --- a/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart +++ b/packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart @@ -245,64 +245,81 @@ void main() { .called(1); }); - test('getChannelStates', () async { - const cid = 'testType:testId'; - final channels = List.generate(3, (index) => ChannelModel(cid: cid)); - final messages = List.generate(3, (index) => Message()); - final members = List.generate(3, (index) => Member()); - final reads = List.generate( - 3, - (index) => Read( - user: User(id: 'testUserId$index'), - lastRead: DateTime.now(), - ), - ); - final channel = ChannelModel(cid: cid); - final channelStates = channels - .map( - (channel) => ChannelState( - channel: channel, - messages: messages, - pinnedMessages: messages, - members: members, - read: reads, - ), - ) - .toList(growable: false); + group('getChannelState', () { + test('should throw if sort is provided without comparator', () async { + final sort = [ + const SortOption( + 'testField', + direction: SortOption.ASC, + ), + ]; - when(() => mockDatabase.channelQueryDao.getChannels()) - .thenAnswer((_) async => channels); - when(() => mockDatabase.memberDao.getMembersByCid(cid)) - .thenAnswer((_) async => members); - when(() => mockDatabase.readDao.getReadsByCid(cid)) - .thenAnswer((_) async => reads); - when(() => mockDatabase.channelDao.getChannelByCid(cid)) - .thenAnswer((_) async => channel); - when(() => mockDatabase.messageDao.getMessagesByCid(cid)) - .thenAnswer((_) async => messages); - when(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid)) - .thenAnswer((_) async => messages); + expect( + () => client.getChannelStates(channelStateSort: sort), + throwsA(isA()), + ); + }); - final fetchedChannelStates = await client.getChannelStates(); - expect(fetchedChannelStates.length, channelStates.length); + test('should work fine', () async { + const cid = 'testType:testId'; + final channels = List.generate(3, (index) => ChannelModel(cid: cid)); + final messages = List.generate(3, (index) => Message()); + final members = List.generate(3, (index) => Member()); + final reads = List.generate( + 3, + (index) => Read( + user: User(id: 'testUserId$index'), + lastRead: DateTime.now(), + ), + ); + final channel = ChannelModel(cid: cid); + final channelStates = channels + .map( + (channel) => ChannelState( + channel: channel, + messages: messages, + pinnedMessages: messages, + members: members, + read: reads, + ), + ) + .toList(growable: false); - for (var i = 0; i < fetchedChannelStates.length; i++) { - final original = channelStates[i]; - final fetched = fetchedChannelStates[i]; - expect(fetched.members?.length, original.members?.length); - expect(fetched.messages?.length, original.messages?.length); - expect(fetched.pinnedMessages?.length, original.pinnedMessages?.length); - expect(fetched.read?.length, original.read?.length); - expect(fetched.channel!.cid, original.channel!.cid); - } + when(() => mockDatabase.channelQueryDao.getChannels()) + .thenAnswer((_) async => channels); + when(() => mockDatabase.memberDao.getMembersByCid(cid)) + .thenAnswer((_) async => members); + when(() => mockDatabase.readDao.getReadsByCid(cid)) + .thenAnswer((_) async => reads); + when(() => mockDatabase.channelDao.getChannelByCid(cid)) + .thenAnswer((_) async => channel); + when(() => mockDatabase.messageDao.getMessagesByCid(cid)) + .thenAnswer((_) async => messages); + when(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid)) + .thenAnswer((_) async => messages); - verify(() => mockDatabase.channelQueryDao.getChannels()).called(1); - verify(() => mockDatabase.memberDao.getMembersByCid(cid)).called(3); - verify(() => mockDatabase.readDao.getReadsByCid(cid)).called(3); - verify(() => mockDatabase.channelDao.getChannelByCid(cid)).called(3); - verify(() => mockDatabase.messageDao.getMessagesByCid(cid)).called(3); - verify(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid)) - .called(3); + final fetchedChannelStates = await client.getChannelStates(); + expect(fetchedChannelStates.length, channelStates.length); + + for (var i = 0; i < fetchedChannelStates.length; i++) { + final original = channelStates[i]; + final fetched = fetchedChannelStates[i]; + expect(fetched.members?.length, original.members?.length); + expect(fetched.messages?.length, original.messages?.length); + expect( + fetched.pinnedMessages?.length, original.pinnedMessages?.length); + expect(fetched.read?.length, original.read?.length); + expect(fetched.channel!.cid, original.channel!.cid); + } + + verify(() => mockDatabase.channelQueryDao.getChannels()).called(1); + verify(() => mockDatabase.memberDao.getMembersByCid(cid)).called(3); + verify(() => mockDatabase.readDao.getReadsByCid(cid)).called(3); + verify(() => mockDatabase.channelDao.getChannelByCid(cid)).called(3); + verify(() => mockDatabase.messageDao.getMessagesByCid(cid)).called(3); + verify(() => mockDatabase.pinnedMessageDao.getMessagesByCid(cid)) + .called(3); + }); }); test('updateChannelQueries', () async {