Skip to content

Commit 167b04d

Browse files
VelikovPetarclaude
andauthored
Ensure SyncManager respects messageLimit and memberLimit when restoring channel queries (#6231)
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 56a1073 commit 167b04d

File tree

2 files changed

+63
-4
lines changed

2 files changed

+63
-4
lines changed

stream-chat-android-state/src/main/java/io/getstream/chat/android/state/plugin/logic/querychannels/internal/QueryChannelsLogic.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ import io.getstream.log.taggedLogger
3232
import io.getstream.result.Result
3333
import kotlinx.coroutines.flow.StateFlow
3434

35-
private const val MESSAGE_LIMIT = 1
36-
private const val MEMBER_LIMIT = 30
3735
private const val INITIAL_CHANNEL_OFFSET = 0
3836
private const val CHANNEL_LIMIT = 30
3937

@@ -154,13 +152,16 @@ internal class QueryChannelsLogic(
154152
*/
155153
internal suspend fun queryFirstPage(): Result<List<Channel>> {
156154
logger.d { "[queryFirstPage] no args" }
155+
val currentRequest = queryChannelsStateLogic.getState().currentRequest.value
156+
val messageLimit = currentRequest?.messageLimit
157+
val memberLimit = currentRequest?.memberLimit
157158
val request = QueryChannelsRequest(
158159
filter = filter,
159160
offset = INITIAL_CHANNEL_OFFSET,
160161
limit = CHANNEL_LIMIT,
161162
querySort = sort,
162-
messageLimit = MESSAGE_LIMIT,
163-
memberLimit = MEMBER_LIMIT,
163+
messageLimit = messageLimit,
164+
memberLimit = memberLimit,
164165
)
165166

166167
queryChannelsStateLogic.setCurrentRequest(request)

stream-chat-android-state/src/test/java/io/getstream/chat/android/state/plugin/logic/querychannels/internal/QueryChannelsLogicTest.kt

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.getstream.chat.android.state.plugin.logic.querychannels.internal
1818

1919
import io.getstream.chat.android.client.ChatClient
20+
import io.getstream.chat.android.client.api.models.QueryChannelsRequest
2021
import io.getstream.chat.android.client.query.QueryChannelsSpec
2122
import io.getstream.chat.android.client.query.pagination.AnyChannelPaginationRequest
2223
import io.getstream.chat.android.models.Channel
@@ -26,6 +27,7 @@ import io.getstream.chat.android.models.querysort.QuerySortByField
2627
import io.getstream.chat.android.randomChannel
2728
import io.getstream.chat.android.state.plugin.state.querychannels.QueryChannelsState
2829
import io.getstream.chat.android.test.TestCoroutineRule
30+
import io.getstream.chat.android.test.asCall
2931
import kotlinx.coroutines.flow.MutableStateFlow
3032
import kotlinx.coroutines.test.runTest
3133
import org.junit.Rule
@@ -65,6 +67,7 @@ internal class QueryChannelsLogicTest {
6567

6668
whenever(queryChannelsStateLogic.getState()) doReturn queryChannelsState
6769
whenever(queryChannelsState.recoveryNeeded) doReturn MutableStateFlow(false)
70+
whenever(queryChannelsState.currentRequest) doReturn MutableStateFlow(null)
6871
whenever(queryChannelsStateLogic.getQuerySpecs()) doReturn queryChannelsSpec
6972

7073
logic = QueryChannelsLogic(
@@ -225,4 +228,59 @@ internal class QueryChannelsLogicTest {
225228
verify(queryChannelsStateLogic).addChannelsState(cachedChannels)
226229
verify(queryChannelsDatabaseLogic).insertQueryChannels(queryChannelsSpec)
227230
}
231+
232+
// region queryFirstPage
233+
234+
@Test
235+
fun `queryFirstPage uses null messageLimit and memberLimit when no prior request exists`() = runTest {
236+
// Given - currentRequest is null (default from setUp)
237+
whenever(client.queryChannelsInternal(any()))
238+
.thenReturn(emptyList<Channel>().asCall())
239+
240+
// When
241+
logic.queryFirstPage()
242+
243+
// Then
244+
val expectedRequest = QueryChannelsRequest(
245+
filter = filter,
246+
offset = 0,
247+
limit = 30,
248+
querySort = sort,
249+
messageLimit = null,
250+
memberLimit = null,
251+
)
252+
verify(client).queryChannelsInternal(expectedRequest)
253+
}
254+
255+
@Test
256+
fun `queryFirstPage uses messageLimit and memberLimit from prior request`() = runTest {
257+
// Given
258+
val priorRequest = QueryChannelsRequest(
259+
filter = filter,
260+
offset = 0,
261+
limit = 30,
262+
querySort = sort,
263+
messageLimit = 5,
264+
memberLimit = 50,
265+
)
266+
whenever(queryChannelsState.currentRequest) doReturn MutableStateFlow(priorRequest)
267+
whenever(client.queryChannelsInternal(any()))
268+
.thenReturn(emptyList<Channel>().asCall())
269+
270+
// When
271+
logic.queryFirstPage()
272+
273+
// Then
274+
val expectedRequest = QueryChannelsRequest(
275+
filter = filter,
276+
offset = 0,
277+
limit = 30,
278+
querySort = sort,
279+
messageLimit = 5,
280+
memberLimit = 50,
281+
)
282+
verify(client).queryChannelsInternal(expectedRequest)
283+
}
284+
285+
// endregion
228286
}

0 commit comments

Comments
 (0)