Let enterprise build be able to override (or disable) the bug report URL.

This commit is contained in:
Benoit Marty
2025-08-08 15:17:00 +02:00
parent 76849c4374
commit d7e4e00b5d
40 changed files with 266 additions and 78 deletions

View File

@@ -8,6 +8,7 @@
package io.element.android.features.login.impl.screens.onboarding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState
@@ -82,7 +83,7 @@ class OnBoardingPresenter @AssistedInject constructor(
value = linkAccountProvider == null &&
featureFlagService.isFeatureEnabled(FeatureFlags.QrCodeLogin)
}
val canReportBug = remember { rageshakeFeatureAvailability.isAvailable() }
val canReportBug by remember { rageshakeFeatureAvailability.isAvailable() }.collectAsState(false)
var showReportBug by rememberSaveable { mutableStateOf(false) }
val loginMode by loginHelper.collectLoginMode()

View File

@@ -11,6 +11,7 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.features.enterprise.test.FakeEnterpriseService
import io.element.android.features.login.impl.changeserver.AccountProviderAccessException
import io.element.android.features.wellknown.test.FakeWellknownRetriever
import io.element.android.features.wellknown.test.anElementWellKnown
import io.element.android.libraries.matrix.test.AN_ACCOUNT_PROVIDER
import io.element.android.libraries.matrix.test.AN_ACCOUNT_PROVIDER_2
import io.element.android.libraries.matrix.test.AN_ACCOUNT_PROVIDER_URL
@@ -25,7 +26,7 @@ class DefaultAccountProviderAccessControlTest {
val accessControl = createDefaultAccountProviderAccessControl(
isEnterpriseBuild = false,
isAllowedToConnectToHomeserver = true,
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = true,
),
)
@@ -38,7 +39,7 @@ class DefaultAccountProviderAccessControlTest {
isEnterpriseBuild = false,
// false here.
isAllowedToConnectToHomeserver = false,
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = true,
),
)
@@ -50,7 +51,7 @@ class DefaultAccountProviderAccessControlTest {
val accessControl = createDefaultAccountProviderAccessControl(
isEnterpriseBuild = false,
isAllowedToConnectToHomeserver = true,
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = false,
),
)
@@ -62,7 +63,7 @@ class DefaultAccountProviderAccessControlTest {
val accessControl = createDefaultAccountProviderAccessControl(
isEnterpriseBuild = false,
isAllowedToConnectToHomeserver = true,
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = null,
),
)
@@ -85,7 +86,7 @@ class DefaultAccountProviderAccessControlTest {
isEnterpriseBuild = false,
isAllowedToConnectToHomeserver = false,
allowedAccountProviders = listOf(AN_ACCOUNT_PROVIDER_2),
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = false,
),
)
@@ -97,7 +98,7 @@ class DefaultAccountProviderAccessControlTest {
val accessControl = createDefaultAccountProviderAccessControl(
isEnterpriseBuild = true,
isAllowedToConnectToHomeserver = true,
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = true,
),
)
@@ -109,7 +110,7 @@ class DefaultAccountProviderAccessControlTest {
val accessControl = createDefaultAccountProviderAccessControl(
isEnterpriseBuild = true,
isAllowedToConnectToHomeserver = true,
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = false,
),
)
@@ -122,7 +123,7 @@ class DefaultAccountProviderAccessControlTest {
isEnterpriseBuild = true,
isAllowedToConnectToHomeserver = false,
allowedAccountProviders = listOf(AN_ACCOUNT_PROVIDER_2),
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = true,
),
)
@@ -135,7 +136,7 @@ class DefaultAccountProviderAccessControlTest {
isEnterpriseBuild = true,
isAllowedToConnectToHomeserver = false,
allowedAccountProviders = listOf(AN_ACCOUNT_PROVIDER_2),
elementWellKnown = ElementWellKnown(
elementWellKnown = anElementWellKnown(
enforceElementPro = false,
),
)

View File

@@ -15,6 +15,7 @@ import io.element.android.features.login.impl.accountprovider.AccountProvider
import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource
import io.element.android.features.login.impl.error.ChangeServerError
import io.element.android.features.wellknown.test.FakeWellknownRetriever
import io.element.android.features.wellknown.test.anElementWellKnown
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.core.uri.ensureProtocol
import io.element.android.libraries.matrix.test.A_HOMESERVER
@@ -114,7 +115,7 @@ class ChangeServerPresenterTest {
@Test
fun `present - change server element pro required error`() = runTest {
val getElementWellKnownResult = lambdaRecorder<String, ElementWellKnown> {
ElementWellKnown(
anElementWellKnown(
enforceElementPro = true,
)
}

View File

@@ -36,6 +36,8 @@ import io.element.android.libraries.oidc.test.customtab.FakeOidcActionFlow
import io.element.android.libraries.wellknown.api.WellknownRetriever
import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.test
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runTest
import org.junit.Rule
import org.junit.Test
@@ -78,7 +80,6 @@ class OnBoardingPresenterTest {
enterpriseService = FakeEnterpriseService(
defaultHomeserverListResult = { listOf(ACCOUNT_PROVIDER_FROM_CONFIG, EnterpriseService.ANY_ACCOUNT_PROVIDER) },
),
rageshakeFeatureAvailability = { true },
)
presenter.test {
val initialState = awaitItem()
@@ -94,7 +95,7 @@ class OnBoardingPresenterTest {
@Test
fun `present - clicking on version 7 times has no effect if rageshake not available`() = runTest {
val presenter = createPresenter(
rageshakeFeatureAvailability = { false },
rageshakeFeatureAvailability = { flowOf(false) },
)
presenter.test {
skipItems(1)
@@ -239,7 +240,7 @@ private fun createPresenter(
featureFlagService: FeatureFlagService = FakeFeatureFlagService(),
enterpriseService: EnterpriseService = FakeEnterpriseService(),
wellknownRetriever: WellknownRetriever = FakeWellknownRetriever(),
rageshakeFeatureAvailability: () -> Boolean = { true },
rageshakeFeatureAvailability: () -> Flow<Boolean> = { flowOf(true) },
loginHelper: LoginHelper = createLoginHelper(),
) = OnBoardingPresenter(
params = params,