change(members): update tests to match new ui and logic
This commit is contained in:
parent
8fd34051e0
commit
bf45ed3f1f
3 changed files with 198 additions and 314 deletions
|
|
@ -25,7 +25,6 @@ import io.element.android.libraries.architecture.AsyncData
|
|||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.architecture.map
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
|
||||
|
|
@ -59,9 +58,6 @@ class RoomMemberListPresenter(
|
|||
@Composable
|
||||
override fun present(): RoomMemberListState {
|
||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||
var searchResults by remember {
|
||||
mutableStateOf<SearchBarResultState<AsyncData<RoomMembers>>>(SearchBarResultState.Initial())
|
||||
}
|
||||
val membersState by room.membersStateFlow.collectAsState()
|
||||
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
|
||||
val canInvite by room.canInviteAsState(syncUpdateFlow.value)
|
||||
|
|
@ -75,8 +71,8 @@ class RoomMemberListPresenter(
|
|||
.launchIn(this)
|
||||
}
|
||||
|
||||
var roomMembers: AsyncData<RoomMembers> by remember { mutableStateOf(AsyncData.Loading()) }
|
||||
var selectedSection by remember { mutableStateOf(SelectedSection.MEMBERS) }
|
||||
var roomMembers: AsyncData<RoomMembers> by remember { mutableStateOf(AsyncData.Loading()) }
|
||||
var filteredRoomMembers: AsyncData<RoomMembers> by remember { mutableStateOf(AsyncData.Loading()) }
|
||||
|
||||
// Update the room members when the screen is loaded
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
|||
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
|
||||
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||
import io.element.android.libraries.architecture.map
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
|
||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||
|
|
@ -21,108 +21,59 @@ import kotlinx.collections.immutable.persistentListOf
|
|||
|
||||
internal class RoomMemberListStateProvider : PreviewParameterProvider<RoomMemberListState> {
|
||||
override val values: Sequence<RoomMemberListState>
|
||||
get() = roomMemberListStates() + bannedRoomMemberListStates()
|
||||
get() = sequenceOf(
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Loading(),
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Failure(Exception("Error details")),
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = aLoadedRoomMembers(),
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = aLoadedRoomMembers(),
|
||||
selectedSection = SelectedSection.BANNED,
|
||||
moderationState = aRoomMemberModerationState(canBan = true),
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = aLoadedRoomMembers(),
|
||||
canInvite = true,
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = aLoadedRoomMembers(),
|
||||
searchQuery = "alice",
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = aLoadedRoomMembers(),
|
||||
searchQuery = "something-with-no-results",
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun roomMemberListStates(): Sequence<RoomMemberListState> = sequenceOf(
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Success(
|
||||
RoomMembers(
|
||||
invited = persistentListOf(aVictor().withIdentity(), aWalter().withIdentity()),
|
||||
joined = persistentListOf(anAlice().withIdentity(), aBob().withIdentity(), aWalter().withIdentity()),
|
||||
banned = persistentListOf(),
|
||||
),
|
||||
private fun aLoadedRoomMembers() = AsyncData.Success(
|
||||
RoomMembers(
|
||||
invited = persistentListOf(
|
||||
anInvitedVictor().withIdentity(),
|
||||
anInvitedWalter().withIdentity(),
|
||||
),
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Success(
|
||||
RoomMembers(
|
||||
invited = persistentListOf(aVictor().withIdentity(), aWalter().withIdentity()),
|
||||
joined = persistentListOf(
|
||||
anAlice().withIdentity(identityState = IdentityState.Verified),
|
||||
aBob().withIdentity(identityState = IdentityState.PinViolation),
|
||||
aWalter().withIdentity(identityState = IdentityState.VerificationViolation)
|
||||
),
|
||||
banned = persistentListOf(),
|
||||
)
|
||||
joined = persistentListOf(
|
||||
anAlice().withIdentity(identityState = IdentityState.Verified),
|
||||
aBob().withIdentity(identityState = IdentityState.PinViolation),
|
||||
aCarol().withIdentity(),
|
||||
aDavid().withIdentity(),
|
||||
anEve().withIdentity(identityState = IdentityState.VerificationViolation)
|
||||
),
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
moderationState = aRoomMemberModerationState(canBan = true)
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Loading(),
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState().copy(
|
||||
canInvite = true,
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState().copy(
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState().copy(
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState().copy(
|
||||
searchQuery = "someone",
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState().copy(
|
||||
searchQuery = "@someone:matrix.org",
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState().copy(
|
||||
searchQuery = "something-with-no-results",
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Failure(Exception("Error details")),
|
||||
selectedSection = SelectedSection.MEMBERS,
|
||||
),
|
||||
)
|
||||
|
||||
private fun bannedRoomMemberListStates(): Sequence<RoomMemberListState> = sequenceOf(
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Success(
|
||||
RoomMembers(
|
||||
invited = persistentListOf(),
|
||||
joined = persistentListOf(),
|
||||
banned = persistentListOf(
|
||||
aRoomMember(userId = UserId("@alice:example.com"), displayName = "Alice").withIdentity(),
|
||||
aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob").withIdentity(),
|
||||
aRoomMember(userId = UserId("@charlie:example.com"), displayName = "Charlie").withIdentity(),
|
||||
),
|
||||
)
|
||||
banned = persistentListOf(
|
||||
aBannedMallory().withIdentity(),
|
||||
aBannedSusie().withIdentity()
|
||||
),
|
||||
moderationState = aRoomMemberModerationState(),
|
||||
selectedSection = SelectedSection.BANNED,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Loading(
|
||||
RoomMembers(
|
||||
invited = persistentListOf(),
|
||||
joined = persistentListOf(),
|
||||
banned = persistentListOf(
|
||||
aRoomMember(userId = UserId("@alice:example.com"), displayName = "Alice").withIdentity(),
|
||||
aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob").withIdentity(),
|
||||
aRoomMember(userId = UserId("@charlie:example.com"), displayName = "Charlie").withIdentity(),
|
||||
),
|
||||
)
|
||||
),
|
||||
moderationState = aRoomMemberModerationState(),
|
||||
selectedSection = SelectedSection.BANNED,
|
||||
),
|
||||
aRoomMemberListState(
|
||||
roomMembers = AsyncData.Success(
|
||||
RoomMembers(
|
||||
invited = persistentListOf(),
|
||||
joined = persistentListOf(),
|
||||
banned = persistentListOf(),
|
||||
)
|
||||
),
|
||||
moderationState = aRoomMemberModerationState(),
|
||||
selectedSection = SelectedSection.BANNED,
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -130,14 +81,17 @@ internal fun aRoomMemberListState(
|
|||
roomMembers: AsyncData<RoomMembers> = AsyncData.Loading(),
|
||||
moderationState: RoomMemberModerationState = aRoomMemberModerationState(),
|
||||
selectedSection: SelectedSection = SelectedSection.MEMBERS,
|
||||
searchQuery: String = "",
|
||||
canInvite: Boolean = false,
|
||||
eventSink: (RoomMemberListEvents) -> Unit = {},
|
||||
) = RoomMemberListState(
|
||||
roomMembers = roomMembers,
|
||||
filteredRoomMembers = roomMembers,
|
||||
searchQuery = "",
|
||||
canInvite = false,
|
||||
filteredRoomMembers = roomMembers.map { it.filter(searchQuery) },
|
||||
searchQuery = searchQuery,
|
||||
canInvite = canInvite,
|
||||
moderationState = moderationState,
|
||||
selectedSection = selectedSection,
|
||||
eventSink = {}
|
||||
eventSink = eventSink
|
||||
)
|
||||
|
||||
fun aRoomMemberModerationState(
|
||||
|
|
@ -176,21 +130,30 @@ fun aRoomMember(
|
|||
fun aRoomMemberList() = persistentListOf(
|
||||
anAlice(),
|
||||
aBob(),
|
||||
aRoomMember(UserId("@carol:server.org"), "Carol"),
|
||||
aRoomMember(UserId("@david:server.org"), "David"),
|
||||
aRoomMember(UserId("@eve:server.org"), "Eve"),
|
||||
aRoomMember(UserId("@justin:server.org"), "Justin"),
|
||||
aRoomMember(UserId("@mallory:server.org"), "Mallory"),
|
||||
aRoomMember(UserId("@susie:server.org"), "Susie"),
|
||||
aVictor(),
|
||||
aWalter(),
|
||||
aCarol(),
|
||||
aDavid(),
|
||||
anEve(),
|
||||
anInvitedVictor(),
|
||||
anInvitedWalter(),
|
||||
aBannedSusie(),
|
||||
aBannedMallory(),
|
||||
)
|
||||
|
||||
fun anEve(): RoomMember = aRoomMember(UserId("@eve:server.org"), "Eve")
|
||||
|
||||
fun aDavid(): RoomMember = aRoomMember(UserId("@david:server.org"), "David")
|
||||
|
||||
fun aCarol(): RoomMember = aRoomMember(UserId("@carol:server.org"), "Carol")
|
||||
|
||||
fun anAlice() = aRoomMember(UserId("@alice:server.org"), "Alice", role = RoomMember.Role.Admin)
|
||||
fun aBob() = aRoomMember(UserId("@bob:server.org"), "Bob", role = RoomMember.Role.Moderator)
|
||||
|
||||
fun aVictor() = aRoomMember(UserId("@victor:server.org"), "Victor", membership = RoomMembershipState.INVITE)
|
||||
fun anInvitedVictor() = aRoomMember(UserId("@victor:server.org"), "Victor", membership = RoomMembershipState.INVITE)
|
||||
|
||||
fun aWalter() = aRoomMember(UserId("@walter:server.org"), "Walter", membership = RoomMembershipState.INVITE)
|
||||
fun anInvitedWalter() = aRoomMember(UserId("@walter:server.org"), "Walter", membership = RoomMembershipState.INVITE)
|
||||
|
||||
fun aBannedSusie(): RoomMember = aRoomMember(UserId("@susie:server.org"), "Susie", membership = RoomMembershipState.BAN)
|
||||
|
||||
fun aBannedMallory(): RoomMember = aRoomMember(UserId("@mallory:server.org"), "Mallory", membership = RoomMembershipState.BAN)
|
||||
|
||||
private fun RoomMember.withIdentity(identityState: IdentityState? = null) = RoomMemberWithIdentityState(this, identityState)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue