Skip to content

Commit 08236f5

Browse files
authored
fix(persistence): Ensure messageLimit is respected in getChannelStates. (#2717)
1 parent 52aa76d commit 08236f5

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,11 @@ class StreamChatPersistenceClient extends ChatPersistenceClient {
335335
final pagedCids = envelopes.skip(offset).take(limit).map((s) => s.channel!.cid).toList();
336336

337337
// 6) Hydrate ONLY the page.
338-
return Future.wait(pagedCids.map(getChannelStateByCid));
338+
final messagePagination = PaginationParams(
339+
// Default limit is set to 25 in backend.
340+
limit: messageLimit ?? 25,
341+
);
342+
return Future.wait(pagedCids.map((cid) => getChannelStateByCid(cid, messagePagination: messagePagination)));
339343
}
340344

341345
@override

packages/stream_chat_persistence/test/stream_chat_persistence_client_test.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,10 +323,14 @@ void main() {
323323
lastReadMessageId: 'lastMessageId$i',
324324
),
325325
);
326+
const messageLimit = 25;
327+
const messagePagination = PaginationParams(limit: messageLimit);
326328
when(() => mockDatabase.channelDao.getChannelByCid(pagedCid)).thenAnswer((_) async => c2);
327329
when(() => mockDatabase.memberDao.getMembersByCid(pagedCid)).thenAnswer((_) async => members);
328330
when(() => mockDatabase.readDao.getReadsByCid(pagedCid)).thenAnswer((_) async => reads);
329-
when(() => mockDatabase.messageDao.getMessagesByCid(pagedCid)).thenAnswer((_) async => messages);
331+
when(
332+
() => mockDatabase.messageDao.getMessagesByCid(pagedCid, messagePagination: messagePagination),
333+
).thenAnswer((_) async => messages);
330334
when(() => mockDatabase.pinnedMessageDao.getMessagesByCid(pagedCid)).thenAnswer((_) async => messages);
331335
when(() => mockDatabase.draftMessageDao.getDraftMessageByCid(pagedCid)).thenAnswer((_) async => null);
332336

@@ -335,6 +339,7 @@ void main() {
335339
channelStateSort: const [
336340
SortOption<ChannelState>.desc(ChannelSortKey.pinnedAt),
337341
],
342+
messageLimit: messageLimit,
338343
paginationParams: const PaginationParams(offset: 1, limit: 1),
339344
);
340345

@@ -357,6 +362,11 @@ void main() {
357362
verify(() => mockDatabase.channelDao.getChannelByCid(pagedCid)).called(1);
358363
verifyNever(() => mockDatabase.channelDao.getChannelByCid('messaging:c0'));
359364
verifyNever(() => mockDatabase.channelDao.getChannelByCid('messaging:c1'));
365+
366+
// messageLimit forwarded as PaginationParams to the message DAO.
367+
verify(
368+
() => mockDatabase.messageDao.getMessagesByCid(pagedCid, messagePagination: messagePagination),
369+
).called(1);
360370
});
361371

362372
test('returns empty list and skips hydration when no channels match', () async {

0 commit comments

Comments
 (0)