mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-10-31 16:22:49 +00:00
Add a hook to disable public rooms/spaces on UI.
This commit is contained in:
+1
-1
Submodule enterprise updated: 073abe3b44...d25d658acb
+7
-2
@@ -16,6 +16,7 @@ import androidx.compose.runtime.collectAsState
|
|||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
@@ -92,6 +93,9 @@ class ConfigureRoomPresenter(
|
|||||||
val isKnockFeatureEnabled by remember {
|
val isKnockFeatureEnabled by remember {
|
||||||
featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock)
|
featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock)
|
||||||
}.collectAsState(initial = false)
|
}.collectAsState(initial = false)
|
||||||
|
val arePublicRoomsDisabled by produceState(false) {
|
||||||
|
value = sessionEnterpriseService.arePublicRoomsDisabledByHomeserver()
|
||||||
|
}
|
||||||
val roomAddressValidity = remember {
|
val roomAddressValidity = remember {
|
||||||
mutableStateOf<RoomAddressValidity>(RoomAddressValidity.Unknown)
|
mutableStateOf<RoomAddressValidity>(RoomAddressValidity.Unknown)
|
||||||
}
|
}
|
||||||
@@ -145,12 +149,13 @@ class ConfigureRoomPresenter(
|
|||||||
// 1. If we are creating a space.
|
// 1. If we are creating a space.
|
||||||
// 2. If it has a parent space.
|
// 2. If it has a parent space.
|
||||||
// 3. If knocking is enabled.
|
// 3. If knocking is enabled.
|
||||||
|
// 4. If the homeserver forbids public rooms.
|
||||||
val parentSpace = createRoomConfig.parentSpace
|
val parentSpace = createRoomConfig.parentSpace
|
||||||
val availableJoinRules = remember(parentSpace, isSpace, isKnockFeatureEnabled) {
|
val availableJoinRules = remember(parentSpace, isSpace, isKnockFeatureEnabled, arePublicRoomsDisabled) {
|
||||||
when {
|
when {
|
||||||
isSpace && parentSpace != null -> TODO("Adding a space to a parent space is not supported yet! How did you get here?")
|
isSpace && parentSpace != null -> TODO("Adding a space to a parent space is not supported yet! How did you get here?")
|
||||||
parentSpace == null || parentSpace.joinRule == JoinRule.Public -> listOfNotNull(
|
parentSpace == null || parentSpace.joinRule == JoinRule.Public -> listOfNotNull(
|
||||||
JoinRuleItem.PublicVisibility.Public,
|
JoinRuleItem.PublicVisibility.Public.takeIf { !arePublicRoomsDisabled },
|
||||||
JoinRuleItem.PublicVisibility.AskToJoin.takeIf { !isSpace && isKnockFeatureEnabled },
|
JoinRuleItem.PublicVisibility.AskToJoin.takeIf { !isSpace && isKnockFeatureEnabled },
|
||||||
JoinRuleItem.PrivateVisibility.Private,
|
JoinRuleItem.PrivateVisibility.Private,
|
||||||
).toImmutableList()
|
).toImmutableList()
|
||||||
|
|||||||
+41
-2
@@ -57,6 +57,7 @@ import io.element.android.libraries.previewutils.room.aSpaceRoom
|
|||||||
import io.element.android.services.analytics.api.AnalyticsService
|
import io.element.android.services.analytics.api.AnalyticsService
|
||||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||||
import io.element.android.tests.testutils.WarmUpRule
|
import io.element.android.tests.testutils.WarmUpRule
|
||||||
|
import io.element.android.tests.testutils.consumeItemsUntilPredicate
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.lambda.matching
|
import io.element.android.tests.testutils.lambda.matching
|
||||||
import io.element.android.tests.testutils.robolectric.RobolectricTest
|
import io.element.android.tests.testutils.robolectric.RobolectricTest
|
||||||
@@ -522,7 +523,10 @@ class ConfigureRoomPresenterTest : RobolectricTest() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - creating a private room when encryption is disabled by the HS creates it unencrypted`() = runTest {
|
fun `present - creating a private room when encryption is disabled by the HS creates it unencrypted`() = runTest {
|
||||||
val sessionEnterpriseService = FakeSessionEnterpriseService(isEncryptionDisabledResult = { true })
|
val sessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
|
isEncryptionDisabledResult = { true },
|
||||||
|
arePublicRoomsDisabledResult = { false },
|
||||||
|
)
|
||||||
val createRoomLambda = lambdaRecorder<CreateRoomParameters, Result<RoomId>> { Result.success(A_ROOM_ID) }
|
val createRoomLambda = lambdaRecorder<CreateRoomParameters, Result<RoomId>> { Result.success(A_ROOM_ID) }
|
||||||
val matrixClient = createMatrixClient().apply {
|
val matrixClient = createMatrixClient().apply {
|
||||||
createRoomResult = createRoomLambda
|
createRoomResult = createRoomLambda
|
||||||
@@ -544,6 +548,38 @@ class ConfigureRoomPresenterTest : RobolectricTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `present - when public rooms are disabled by the HS, the public join rule is not available`() = runTest {
|
||||||
|
val presenter = createConfigureRoomPresenter(
|
||||||
|
sessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
|
isEncryptionDisabledResult = { false },
|
||||||
|
arePublicRoomsDisabledResult = { true },
|
||||||
|
),
|
||||||
|
)
|
||||||
|
presenter.test {
|
||||||
|
val expectedJoinRules = listOf(JoinRuleItem.PublicVisibility.AskToJoin, JoinRuleItem.PrivateVisibility.Private)
|
||||||
|
val state = consumeItemsUntilPredicate { it.availableJoinRules == expectedJoinRules }.last()
|
||||||
|
assertThat(state.availableJoinRules).containsExactlyElementsIn(expectedJoinRules).inOrder()
|
||||||
|
cancelAndIgnoreRemainingEvents()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `present - when public rooms are disabled by the HS, only the private join rule is available for a space`() = runTest {
|
||||||
|
val presenter = createConfigureRoomPresenter(
|
||||||
|
isSpace = true,
|
||||||
|
sessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
|
isEncryptionDisabledResult = { false },
|
||||||
|
arePublicRoomsDisabledResult = { true },
|
||||||
|
),
|
||||||
|
)
|
||||||
|
presenter.test {
|
||||||
|
val state = consumeItemsUntilPredicate { it.availableJoinRules == listOf(JoinRuleItem.PrivateVisibility.Private) }.last()
|
||||||
|
assertThat(state.config.visibilityState).isEqualTo(RoomVisibilityState.Private(JoinRuleItem.PrivateVisibility.Private))
|
||||||
|
cancelAndIgnoreRemainingEvents()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private suspend fun TurbineTestContext<ConfigureRoomState>.initialState(): ConfigureRoomState {
|
private suspend fun TurbineTestContext<ConfigureRoomState>.initialState(): ConfigureRoomState {
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
return awaitItem()
|
return awaitItem()
|
||||||
@@ -579,7 +615,10 @@ class ConfigureRoomPresenterTest : RobolectricTest() {
|
|||||||
permissionsPresenter: PermissionsPresenter = FakePermissionsPresenter(),
|
permissionsPresenter: PermissionsPresenter = FakePermissionsPresenter(),
|
||||||
isKnockFeatureEnabled: Boolean = true,
|
isKnockFeatureEnabled: Boolean = true,
|
||||||
mediaOptimizationConfigProvider: FakeMediaOptimizationConfigProvider = FakeMediaOptimizationConfigProvider(),
|
mediaOptimizationConfigProvider: FakeMediaOptimizationConfigProvider = FakeMediaOptimizationConfigProvider(),
|
||||||
sessionEnterpriseService: FakeSessionEnterpriseService = FakeSessionEnterpriseService(isEncryptionDisabledResult = { false }),
|
sessionEnterpriseService: FakeSessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
|
isEncryptionDisabledResult = { false },
|
||||||
|
arePublicRoomsDisabledResult = { false },
|
||||||
|
),
|
||||||
) = ConfigureRoomPresenter(
|
) = ConfigureRoomPresenter(
|
||||||
isSpace = isSpace,
|
isSpace = isSpace,
|
||||||
initialParentSpaceId = initialParenSpaceId,
|
initialParentSpaceId = initialParenSpaceId,
|
||||||
|
|||||||
+6
@@ -29,4 +29,10 @@ interface SessionEnterpriseService {
|
|||||||
|
|
||||||
/** Whether the homeserver forbids creating encrypted rooms, in which case the app must not offer the option. */
|
/** Whether the homeserver forbids creating encrypted rooms, in which case the app must not offer the option. */
|
||||||
suspend fun isEncryptionDisabledByHomeserver(): Boolean
|
suspend fun isEncryptionDisabledByHomeserver(): Boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the homeserver forbids public rooms and spaces, in which case the app must not offer to create one,
|
||||||
|
* nor to make an existing room or space public.
|
||||||
|
*/
|
||||||
|
suspend fun arePublicRoomsDisabledByHomeserver(): Boolean
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -18,4 +18,5 @@ class DefaultSessionEnterpriseService : SessionEnterpriseService {
|
|||||||
override suspend fun tweakMasUrl(url: String): String = url
|
override suspend fun tweakMasUrl(url: String): String = url
|
||||||
override suspend fun isElementCallAvailable(): Boolean = true
|
override suspend fun isElementCallAvailable(): Boolean = true
|
||||||
override suspend fun isEncryptionDisabledByHomeserver(): Boolean = false
|
override suspend fun isEncryptionDisabledByHomeserver(): Boolean = false
|
||||||
|
override suspend fun arePublicRoomsDisabledByHomeserver(): Boolean = false
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -16,6 +16,7 @@ class FakeSessionEnterpriseService(
|
|||||||
private val isElementCallAvailableResult: () -> Boolean = { lambdaError() },
|
private val isElementCallAvailableResult: () -> Boolean = { lambdaError() },
|
||||||
private val tweakMasUrlResult: (String) -> String = { lambdaError() },
|
private val tweakMasUrlResult: (String) -> String = { lambdaError() },
|
||||||
private val isEncryptionDisabledResult: () -> Boolean = { lambdaError() },
|
private val isEncryptionDisabledResult: () -> Boolean = { lambdaError() },
|
||||||
|
private val arePublicRoomsDisabledResult: () -> Boolean = { lambdaError() },
|
||||||
) : SessionEnterpriseService {
|
) : SessionEnterpriseService {
|
||||||
override suspend fun init() {
|
override suspend fun init() {
|
||||||
}
|
}
|
||||||
@@ -31,4 +32,8 @@ class FakeSessionEnterpriseService(
|
|||||||
override suspend fun isEncryptionDisabledByHomeserver(): Boolean {
|
override suspend fun isEncryptionDisabledByHomeserver(): Boolean {
|
||||||
return isEncryptionDisabledResult()
|
return isEncryptionDisabledResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun arePublicRoomsDisabledByHomeserver(): Boolean {
|
||||||
|
return arePublicRoomsDisabledResult()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -89,6 +89,10 @@ class SecurityAndPrivacyPresenter(
|
|||||||
value = sessionEnterpriseService.isEncryptionDisabledByHomeserver()
|
value = sessionEnterpriseService.isEncryptionDisabledByHomeserver()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val arePublicRoomsDisabledByHomeserver by produceState(false) {
|
||||||
|
value = sessionEnterpriseService.arePublicRoomsDisabledByHomeserver()
|
||||||
|
}
|
||||||
|
|
||||||
val savedIsVisibleInRoomDirectory = remember { mutableStateOf<AsyncData<Boolean>>(AsyncData.Uninitialized) }
|
val savedIsVisibleInRoomDirectory = remember { mutableStateOf<AsyncData<Boolean>>(AsyncData.Uninitialized) }
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
isRoomVisibleInRoomDirectory(savedIsVisibleInRoomDirectory)
|
isRoomVisibleInRoomDirectory(savedIsVisibleInRoomDirectory)
|
||||||
@@ -254,6 +258,7 @@ class SecurityAndPrivacyPresenter(
|
|||||||
selectableJoinedSpaces = selectableJoinedSpaces,
|
selectableJoinedSpaces = selectableJoinedSpaces,
|
||||||
spaceSelectionMode = spaceSelectionMode,
|
spaceSelectionMode = spaceSelectionMode,
|
||||||
isEncryptionDisabledByHomeserver = isEncryptionDisabledByHomeserver,
|
isEncryptionDisabledByHomeserver = isEncryptionDisabledByHomeserver,
|
||||||
|
arePublicRoomsDisabledByHomeserver = arePublicRoomsDisabledByHomeserver,
|
||||||
eventSink = ::handleEvent,
|
eventSink = ::handleEvent,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+6
@@ -28,6 +28,7 @@ data class SecurityAndPrivacyState(
|
|||||||
val editedSettings: SecurityAndPrivacySettings,
|
val editedSettings: SecurityAndPrivacySettings,
|
||||||
val homeserverName: String,
|
val homeserverName: String,
|
||||||
val isEncryptionDisabledByHomeserver: Boolean,
|
val isEncryptionDisabledByHomeserver: Boolean,
|
||||||
|
private val arePublicRoomsDisabledByHomeserver: Boolean,
|
||||||
val showEnableEncryptionConfirmation: Boolean,
|
val showEnableEncryptionConfirmation: Boolean,
|
||||||
private val isKnockEnabled: Boolean,
|
private val isKnockEnabled: Boolean,
|
||||||
val saveAction: AsyncAction<Unit>,
|
val saveAction: AsyncAction<Unit>,
|
||||||
@@ -39,6 +40,11 @@ data class SecurityAndPrivacyState(
|
|||||||
) {
|
) {
|
||||||
val isSpaceMemberSelectable = spaceSelectionMode != SpaceSelectionMode.None
|
val isSpaceMemberSelectable = spaceSelectionMode != SpaceSelectionMode.None
|
||||||
|
|
||||||
|
// Show Anyone option when:
|
||||||
|
// - Anyone is the current saved value, OR
|
||||||
|
// - The homeserver allows public rooms
|
||||||
|
val showAnyoneOption = savedSettings.roomAccess == SecurityAndPrivacyRoomAccess.Anyone || !arePublicRoomsDisabledByHomeserver
|
||||||
|
|
||||||
// Show SpaceMember option in two cases:
|
// Show SpaceMember option in two cases:
|
||||||
// - SpaceMember is the current saved value
|
// - SpaceMember is the current saved value
|
||||||
// - SpaceMember option is selectable (ie. the FF is enabled and there is at least one space to select)
|
// - SpaceMember option is selectable (ie. the FF is enabled and there is at least one space to select)
|
||||||
|
|||||||
+6
@@ -37,6 +37,10 @@ open class SecurityAndPrivacyStatePreviewParam : PreviewParameterProvider<Securi
|
|||||||
showEncryptionConfirmation = true,
|
showEncryptionConfirmation = true,
|
||||||
isSpace = false,
|
isSpace = false,
|
||||||
),
|
),
|
||||||
|
aSecurityAndPrivacyState(
|
||||||
|
arePublicRoomsDisabledByHomeserver = true,
|
||||||
|
isSpace = false,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,6 +143,7 @@ fun aSecurityAndPrivacyState(
|
|||||||
selectableJoinedSpaces: Set<SpaceRoom> = emptySet(),
|
selectableJoinedSpaces: Set<SpaceRoom> = emptySet(),
|
||||||
spaceSelectionMode: SpaceSelectionMode = SpaceSelectionMode.None,
|
spaceSelectionMode: SpaceSelectionMode = SpaceSelectionMode.None,
|
||||||
isEncryptionDisabledByHomeserver: Boolean = false,
|
isEncryptionDisabledByHomeserver: Boolean = false,
|
||||||
|
arePublicRoomsDisabledByHomeserver: Boolean = false,
|
||||||
eventSink: (SecurityAndPrivacyEvent) -> Unit = {}
|
eventSink: (SecurityAndPrivacyEvent) -> Unit = {}
|
||||||
) = SecurityAndPrivacyState(
|
) = SecurityAndPrivacyState(
|
||||||
editedSettings = editedSettings,
|
editedSettings = editedSettings,
|
||||||
@@ -152,5 +157,6 @@ fun aSecurityAndPrivacyState(
|
|||||||
selectableJoinedSpaces = selectableJoinedSpaces.toImmutableSet(),
|
selectableJoinedSpaces = selectableJoinedSpaces.toImmutableSet(),
|
||||||
spaceSelectionMode = spaceSelectionMode,
|
spaceSelectionMode = spaceSelectionMode,
|
||||||
isEncryptionDisabledByHomeserver = isEncryptionDisabledByHomeserver,
|
isEncryptionDisabledByHomeserver = isEncryptionDisabledByHomeserver,
|
||||||
|
arePublicRoomsDisabledByHomeserver = arePublicRoomsDisabledByHomeserver,
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
|
|||||||
+9
-7
@@ -232,13 +232,15 @@ private fun RoomAccessSection(
|
|||||||
title = stringResource(R.string.screen_security_and_privacy_room_access_section_header),
|
title = stringResource(R.string.screen_security_and_privacy_room_access_section_header),
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
) {
|
) {
|
||||||
ListItem(
|
if (state.showAnyoneOption) {
|
||||||
content = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_title)) },
|
ListItem(
|
||||||
supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_description)) },
|
content = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_title)) },
|
||||||
trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.Anyone),
|
supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_anyone_option_description)) },
|
||||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Public())),
|
trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.Anyone),
|
||||||
onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.Anyone) },
|
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Public())),
|
||||||
)
|
onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.Anyone) },
|
||||||
|
)
|
||||||
|
}
|
||||||
if (state.showSpaceMemberOption) {
|
if (state.showSpaceMemberOption) {
|
||||||
ListItem(
|
ListItem(
|
||||||
content = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_space_members_option_title)) },
|
content = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_space_members_option_title)) },
|
||||||
|
|||||||
+43
-1
@@ -34,6 +34,8 @@ import io.element.android.libraries.matrix.test.room.aRoomInfo
|
|||||||
import io.element.android.libraries.matrix.test.room.powerlevels.FakeRoomPermissions
|
import io.element.android.libraries.matrix.test.room.powerlevels.FakeRoomPermissions
|
||||||
import io.element.android.libraries.matrix.test.spaces.FakeSpaceService
|
import io.element.android.libraries.matrix.test.spaces.FakeSpaceService
|
||||||
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
import io.element.android.libraries.previewutils.room.aSpaceRoom
|
||||||
|
import io.element.android.tests.testutils.consumeItemsUntilPredicate
|
||||||
|
import io.element.android.tests.testutils.consumeItemsUntilTimeout
|
||||||
import io.element.android.tests.testutils.lambda.assert
|
import io.element.android.tests.testutils.lambda.assert
|
||||||
import io.element.android.tests.testutils.lambda.lambdaError
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
@@ -1048,7 +1050,10 @@ class SecurityAndPrivacyPresenterTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - showEncryptionSection is false if the HS disabled encryption`() = runTest {
|
fun `present - showEncryptionSection is false if the HS disabled encryption`() = runTest {
|
||||||
val sessionEnterpriseService = FakeSessionEnterpriseService(isEncryptionDisabledResult = { true })
|
val sessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
|
isEncryptionDisabledResult = { true },
|
||||||
|
arePublicRoomsDisabledResult = { false },
|
||||||
|
)
|
||||||
val presenter = createSecurityAndPrivacyPresenter(
|
val presenter = createSecurityAndPrivacyPresenter(
|
||||||
sessionEnterpriseService = sessionEnterpriseService,
|
sessionEnterpriseService = sessionEnterpriseService,
|
||||||
)
|
)
|
||||||
@@ -1060,6 +1065,42 @@ class SecurityAndPrivacyPresenterTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `present - showAnyoneOption is false if the HS disabled public rooms`() = runTest {
|
||||||
|
val presenter = createSecurityAndPrivacyPresenter(
|
||||||
|
sessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
|
isEncryptionDisabledResult = { false },
|
||||||
|
arePublicRoomsDisabledResult = { true },
|
||||||
|
),
|
||||||
|
)
|
||||||
|
presenter.test {
|
||||||
|
consumeItemsUntilPredicate { !it.showAnyoneOption }
|
||||||
|
cancelAndIgnoreRemainingEvents()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `present - showAnyoneOption is true if the HS disabled public rooms but the room is already public`() = runTest {
|
||||||
|
val presenter = createSecurityAndPrivacyPresenter(
|
||||||
|
room = FakeJoinedRoom(
|
||||||
|
baseRoom = FakeBaseRoom(
|
||||||
|
roomPermissions = roomPermissions(),
|
||||||
|
getRoomVisibilityResult = { Result.success(RoomVisibility.Public) },
|
||||||
|
initialRoomInfo = aRoomInfo(historyVisibility = RoomHistoryVisibility.Shared, joinRule = JoinRule.Public)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
sessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
|
isEncryptionDisabledResult = { false },
|
||||||
|
arePublicRoomsDisabledResult = { true },
|
||||||
|
),
|
||||||
|
)
|
||||||
|
presenter.test {
|
||||||
|
val states = consumeItemsUntilTimeout()
|
||||||
|
assertThat(states).isNotEmpty()
|
||||||
|
assertThat(states.all { it.showAnyoneOption }).isTrue()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun roomPermissions(
|
private fun roomPermissions(
|
||||||
canChangeRoomAccess: Boolean = true,
|
canChangeRoomAccess: Boolean = true,
|
||||||
canChangeHistoryVisibility: Boolean = true,
|
canChangeHistoryVisibility: Boolean = true,
|
||||||
@@ -1100,6 +1141,7 @@ class SecurityAndPrivacyPresenterTest {
|
|||||||
spaceSelectionStateHolder: SpaceSelectionStateHolder = SpaceSelectionStateHolder(),
|
spaceSelectionStateHolder: SpaceSelectionStateHolder = SpaceSelectionStateHolder(),
|
||||||
sessionEnterpriseService: FakeSessionEnterpriseService = FakeSessionEnterpriseService(
|
sessionEnterpriseService: FakeSessionEnterpriseService = FakeSessionEnterpriseService(
|
||||||
isEncryptionDisabledResult = { false },
|
isEncryptionDisabledResult = { false },
|
||||||
|
arePublicRoomsDisabledResult = { false },
|
||||||
)
|
)
|
||||||
): SecurityAndPrivacyPresenter {
|
): SecurityAndPrivacyPresenter {
|
||||||
return SecurityAndPrivacyPresenter(
|
return SecurityAndPrivacyPresenter(
|
||||||
|
|||||||
Reference in New Issue
Block a user