@@ -18,8 +18,6 @@ package io.getstream.feeds.android.client.internal.state
18
18
import io.getstream.feeds.android.client.api.model.FeedId
19
19
import io.getstream.feeds.android.client.api.model.FeedMemberData
20
20
import io.getstream.feeds.android.client.api.model.ModelUpdates
21
- import io.getstream.feeds.android.client.api.model.PaginationData
22
- import io.getstream.feeds.android.client.api.model.PaginationResult
23
21
import io.getstream.feeds.android.client.api.state.query.MembersQuery
24
22
import io.getstream.feeds.android.client.api.state.query.MembersQueryConfig
25
23
import io.getstream.feeds.android.client.api.state.query.MembersSort
@@ -54,23 +52,27 @@ internal class MemberListStateImplTest {
54
52
}
55
53
56
54
@Test
57
- fun `on memberUpdated, then update specific member` () = runTest {
58
- val initialMembers = listOf (feedMemberData(), feedMemberData(" user-2" ))
59
- val paginationResult = defaultPaginationResult(initialMembers)
60
- memberListState.onQueryMoreMembers(paginationResult, queryConfig)
55
+ fun `on memberUpdated, then update and reposition member` () = runTest {
56
+ // Initial members already sorted by createdAt desc
57
+ val initialMembers =
58
+ listOf (
59
+ feedMemberData(" user-2" , createdAt = Date (2000 )),
60
+ feedMemberData(" user-1" , createdAt = Date (1000 )),
61
+ )
62
+ setupInitialState(initialMembers)
61
63
62
- val updatedMember = feedMemberData(" user-1" , role = " admin" )
64
+ val updatedMember = feedMemberData(" user-1" , role = " admin" , createdAt = Date ( 3000 ) )
63
65
memberListState.onMemberUpdated(updatedMember)
64
66
65
- val expectedMembers = listOf (updatedMember, initialMembers[1 ])
67
+ // Member should be repositioned according to new sort criteria
68
+ val expectedMembers = listOf (updatedMember, initialMembers[0 ])
66
69
assertEquals(expectedMembers, memberListState.members.value)
67
70
}
68
71
69
72
@Test
70
73
fun `on memberRemoved, then remove specific member` () = runTest {
71
74
val initialMembers = listOf (feedMemberData(), feedMemberData(" user-2" ))
72
- val paginationResult = defaultPaginationResult(initialMembers)
73
- memberListState.onQueryMoreMembers(paginationResult, queryConfig)
75
+ setupInitialState(initialMembers)
74
76
75
77
memberListState.onMemberRemoved(initialMembers[0 ].id)
76
78
@@ -79,15 +81,14 @@ internal class MemberListStateImplTest {
79
81
}
80
82
81
83
@Test
82
- fun `on membersUpdated, then apply add update and remove operations` () = runTest {
84
+ fun `on membersUpdated, then apply add, update, and remove operations` () = runTest {
83
85
val initialMembers =
84
86
listOf (
85
87
feedMemberData(" user-3" , createdAt = Date (3000 )),
86
88
feedMemberData(" user-2" , createdAt = Date (2000 )),
87
89
feedMemberData(" user-1" , createdAt = Date (1000 )),
88
90
)
89
- val paginationResult = defaultPaginationResult(initialMembers)
90
- memberListState.onQueryMoreMembers(paginationResult, queryConfig)
91
+ setupInitialState(initialMembers)
91
92
92
93
val updatedMember = feedMemberData(" user-1" , role = " admin" , createdAt = Date (5000 ))
93
94
val newMember = feedMemberData(" user-4" , createdAt = Date (4000 ))
@@ -105,42 +106,55 @@ internal class MemberListStateImplTest {
105
106
}
106
107
107
108
@Test
108
- fun `on memberAdded, then add member` () = runTest {
109
- val initialMembers = listOf (feedMemberData(), feedMemberData(" user-2" ))
110
- val paginationResult =
111
- PaginationResult (models = initialMembers, pagination = PaginationData ())
112
- memberListState.onQueryMoreMembers(paginationResult, queryConfig)
109
+ fun `on memberAdded, then add member in sorted position` () = runTest {
110
+ // Initial members already sorted by createdAt desc
111
+ val initialMembers =
112
+ listOf (
113
+ feedMemberData(" user-3" , createdAt = Date (3000 )),
114
+ feedMemberData(" user-1" , createdAt = Date (1000 )),
115
+ )
116
+ setupInitialState(initialMembers)
113
117
114
- val newMember = feedMemberData(" user-3 " )
118
+ val newMember = feedMemberData(" user-2 " , createdAt = Date ( 2000 ) )
115
119
memberListState.onMemberAdded(newMember)
116
120
117
- assertEquals(initialMembers + newMember, memberListState.members.value)
121
+ // Member should be inserted in correct sorted position
122
+ val expectedMembers = listOf (initialMembers[0 ], newMember, initialMembers[1 ])
123
+ assertEquals(expectedMembers, memberListState.members.value)
118
124
}
119
125
120
126
@Test
121
- fun `on memberAdded with existing id, then update member` () = runTest {
122
- val initialMembers = listOf (feedMemberData(), feedMemberData(" user-2" ))
123
- val paginationResult = defaultPaginationResult(initialMembers)
124
- memberListState.onQueryMoreMembers(paginationResult, queryConfig)
127
+ fun `on memberAdded with existing id, then update and reposition member` () = runTest {
128
+ // Initial members already sorted by createdAt desc
129
+ val initialMembers =
130
+ listOf (
131
+ feedMemberData(" user-2" , createdAt = Date (2000 )),
132
+ feedMemberData(" user-1" , createdAt = Date (1000 )),
133
+ )
134
+ setupInitialState(initialMembers)
125
135
126
- val updatedMember = feedMemberData(" user-1" , role = " admin" )
136
+ // Add existing user-1 with newer createdAt that should move it to the front
137
+ val updatedMember = feedMemberData(" user-1" , role = " admin" , createdAt = Date (3000 ))
127
138
memberListState.onMemberAdded(updatedMember)
128
139
129
- val expectedMembers = listOf (updatedMember, initialMembers[1 ])
140
+ // Member should be updated and repositioned according to new sort criteria (3000, 2000)
141
+ val expectedMembers = listOf (updatedMember, initialMembers[0 ])
130
142
assertEquals(expectedMembers, memberListState.members.value)
131
143
}
132
144
133
145
@Test
134
146
fun `on clear, then remove all members` () = runTest {
135
- val initialMembers = listOf (feedMemberData(), feedMemberData(" user-2" ))
136
- val paginationResult = defaultPaginationResult(initialMembers)
137
- memberListState.onQueryMoreMembers(paginationResult, queryConfig)
147
+ setupInitialState(listOf (feedMemberData(), feedMemberData(" user-2" )))
138
148
139
149
memberListState.clear()
140
150
141
151
assertEquals(emptyList<FeedMemberData >(), memberListState.members.value)
142
152
}
143
153
154
+ private fun setupInitialState (members : List <FeedMemberData >) {
155
+ memberListState.onQueryMoreMembers(defaultPaginationResult(members), queryConfig)
156
+ }
157
+
144
158
companion object {
145
159
private val queryConfig = MembersQueryConfig (filter = null , sort = MembersSort .Default )
146
160
}
0 commit comments