Skip to content

Commit 3ed8b0d

Browse files
committed
Avoid using fixture method in production code.
1 parent 476a54c commit 3ed8b0d

File tree

5 files changed

+28
-26
lines changed

5 files changed

+28
-26
lines changed

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesEvent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616

1717
package io.element.android.features.roomdetails.impl.rolesandpermissions.changeroles
1818

19-
import io.element.android.libraries.matrix.api.room.RoomMember
19+
import io.element.android.libraries.matrix.api.user.MatrixUser
2020

2121
sealed interface ChangeRolesEvent {
2222
data object ToggleSearchActive : ChangeRolesEvent
2323
data class QueryChanged(val query: String?) : ChangeRolesEvent
24-
data class UserSelectionToggled(val roomMember: RoomMember) : ChangeRolesEvent
24+
data class UserSelectionToggled(val matrixUser: MatrixUser) : ChangeRolesEvent
2525
data object Save : ChangeRolesEvent
2626
data object Exit : ChangeRolesEvent
2727
data object CancelExit : ChangeRolesEvent

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesPresenter.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import io.element.android.libraries.matrix.api.core.UserId
4242
import io.element.android.libraries.matrix.api.room.MatrixRoom
4343
import io.element.android.libraries.matrix.api.room.RoomMember
4444
import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange
45+
import io.element.android.libraries.matrix.api.room.toMatrixUser
4546
import io.element.android.libraries.matrix.api.user.MatrixUser
4647
import io.element.android.services.analytics.api.AnalyticsService
4748
import kotlinx.collections.immutable.ImmutableList
@@ -129,11 +130,11 @@ class ChangeRolesPresenter @AssistedInject constructor(
129130
}
130131
is ChangeRolesEvent.UserSelectionToggled -> {
131132
val newList = selectedUsers.value.toMutableList()
132-
val index = newList.indexOfFirst { it.userId == event.roomMember.userId }
133+
val index = newList.indexOfFirst { it.userId == event.matrixUser.userId }
133134
if (index >= 0) {
134135
newList.removeAt(index)
135136
} else {
136-
newList.add(event.roomMember.toMatrixUser())
137+
newList.add(event.matrixUser)
137138
}
138139
selectedUsers.value = newList.toImmutableList()
139140
}
@@ -183,12 +184,6 @@ class ChangeRolesPresenter @AssistedInject constructor(
183184
return sortedWith(PowerLevelRoomMemberComparator()).toImmutableList()
184185
}
185186

186-
private fun RoomMember.toMatrixUser() = MatrixUser(
187-
userId = userId,
188-
displayName = displayName,
189-
avatarUrl = avatarUrl,
190-
)
191-
192187
private fun CoroutineScope.save(
193188
usersWithRole: ImmutableList<MatrixUser>,
194189
selectedUsers: MutableState<ImmutableList<MatrixUser>>,

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
4646
import androidx.compose.ui.unit.dp
4747
import io.element.android.compound.theme.ElementTheme
4848
import io.element.android.features.roomdetails.impl.R
49-
import io.element.android.features.roomdetails.impl.members.aRoomMember
5049
import io.element.android.libraries.architecture.AsyncAction
5150
import io.element.android.libraries.designsystem.components.ProgressDialog
5251
import io.element.android.libraries.designsystem.components.async.AsyncActionView
@@ -68,6 +67,7 @@ import io.element.android.libraries.designsystem.theme.components.TextButton
6867
import io.element.android.libraries.designsystem.theme.components.TopAppBar
6968
import io.element.android.libraries.matrix.api.core.UserId
7069
import io.element.android.libraries.matrix.api.room.RoomMember
70+
import io.element.android.libraries.matrix.api.room.toMatrixUser
7171
import io.element.android.libraries.matrix.api.user.MatrixUser
7272
import io.element.android.libraries.matrix.ui.components.MatrixUserRow
7373
import io.element.android.libraries.matrix.ui.components.SelectedUsersRowList
@@ -143,7 +143,7 @@ fun ChangeRolesView(
143143
searchResults = members,
144144
selectedUsers = state.selectedUsers,
145145
canRemoveMember = state.canChangeMemberRole,
146-
onSelectionToggled = { state.eventSink(ChangeRolesEvent.UserSelectionToggled(it)) },
146+
onSelectionToggled = { state.eventSink(ChangeRolesEvent.UserSelectionToggled(it.toMatrixUser())) },
147147
selectedUsersList = {},
148148
)
149149
}
@@ -159,13 +159,13 @@ fun ChangeRolesView(
159159
searchResults = (state.searchResults as? SearchBarResultState.Results)?.results ?: persistentListOf(),
160160
selectedUsers = state.selectedUsers,
161161
canRemoveMember = state.canChangeMemberRole,
162-
onSelectionToggled = { state.eventSink(ChangeRolesEvent.UserSelectionToggled(it)) },
162+
onSelectionToggled = { state.eventSink(ChangeRolesEvent.UserSelectionToggled(it.toMatrixUser())) },
163163
selectedUsersList = { users ->
164164
SelectedUsersRowList(
165165
contentPadding = PaddingValues(start = 16.dp, end = 16.dp, bottom = 16.dp),
166166
selectedUsers = users,
167167
onUserRemoved = {
168-
state.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(it.userId)))
168+
state.eventSink(ChangeRolesEvent.UserSelectionToggled(it))
169169
},
170170
canDeselect = { state.canChangeMemberRole(it.userId) },
171171
)

features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/rolesandpermissions/changeroles/ChangeRolesPresenterTests.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import app.cash.molecule.moleculeFlow
2121
import app.cash.turbine.test
2222
import com.google.common.truth.Truth.assertThat
2323
import im.vector.app.features.analytics.plan.RoomModeration
24-
import io.element.android.features.roomdetails.impl.members.aRoomMember
2524
import io.element.android.features.roomdetails.impl.members.aRoomMemberList
2625
import io.element.android.features.roomdetails.impl.rolesandpermissions.changeroles.ChangeRolesEvent
2726
import io.element.android.features.roomdetails.impl.rolesandpermissions.changeroles.ChangeRolesPresenter
@@ -30,6 +29,7 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers
3029
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
3130
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
3231
import io.element.android.libraries.matrix.api.room.RoomMember
32+
import io.element.android.libraries.matrix.api.user.MatrixUser
3333
import io.element.android.libraries.matrix.test.A_USER_ID
3434
import io.element.android.libraries.matrix.test.A_USER_ID_2
3535
import io.element.android.libraries.matrix.test.room.FakeMatrixRoom
@@ -154,10 +154,10 @@ class ChangeRolesPresenterTests {
154154
val initialState = awaitItem()
155155
assertThat(initialState.selectedUsers).hasSize(1)
156156

157-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
157+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
158158
assertThat(awaitItem().selectedUsers).hasSize(2)
159159

160-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
160+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
161161
assertThat(awaitItem().selectedUsers).hasSize(1)
162162
}
163163
}
@@ -177,13 +177,13 @@ class ChangeRolesPresenterTests {
177177
assertThat(initialState.hasPendingChanges).isFalse()
178178
assertThat(initialState.selectedUsers).hasSize(1)
179179

180-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
180+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
181181
with(awaitItem()) {
182182
assertThat(selectedUsers).hasSize(2)
183183
assertThat(hasPendingChanges).isTrue()
184184
}
185185

186-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
186+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
187187
with(awaitItem()) {
188188
assertThat(selectedUsers).hasSize(1)
189189
assertThat(hasPendingChanges).isFalse()
@@ -226,7 +226,7 @@ class ChangeRolesPresenterTests {
226226
assertThat(initialState.hasPendingChanges).isFalse()
227227
assertThat(initialState.exitState).isEqualTo(AsyncAction.Uninitialized)
228228

229-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
229+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
230230

231231
awaitItem().eventSink(ChangeRolesEvent.Exit)
232232
val confirmingState = awaitItem()
@@ -252,7 +252,7 @@ class ChangeRolesPresenterTests {
252252
assertThat(initialState.hasPendingChanges).isFalse()
253253
assertThat(initialState.exitState).isEqualTo(AsyncAction.Uninitialized)
254254

255-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
255+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
256256
val updatedState = awaitItem()
257257
assertThat(updatedState.hasPendingChanges).isTrue()
258258
skipItems(1)
@@ -279,8 +279,7 @@ class ChangeRolesPresenterTests {
279279
val initialState = awaitItem()
280280
assertThat(initialState.selectedUsers).hasSize(1)
281281

282-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
283-
282+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
284283
awaitItem().eventSink(ChangeRolesEvent.Save)
285284
val confirmingState = awaitItem()
286285
assertThat(confirmingState.savingState).isEqualTo(AsyncAction.Confirming)
@@ -304,7 +303,7 @@ class ChangeRolesPresenterTests {
304303
val initialState = awaitItem()
305304
assertThat(initialState.selectedUsers).hasSize(1)
306305

307-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
306+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
308307

309308
awaitItem().eventSink(ChangeRolesEvent.Save)
310309
val confirmingState = awaitItem()
@@ -334,7 +333,7 @@ class ChangeRolesPresenterTests {
334333
val initialState = awaitItem()
335334
assertThat(initialState.selectedUsers).hasSize(1)
336335

337-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
336+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
338337

339338
awaitItem().eventSink(ChangeRolesEvent.Save)
340339
assertThat(awaitItem().savingState).isEqualTo(AsyncAction.Success(Unit))
@@ -357,7 +356,7 @@ class ChangeRolesPresenterTests {
357356
val initialState = awaitItem()
358357
assertThat(initialState.selectedUsers).hasSize(1)
359358

360-
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(aRoomMember(A_USER_ID_2)))
359+
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
361360

362361
awaitItem().eventSink(ChangeRolesEvent.Save)
363362
val failedState = awaitItem()

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.element.android.libraries.matrix.api.room
1818

1919
import io.element.android.libraries.matrix.api.core.UserId
20+
import io.element.android.libraries.matrix.api.user.MatrixUser
2021

2122
data class RoomMember(
2223
val userId: UserId,
@@ -78,3 +79,10 @@ enum class RoomMembershipState {
7879
fun RoomMember.getBestName(): String {
7980
return displayName?.takeIf { it.isNotEmpty() } ?: userId.value
8081
}
82+
83+
fun RoomMember.toMatrixUser() = MatrixUser(
84+
userId = userId,
85+
displayName = displayName,
86+
avatarUrl = avatarUrl,
87+
)
88+

0 commit comments

Comments
 (0)