From 3ba79a6e10cb2f12555a6eec7293bb2bc095e498 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 26 Nov 2025 15:16:13 +0100 Subject: [PATCH] quality: fix formatting and test --- .../impl/root/SecurityAndPrivacyEvents.kt | 2 +- .../impl/root/SecurityAndPrivacyPresenter.kt | 4 +- .../root/SecurityAndPrivacyStateProvider.kt | 2 +- .../impl/root/SecurityAndPrivacyView.kt | 3 +- .../impl/SecurityAndPrivacyViewTest.kt | 42 +++++++++++++++---- 5 files changed, 39 insertions(+), 14 deletions(-) diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyEvents.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyEvents.kt index 2553090541..b1d739c45b 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyEvents.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyEvents.kt @@ -11,7 +11,7 @@ package io.element.android.features.securityandprivacy.impl.root sealed interface SecurityAndPrivacyEvents { data object EditRoomAddress : SecurityAndPrivacyEvents data object Save : SecurityAndPrivacyEvents - data object Exit: SecurityAndPrivacyEvents + data object Exit : SecurityAndPrivacyEvents data object DismissExitConfirmation : SecurityAndPrivacyEvents data class ChangeRoomAccess(val roomAccess: SecurityAndPrivacyRoomAccess) : SecurityAndPrivacyEvents data object ToggleEncryptionState : SecurityAndPrivacyEvents diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt index 5bcbe15f7c..dd28ca65dd 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyPresenter.kt @@ -21,9 +21,9 @@ import androidx.compose.runtime.setValue import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory import dev.zacsweers.metro.AssistedInject +import io.element.android.features.securityandprivacy.api.securityAndPrivacyPermissionsAsState import io.element.android.features.securityandprivacy.impl.SecurityAndPrivacyNavigator import io.element.android.features.securityandprivacy.impl.editroomaddress.matchesServer -import io.element.android.features.securityandprivacy.api.securityAndPrivacyPermissionsAsState import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.AsyncData.* @@ -65,7 +65,7 @@ class SecurityAndPrivacyPresenter( featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock) }.collectAsState(false) val saveAction = remember { mutableStateOf>(AsyncAction.Uninitialized) } - var confirmExitAction by remember { mutableStateOf>(AsyncAction.Uninitialized)} + var confirmExitAction by remember { mutableStateOf>(AsyncAction.Uninitialized) } val homeserverName = remember { matrixClient.userIdServerName() } val syncUpdateFlow = room.syncUpdateFlow.collectAsState() val roomInfo by room.roomInfoFlow.collectAsState() diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt index 00dc175b4c..11e5665c1c 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyStateProvider.kt @@ -117,7 +117,7 @@ fun aSecurityAndPrivacyState( canChangeRoomVisibility = true ), isKnockEnabled: Boolean = true, - isSpace: Boolean, + isSpace: Boolean = false, eventSink: (SecurityAndPrivacyEvents) -> Unit = {} ) = SecurityAndPrivacyState( editedSettings = editedSettings, diff --git a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt index a4e3396f44..3ba4b8a142 100644 --- a/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt +++ b/features/securityandprivacy/impl/src/main/kotlin/io/element/android/features/securityandprivacy/impl/root/SecurityAndPrivacyView.kt @@ -218,7 +218,7 @@ private fun RoomAccessSection( ListItem( headlineContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_space_members_option_title)) }, supportingContent = { Text(text = stringResource(R.string.screen_security_and_privacy_room_access_space_members_option_description)) }, - trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.SpaceMember, enabled = false), + trailingContent = ListItemContent.RadioButton(selected = edited == SecurityAndPrivacyRoomAccess.SpaceMember, enabled = false), leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Workspace())), enabled = false, ) @@ -243,7 +243,6 @@ private fun RoomAccessSection( leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Lock())), onClick = { onSelectOption(SecurityAndPrivacyRoomAccess.InviteOnly) }, ) - } } diff --git a/features/securityandprivacy/impl/src/test/kotlin/io/element/android/features/securityandprivacy/impl/SecurityAndPrivacyViewTest.kt b/features/securityandprivacy/impl/src/test/kotlin/io/element/android/features/securityandprivacy/impl/SecurityAndPrivacyViewTest.kt index c7ab57a577..c4c004b265 100644 --- a/features/securityandprivacy/impl/src/test/kotlin/io/element/android/features/securityandprivacy/impl/SecurityAndPrivacyViewTest.kt +++ b/features/securityandprivacy/impl/src/test/kotlin/io/element/android/features/securityandprivacy/impl/SecurityAndPrivacyViewTest.kt @@ -21,12 +21,12 @@ import io.element.android.features.securityandprivacy.impl.root.SecurityAndPriva import io.element.android.features.securityandprivacy.impl.root.SecurityAndPrivacyView import io.element.android.features.securityandprivacy.impl.root.aSecurityAndPrivacySettings import io.element.android.features.securityandprivacy.impl.root.aSecurityAndPrivacyState +import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EnsureNeverCalled import io.element.android.tests.testutils.EventsRecorder import io.element.android.tests.testutils.clickOn -import io.element.android.tests.testutils.ensureCalledOnce import io.element.android.tests.testutils.pressBack import org.junit.Rule import org.junit.Test @@ -39,15 +39,41 @@ class SecurityAndPrivacyViewTest { @get:Rule val rule = createAndroidComposeRule() @Test - fun `click on back invokes expected callback`() { - ensureCalledOnce { callback -> - rule.setSecurityAndPrivacyView( - onBackClick = callback, - ) - rule.pressBack() - } + fun `click on back invokes emits the expected event`() { + val recorder = EventsRecorder() + val state = aSecurityAndPrivacyState( + eventSink = recorder, + ) + rule.setSecurityAndPrivacyView(state) + rule.pressBack() + recorder.assertSingle(SecurityAndPrivacyEvents.Exit) } + @Test + fun `confirm cancellation emits the expected event`() { + val recorder = EventsRecorder() + val state = aSecurityAndPrivacyState( + confirmExitAction = AsyncAction.ConfirmingCancellation, + eventSink = recorder, + ) + rule.setSecurityAndPrivacyView(state) + rule.clickOn(CommonStrings.action_ok) + recorder.assertSingle(SecurityAndPrivacyEvents.Exit) + } + + @Test + fun `dismiss cancellation confirmation emits the expected event`() { + val recorder = EventsRecorder() + val state = aSecurityAndPrivacyState( + confirmExitAction = AsyncAction.ConfirmingCancellation, + eventSink = recorder, + ) + rule.setSecurityAndPrivacyView(state) + rule.clickOn(CommonStrings.action_cancel) + recorder.assertSingle(SecurityAndPrivacyEvents.DismissExitConfirmation) + } + + @Test fun `click on room access item emits the expected event`() { val recorder = EventsRecorder()