Merge branch 'develop' into feature/fga/space_settings_iteration

This commit is contained in:
ganfra 2025-12-16 11:02:29 +01:00
commit 1300e7723c
180 changed files with 3495 additions and 1242 deletions

View file

@ -44,7 +44,7 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
@ -81,7 +81,7 @@ class ChangeRolesPresenter(
val owners = if (role == RoomMember.Role.Admin) {
room.usersWithRole { role -> role is RoomMember.Role.Owner }
} else {
emptyFlow()
flowOf(persistentListOf())
}
combine(
owners,

View file

@ -1,14 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_room_change_permissions_administrators">"Kun admins"</string>
<string name="screen_room_change_permissions_administrators">"Administrator"</string>
<string name="screen_room_change_permissions_ban_people">"Spær brugere"</string>
<string name="screen_room_change_permissions_delete_messages">"Fjern beskeder"</string>
<string name="screen_room_change_permissions_invite_people">"Invitér personer og acceptér anmodninger om at deltage"</string>
<string name="screen_room_change_permissions_everyone">"Medlem"</string>
<string name="screen_room_change_permissions_invite_people">"Invitér andre"</string>
<string name="screen_room_change_permissions_member_moderation">"Administrer medlemmer"</string>
<string name="screen_room_change_permissions_messages_and_content">"Beskeder og indhold"</string>
<string name="screen_room_change_permissions_moderators">"Admins og moderatorer"</string>
<string name="screen_room_change_permissions_remove_people">"Fjern personer og afvis anmodninger om at deltage"</string>
<string name="screen_room_change_permissions_moderators">"Moderator"</string>
<string name="screen_room_change_permissions_remove_people">"Fjern personer"</string>
<string name="screen_room_change_permissions_room_avatar">"Skift rummets avatar"</string>
<string name="screen_room_change_permissions_room_details">"Rediger rum"</string>
<string name="screen_room_change_permissions_room_details">"Redigér detaljer"</string>
<string name="screen_room_change_permissions_room_name">"Skift rummets navn"</string>
<string name="screen_room_change_permissions_room_topic">"Skift emne for rummet"</string>
<string name="screen_room_change_permissions_send_messages">"Send beskeder"</string>
@ -32,6 +34,12 @@
<string name="screen_room_change_role_unsaved_changes_description">"Du har ændringer, der ikke er gemt."</string>
<string name="screen_room_change_role_unsaved_changes_title">"Gem ændringer?"</string>
<string name="screen_room_member_list_banned_empty">"Der er ingen spærrede brugere i dette rum."</string>
<plurals name="screen_room_member_list_banned_header_title">
<item quantity="one">"%1$d Spærret"</item>
<item quantity="other">"%1$d Spærret"</item>
</plurals>
<string name="screen_room_member_list_empty_search_subtitle">"Tjek stavningen eller prøv en ny søgning"</string>
<string name="screen_room_member_list_empty_search_title">"Ingen resultater for \"%1$s\""</string>
<plurals name="screen_room_member_list_header_title">
<item quantity="one">"%1$d person"</item>
<item quantity="other">"%1$d personer"</item>
@ -43,8 +51,13 @@
<string name="screen_room_member_list_manage_member_unban_title">"Fjern brugerens spærring fra rummet"</string>
<string name="screen_room_member_list_mode_banned">"Spærret"</string>
<string name="screen_room_member_list_mode_members">"Medlemmer"</string>
<string name="screen_room_member_list_role_administrator">"Kun admins"</string>
<string name="screen_room_member_list_role_moderator">"Admins og moderatorer"</string>
<plurals name="screen_room_member_list_pending_header_title">
<item quantity="one">"%1$d Inviteret"</item>
<item quantity="other">"%1$d Inviteret"</item>
</plurals>
<string name="screen_room_member_list_pending_status">"Afventer"</string>
<string name="screen_room_member_list_role_administrator">"Administrator"</string>
<string name="screen_room_member_list_role_moderator">"Moderator"</string>
<string name="screen_room_member_list_role_owner">"Ejeren"</string>
<string name="screen_room_member_list_room_members_header_title">"Medlemmer af rummet"</string>
<string name="screen_room_member_list_unbanning_user">"Ophæver spærring af %1$s"</string>
@ -57,10 +70,12 @@
<string name="screen_room_roles_and_permissions_messages_and_content">"Beskeder og indhold"</string>
<string name="screen_room_roles_and_permissions_moderators">"Moderatorer"</string>
<string name="screen_room_roles_and_permissions_owners">"Ejere"</string>
<string name="screen_room_roles_and_permissions_permissions_header">"Tilladelser"</string>
<string name="screen_room_roles_and_permissions_reset">"Nulstil tilladelser"</string>
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Når du nulstiller tilladelserne, mister du de nuværende indstillinger."</string>
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Nulstil tilladelser?"</string>
<string name="screen_room_roles_and_permissions_roles_header">"Roller"</string>
<string name="screen_room_roles_and_permissions_room_details">"Detaljer om rummet"</string>
<string name="screen_room_roles_and_permissions_space_details">"Detaljer om gruppe"</string>
<string name="screen_room_roles_and_permissions_title">"Roller og tilladelser"</string>
</resources>

View file

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_room_change_permissions_administrators">"Administrator"</string>
<string name="screen_room_change_permissions_ban_people">"Zabrana pristupa osobama"</string>
<string name="screen_room_change_permissions_delete_messages">"Uklanjanje poruka"</string>
<string name="screen_room_change_permissions_everyone">"Član"</string>
<string name="screen_room_change_permissions_invite_people">"Pozivanje osoba"</string>
<string name="screen_room_change_permissions_member_moderation">"Upravljanje članovima"</string>
<string name="screen_room_change_permissions_messages_and_content">"Poruke i sadržaj"</string>
<string name="screen_room_change_permissions_moderators">"Moderator"</string>
<string name="screen_room_change_permissions_remove_people">"Uklanjanje osoba"</string>
<string name="screen_room_change_permissions_room_avatar">"Promjena avatara"</string>
<string name="screen_room_change_permissions_room_details">"Uredi pojedinosti"</string>
<string name="screen_room_change_permissions_room_name">"Promjena imena"</string>
<string name="screen_room_change_permissions_room_topic">"Promjena teme"</string>
<string name="screen_room_change_permissions_send_messages">"Slanje poruka"</string>
<string name="screen_room_change_role_administrators_title">"Uredi administratore"</string>
<string name="screen_room_change_role_confirm_add_admin_description">"Nećete moći poništiti ovu radnju. Postavit ćete da korisnik ima isti položaj kao i vi."</string>
<string name="screen_room_change_role_confirm_add_admin_title">"Dodati administratora?"</string>
<string name="screen_room_change_role_confirm_change_owners_description">"Nećete moći poništiti ovu radnju. Prenosite vlasništvo na odabrane korisnike. Nakon što odete, to će biti trajno."</string>
<string name="screen_room_change_role_confirm_change_owners_title">"Želite li prenijeti vlasništvo?"</string>
<string name="screen_room_change_role_confirm_demote_self_action">"Degradiraj"</string>
<string name="screen_room_change_role_confirm_demote_self_description">"Nećete moći poništiti ovu promjenu jer sami sebe degradirate. Ako ste posljednji privilegirani korisnik u sobi, nećete moći ponovno dobiti privilegije."</string>
<string name="screen_room_change_role_confirm_demote_self_title">"Želite li se degradirati?"</string>
<string name="screen_room_change_role_invited_member_name">"%1$s (na čekanju)"</string>
<string name="screen_room_change_role_invited_member_name_android">"(na čekanju)"</string>
<string name="screen_room_change_role_moderators_admin_section_footer">"Administratori automatski imaju moderatorske ovlasti"</string>
<string name="screen_room_change_role_moderators_owner_section_footer">"Vlasnici automatski imaju administratorske ovlasti."</string>
<string name="screen_room_change_role_moderators_title">"Uredi moderatore"</string>
<string name="screen_room_change_role_owners_title">"Odaberi vlasnike"</string>
<string name="screen_room_change_role_section_administrators">"Administratori"</string>
<string name="screen_room_change_role_section_moderators">"Moderatori"</string>
<string name="screen_room_change_role_section_users">"Članovi"</string>
<string name="screen_room_change_role_unsaved_changes_description">"Niste spremili sve promjene."</string>
<string name="screen_room_change_role_unsaved_changes_title">"Želite li spremiti promjene?"</string>
<string name="screen_room_member_list_banned_empty">"Nema zabranjenih korisnika."</string>
<plurals name="screen_room_member_list_banned_header_title">
<item quantity="one">"%1$d zabranjen"</item>
<item quantity="few">"%1$d zabranjena"</item>
<item quantity="other">"%1$d zabranjenih"</item>
</plurals>
<string name="screen_room_member_list_empty_search_subtitle">"Provjerite pravopis ili pokušajte s novim pretraživanjem"</string>
<string name="screen_room_member_list_empty_search_title">"Nema rezultata za “%1$s”"</string>
<plurals name="screen_room_member_list_header_title">
<item quantity="one">"%1$d osoba"</item>
<item quantity="few">"%1$d osobe"</item>
<item quantity="other">"%1$d ljudi"</item>
</plurals>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Zabrani korisnika"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Samo ukloni člana"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Poništi zabranu"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Moći će se ponovno pridružiti ovoj sobi ako budu pozvani."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Poništi zabranu pristupa korisniku"</string>
<string name="screen_room_member_list_mode_banned">"Zabranjeni"</string>
<string name="screen_room_member_list_mode_members">"Članovi"</string>
<plurals name="screen_room_member_list_pending_header_title">
<item quantity="one">"%1$d pozvan"</item>
<item quantity="few">"%1$d pozvana"</item>
<item quantity="other">"%1$d pozvanih"</item>
</plurals>
<string name="screen_room_member_list_pending_status">"Na čekanju"</string>
<string name="screen_room_member_list_role_administrator">"Administrator"</string>
<string name="screen_room_member_list_role_moderator">"Moderator"</string>
<string name="screen_room_member_list_role_owner">"Vlasnik"</string>
<string name="screen_room_member_list_room_members_header_title">"Članovi sobe"</string>
<string name="screen_room_member_list_unbanning_user">"Uklanja se zabrana korisniku %1$s"</string>
<string name="screen_room_roles_and_permissions_admins">"Administratori"</string>
<string name="screen_room_roles_and_permissions_admins_and_owners">"Administratori i vlasnici"</string>
<string name="screen_room_roles_and_permissions_change_my_role">"Promijeni moju ulogu"</string>
<string name="screen_room_roles_and_permissions_change_role_demote_to_member">"Degradiraj u člana"</string>
<string name="screen_room_roles_and_permissions_change_role_demote_to_moderator">"Degradiraj u moderatora"</string>
<string name="screen_room_roles_and_permissions_member_moderation">"Moderiranje članova"</string>
<string name="screen_room_roles_and_permissions_messages_and_content">"Poruke i sadržaj"</string>
<string name="screen_room_roles_and_permissions_moderators">"Moderatori"</string>
<string name="screen_room_roles_and_permissions_owners">"Vlasnici"</string>
<string name="screen_room_roles_and_permissions_permissions_header">"Dopuštenja"</string>
<string name="screen_room_roles_and_permissions_reset">"Poništi dopuštenja"</string>
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Nakon što poništite dopuštenja, izgubit ćete trenutačne postavke."</string>
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Želite li poništiti dopuštenja?"</string>
<string name="screen_room_roles_and_permissions_roles_header">"Uloge"</string>
<string name="screen_room_roles_and_permissions_room_details">"Pojedinosti o sobi"</string>
<string name="screen_room_roles_and_permissions_space_details">"Pojedinosti o prostoru"</string>
<string name="screen_room_roles_and_permissions_title">"Uloge i dopuštenja"</string>
</resources>

View file

@ -38,6 +38,8 @@
<string name="screen_room_change_role_unsaved_changes_description">"Mentetlen módosításai vannak."</string>
<string name="screen_room_change_role_unsaved_changes_title">"Menti a módosításokat?"</string>
<string name="screen_room_member_list_banned_empty">"Ebben a szobában nincsenek kitiltott felhasználók."</string>
<string name="screen_room_member_list_empty_search_subtitle">"Ellenőrizze a helyesírást, vagy próbáljon meg egy új keresést"</string>
<string name="screen_room_member_list_empty_search_title">"Nincs találat a következőre: „%1$s\""</string>
<plurals name="screen_room_member_list_header_title">
<item quantity="one">"%1$d személy"</item>
<item quantity="other">"%1$d személy"</item>

View file

@ -1,14 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_room_change_permissions_administrators">"Doar administratori"</string>
<string name="screen_room_change_permissions_administrators">"Administrator"</string>
<string name="screen_room_change_permissions_ban_people">"Interziceți persoane"</string>
<string name="screen_room_change_permissions_delete_messages">"Ștergeți mesajele"</string>
<string name="screen_room_change_permissions_invite_people">"Invitați persoane și acceptați cereri de alaturare"</string>
<string name="screen_room_change_permissions_everyone">"Membru"</string>
<string name="screen_room_change_permissions_invite_people">"Invitați persoane"</string>
<string name="screen_room_change_permissions_member_moderation">"Gestionați membrii"</string>
<string name="screen_room_change_permissions_messages_and_content">"Mesaje și conținut"</string>
<string name="screen_room_change_permissions_moderators">"Administratori și moderatori"</string>
<string name="screen_room_change_permissions_remove_people">"Îndepărtați persoane și refuzați cereri de alăturare"</string>
<string name="screen_room_change_permissions_moderators">"Moderator"</string>
<string name="screen_room_change_permissions_remove_people">"Îndepărtați persoane"</string>
<string name="screen_room_change_permissions_room_avatar">"Schimbați avatarul camerei"</string>
<string name="screen_room_change_permissions_room_details">"Editați camera"</string>
<string name="screen_room_change_permissions_room_details">"Editați detaliile"</string>
<string name="screen_room_change_permissions_room_name">"Schimbă numele camerei"</string>
<string name="screen_room_change_permissions_room_topic">"Schimbați subiectul camerei"</string>
<string name="screen_room_change_permissions_send_messages">"Trimiteți mesaje"</string>
@ -31,9 +33,17 @@
<string name="screen_room_change_role_section_users">"Membri"</string>
<string name="screen_room_change_role_unsaved_changes_description">"Aveți modificări nesalvate."</string>
<string name="screen_room_change_role_unsaved_changes_title">"Salvați modificările?"</string>
<string name="screen_room_member_list_banned_empty">"Nu există utilizatori interziși în această cameră."</string>
<string name="screen_room_member_list_banned_empty">"Nu există utilizatori interziși."</string>
<plurals name="screen_room_member_list_banned_header_title">
<item quantity="one">"%1$d Interzis"</item>
<item quantity="few">"%1$d Interziși"</item>
<item quantity="other">"%1$d Interziși"</item>
</plurals>
<string name="screen_room_member_list_empty_search_subtitle">"Verificați ortografia sau încercați o căutare nouă"</string>
<string name="screen_room_member_list_empty_search_title">"Niciun rezultat pentru “%1$s”"</string>
<plurals name="screen_room_member_list_header_title">
<item quantity="one">"o persoană"</item>
<item quantity="one">"%1$d persoană"</item>
<item quantity="few">"%1$d persoane"</item>
<item quantity="other">"%1$d persoane"</item>
</plurals>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Îndepărtați și interziceți membrul"</string>
@ -43,8 +53,14 @@
<string name="screen_room_member_list_manage_member_unban_title">"Revocati excluderea din camera"</string>
<string name="screen_room_member_list_mode_banned">"Excluși"</string>
<string name="screen_room_member_list_mode_members">"Membri"</string>
<string name="screen_room_member_list_role_administrator">"Doar administratori"</string>
<string name="screen_room_member_list_role_moderator">"Administratori și moderatori"</string>
<plurals name="screen_room_member_list_pending_header_title">
<item quantity="one">"%1$d Invitat"</item>
<item quantity="few">"%1$d Invitați"</item>
<item quantity="other">"%1$d Invitați"</item>
</plurals>
<string name="screen_room_member_list_pending_status">"În așteptare"</string>
<string name="screen_room_member_list_role_administrator">"Administrator"</string>
<string name="screen_room_member_list_role_moderator">"Moderator"</string>
<string name="screen_room_member_list_role_owner">"Proprietar"</string>
<string name="screen_room_member_list_room_members_header_title">"Membrii camerei"</string>
<string name="screen_room_member_list_unbanning_user">"Se anulează interzicerea lui %1$s"</string>
@ -57,10 +73,12 @@
<string name="screen_room_roles_and_permissions_messages_and_content">"Mesaje și conținut"</string>
<string name="screen_room_roles_and_permissions_moderators">"Moderatori"</string>
<string name="screen_room_roles_and_permissions_owners">"Proprietari"</string>
<string name="screen_room_roles_and_permissions_permissions_header">"Permisiuni"</string>
<string name="screen_room_roles_and_permissions_reset">"Resetați permisiunile"</string>
<string name="screen_room_roles_and_permissions_reset_confirm_description">"După ce resetați permisiunile, veți pierde setările curente."</string>
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Resetați permisiunile?"</string>
<string name="screen_room_roles_and_permissions_roles_header">"Roluri"</string>
<string name="screen_room_roles_and_permissions_room_details">"Detaliile camerei"</string>
<string name="screen_room_roles_and_permissions_space_details">"Detalii spațiu"</string>
<string name="screen_room_roles_and_permissions_title">"Roluri și permisiuni"</string>
</resources>

View file

@ -256,44 +256,48 @@ class ChangeRolesPresenterTest {
@Test
fun `present - UserSelectionToggle adds and removes users from the selected user list`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom().apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Admin)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(room = room)
val userMember = roomMemberList.first { it.role == RoomMember.Role.User }
presenter.test {
skipItems(1)
val initialState = awaitItem()
assertThat(initialState.selectedUsers).hasSize(1)
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(userMember.toMatrixUser()))
assertThat(awaitItem().selectedUsers).hasSize(2)
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(userMember.toMatrixUser()))
assertThat(awaitItem().selectedUsers).hasSize(1)
}
}
@Test
fun `present - hasPendingChanges is true when the initial selected users don't match the new ones`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom().apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Admin)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(room = room)
val userMember = roomMemberList.first { it.role == RoomMember.Role.User }
presenter.test {
skipItems(1)
val initialState = awaitItem()
assertThat(initialState.hasPendingChanges).isFalse()
assertThat(initialState.selectedUsers).hasSize(1)
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(userMember.toMatrixUser()))
with(awaitItem()) {
assertThat(selectedUsers).hasSize(2)
assertThat(hasPendingChanges).isTrue()
}
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(userMember.toMatrixUser()))
with(awaitItem()) {
assertThat(selectedUsers).hasSize(1)
assertThat(hasPendingChanges).isFalse()
@ -303,9 +307,10 @@ class ChangeRolesPresenterTest {
@Test
fun `present - Exit will display success false if no pending changes`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom().apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Admin)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(room = room)
presenter.test {
@ -321,9 +326,10 @@ class ChangeRolesPresenterTest {
@Test
fun `present - CloseDialog will remove exit confirmation`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom().apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Admin)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(room = room)
presenter.test {
@ -345,9 +351,10 @@ class ChangeRolesPresenterTest {
@Test
fun `present - Exit will display a confirmation dialog if there are pending changes, calling it again will actually exit`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom().apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Admin)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(room = room)
presenter.test {
@ -371,12 +378,13 @@ class ChangeRolesPresenterTest {
@Test
fun `present - Save will display a confirmation when adding admins`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom(
updateUserRoleResult = { Result.success(Unit) },
baseRoom = FakeBaseRoom(updateMembersResult = { Result.success(Unit) }),
).apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Admin)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(role = RoomMember.Role.Admin, room = room)
presenter.test {
@ -395,9 +403,10 @@ class ChangeRolesPresenterTest {
@Test
fun `present - CloseDialog will remove the confirmation dialog`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom().apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Admin)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(role = RoomMember.Role.Admin, room = room)
presenter.test {
@ -419,25 +428,27 @@ class ChangeRolesPresenterTest {
@Test
fun `present - Save will just save the data for moderators`() = runTest {
val analyticsService = FakeAnalyticsService()
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom(
updateUserRoleResult = { Result.success(Unit) },
baseRoom = FakeBaseRoom(updateMembersResult = { Result.success(Unit) }),
).apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(RoomMember.Role.Moderator)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(
role = RoomMember.Role.Moderator,
room = room,
analyticsService = analyticsService
)
val userMember = roomMemberList.first { it.role == RoomMember.Role.User }
presenter.test {
skipItems(1)
skipItems(2)
val initialState = awaitItem()
assertThat(initialState.selectedUsers).isEmpty()
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
assertThat(initialState.selectedUsers).hasSize(1)
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(userMember.toMatrixUser()))
awaitItem().also {
assertThat(it.selectedUsers).hasSize(1)
assertThat(it.selectedUsers).hasSize(2)
it.eventSink(ChangeRolesEvent.Save)
}
assertThat(awaitItem().savingState).isInstanceOf(AsyncAction.Loading::class.java)
@ -516,20 +527,22 @@ class ChangeRolesPresenterTest {
@Test
fun `present - Save can handle failures and CloseDialog clears them`() = runTest {
val roomMemberList = aRoomMemberList()
val room = FakeJoinedRoom(
updateUserRoleResult = { Result.failure(IllegalStateException("Failed")) }
).apply {
givenRoomMembersState(RoomMembersState.Ready(aRoomMemberList()))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsWithRole(role = RoomMember.Role.Moderator, userId = A_USER_ID)))
givenRoomMembersState(RoomMembersState.Ready(roomMemberList))
givenRoomInfo(aRoomInfo(roomPowerLevels = roomPowerLevelsFromRoomMemberList(roomMemberList)))
}
val presenter = createChangeRolesPresenter(role = RoomMember.Role.Moderator, room = room)
val userMember = roomMemberList.first { it.role == RoomMember.Role.User }
presenter.test {
skipItems(1)
skipItems(2)
val initialState = awaitItem()
assertThat(initialState.selectedUsers).isEmpty()
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
assertThat(initialState.selectedUsers).hasSize(1)
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(userMember.toMatrixUser()))
awaitItem().also {
assertThat(it.selectedUsers).hasSize(1)
assertThat(it.selectedUsers).hasSize(2)
it.eventSink(ChangeRolesEvent.Save)
}
val loadingState = awaitItem()
@ -553,13 +566,12 @@ class ChangeRolesPresenterTest {
}
}
private fun roomPowerLevelsWithRole(
role: RoomMember.Role,
userId: UserId = A_USER_ID,
private fun roomPowerLevelsFromRoomMemberList(
roomMemberList: List<RoomMember>,
): RoomPowerLevels {
return RoomPowerLevels(
values = defaultRoomPowerLevelValues(),
users = persistentMapOf(userId to role.powerLevel)
users = roomMemberList.associate { it.userId to it.role.powerLevel }.toImmutableMap()
)
}