From 4271e5f02949ac6f9cab8e464e794f24f933cdeb Mon Sep 17 00:00:00 2001 From: VelikovPetar Date: Wed, 3 Jun 2026 15:53:03 +0200 Subject: [PATCH] fix(persistence): Ensure messageLimit is respected in `getChannelStates`. --- .../lib/src/stream_chat_persistence_client.dart | 6 +++++- .../test/stream_chat_persistence_client_test.dart | 12 +++++++++++- 2 files changed, 16 insertions(+), 2 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 a7db994af0..3ab83e08b3 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 @@ -335,7 +335,11 @@ class StreamChatPersistenceClient extends ChatPersistenceClient { final pagedCids = envelopes.skip(offset).take(limit).map((s) => s.channel!.cid).toList(); // 6) Hydrate ONLY the page. - return Future.wait(pagedCids.map(getChannelStateByCid)); + final messagePagination = PaginationParams( + // Default limit is set to 25 in backend. + limit: messageLimit ?? 25, + ); + return Future.wait(pagedCids.map((cid) => getChannelStateByCid(cid, messagePagination: messagePagination))); } @override 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 135d317b8f..0a7e0eed28 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 @@ -323,10 +323,14 @@ void main() { lastReadMessageId: 'lastMessageId$i', ), ); + const messageLimit = 25; + const messagePagination = PaginationParams(limit: messageLimit); when(() => mockDatabase.channelDao.getChannelByCid(pagedCid)).thenAnswer((_) async => c2); when(() => mockDatabase.memberDao.getMembersByCid(pagedCid)).thenAnswer((_) async => members); when(() => mockDatabase.readDao.getReadsByCid(pagedCid)).thenAnswer((_) async => reads); - when(() => mockDatabase.messageDao.getMessagesByCid(pagedCid)).thenAnswer((_) async => messages); + when( + () => mockDatabase.messageDao.getMessagesByCid(pagedCid, messagePagination: messagePagination), + ).thenAnswer((_) async => messages); when(() => mockDatabase.pinnedMessageDao.getMessagesByCid(pagedCid)).thenAnswer((_) async => messages); when(() => mockDatabase.draftMessageDao.getDraftMessageByCid(pagedCid)).thenAnswer((_) async => null); @@ -335,6 +339,7 @@ void main() { channelStateSort: const [ SortOption.desc(ChannelSortKey.pinnedAt), ], + messageLimit: messageLimit, paginationParams: const PaginationParams(offset: 1, limit: 1), ); @@ -357,6 +362,11 @@ void main() { verify(() => mockDatabase.channelDao.getChannelByCid(pagedCid)).called(1); verifyNever(() => mockDatabase.channelDao.getChannelByCid('messaging:c0')); verifyNever(() => mockDatabase.channelDao.getChannelByCid('messaging:c1')); + + // messageLimit forwarded as PaginationParams to the message DAO. + verify( + () => mockDatabase.messageDao.getMessagesByCid(pagedCid, messagePagination: messagePagination), + ).called(1); }); test('returns empty list and skips hydration when no channels match', () async {