From cf60f943a8928c9f7ef474446135ae4d8edbbfb9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 12 Mar 2025 16:50:12 +0100 Subject: [PATCH 1/3] Give ability to configure the Firebase push gateway. --- .../enterprise/api/EnterpriseService.kt | 2 ++ .../impl/DefaultEnterpriseService.kt | 2 ++ .../enterprise/test/FakeEnterpriseService.kt | 5 ++++ .../pushproviders/firebase/build.gradle.kts | 2 ++ .../firebase/FirebaseGatewayProvider.kt | 26 +++++++++++++++++++ .../firebase/FirebaseNewTokenHandler.kt | 3 ++- .../firebase/FirebasePushProvider.kt | 7 ++--- .../DefaultFirebaseNewTokenHandlerTest.kt | 10 ++++--- .../firebase/FakeFirebaseGatewayProvider.kt | 16 ++++++++++++ .../firebase/FirebasePushProviderTest.kt | 8 +++--- 10 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt create mode 100644 libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FakeFirebaseGatewayProvider.kt diff --git a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt index 4fddfe283c4..12c7d6f21dc 100644 --- a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt +++ b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt @@ -17,4 +17,6 @@ interface EnterpriseService { fun semanticColorsLight(): SemanticColors fun semanticColorsDark(): SemanticColors + + fun firebasePushGateway(): String? } diff --git a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt index 898f59969c9..f2fe0df49c8 100644 --- a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt +++ b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt @@ -27,4 +27,6 @@ class DefaultEnterpriseService @Inject constructor() : EnterpriseService { override fun semanticColorsLight(): SemanticColors = compoundColorsLight override fun semanticColorsDark(): SemanticColors = compoundColorsDark + + override fun firebasePushGateway(): String? = null } diff --git a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt index fbb826ec73e..2dfe4165bff 100644 --- a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt +++ b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt @@ -19,6 +19,7 @@ class FakeEnterpriseService( private val defaultHomeserverResult: () -> String? = { A_FAKE_HOMESERVER }, private val semanticColorsLightResult: () -> SemanticColors = { lambdaError() }, private val semanticColorsDarkResult: () -> SemanticColors = { lambdaError() }, + private val firebasePushGatewayResult: () -> String? = { lambdaError() }, ) : EnterpriseService { override suspend fun isEnterpriseUser(sessionId: SessionId): Boolean = simulateLongTask { isEnterpriseUserResult(sessionId) @@ -36,6 +37,10 @@ class FakeEnterpriseService( return semanticColorsDarkResult() } + override fun firebasePushGateway(): String? { + return firebasePushGatewayResult() + } + companion object { const val A_FAKE_HOMESERVER = "a_fake_homeserver" } diff --git a/libraries/pushproviders/firebase/build.gradle.kts b/libraries/pushproviders/firebase/build.gradle.kts index 044b9305723..a6f234461d2 100644 --- a/libraries/pushproviders/firebase/build.gradle.kts +++ b/libraries/pushproviders/firebase/build.gradle.kts @@ -50,6 +50,7 @@ setupAnvil() dependencies { implementation(libs.dagger) implementation(libs.androidx.corektx) + implementation(projects.features.enterprise.api) implementation(projects.libraries.architecture) implementation(projects.libraries.core) implementation(projects.libraries.di) @@ -73,6 +74,7 @@ dependencies { testImplementation(libs.test.truth) testImplementation(libs.test.turbine) testImplementation(libs.test.robolectric) + testImplementation(projects.features.enterprise.test) testImplementation(projects.libraries.matrix.test) testImplementation(projects.libraries.push.test) testImplementation(projects.libraries.pushstore.test) diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt new file mode 100644 index 00000000000..2b378766bc8 --- /dev/null +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.pushproviders.firebase + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.enterprise.api.EnterpriseService +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +interface FirebaseGatewayProvider { + fun getFirebaseGateway(): String +} + +@ContributesBinding(AppScope::class) +class DefaultFirebaseGatewayProvider @Inject constructor( + private val enterpriseService: EnterpriseService, +) : FirebaseGatewayProvider { + override fun getFirebaseGateway(): String { + return enterpriseService.firebasePushGateway() ?: FirebaseConfig.PUSHER_HTTP_URL + } +} diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt index bf616b7de39..e5589af4931 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt @@ -36,6 +36,7 @@ class DefaultFirebaseNewTokenHandler @Inject constructor( private val userPushStoreFactory: UserPushStoreFactory, private val matrixClientProvider: MatrixClientProvider, private val firebaseStore: FirebaseStore, + private val firebaseGatewayProvider: FirebaseGatewayProvider, ) : FirebaseNewTokenHandler { override suspend fun handle(firebaseToken: String) { firebaseStore.storeFcmToken(firebaseToken) @@ -55,7 +56,7 @@ class DefaultFirebaseNewTokenHandler @Inject constructor( .registerPusher( matrixClient = client, pushKey = firebaseToken, - gateway = FirebaseConfig.PUSHER_HTTP_URL, + gateway = firebaseGatewayProvider.getFirebaseGateway(), ) .onFailure { Timber.tag(loggerTag.value).e(it, "Failed to register pusher for session $sessionId") diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt index 0b12e00bbd4..a6be83e8034 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt @@ -27,6 +27,7 @@ class FirebasePushProvider @Inject constructor( private val pusherSubscriber: PusherSubscriber, private val isPlayServiceAvailable: IsPlayServiceAvailable, private val firebaseTokenRotator: FirebaseTokenRotator, + private val firebaseGatewayProvider: FirebaseGatewayProvider, ) : PushProvider { override val index = FirebaseConfig.INDEX override val name = FirebaseConfig.NAME @@ -48,7 +49,7 @@ class FirebasePushProvider @Inject constructor( return pusherSubscriber.registerPusher( matrixClient = matrixClient, pushKey = pushKey, - gateway = FirebaseConfig.PUSHER_HTTP_URL, + gateway = firebaseGatewayProvider.getFirebaseGateway(), ) } @@ -60,7 +61,7 @@ class FirebasePushProvider @Inject constructor( Timber.tag(loggerTag.value).w("Unable to unregister pusher, Firebase token is not known.") Result.success(Unit) } else { - pusherSubscriber.unregisterPusher(matrixClient, pushKey, FirebaseConfig.PUSHER_HTTP_URL) + pusherSubscriber.unregisterPusher(matrixClient, pushKey, firebaseGatewayProvider.getFirebaseGateway()) } } @@ -72,7 +73,7 @@ class FirebasePushProvider @Inject constructor( override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? { return firebaseStore.getFcmToken()?.let { fcmToken -> CurrentUserPushConfig( - url = FirebaseConfig.PUSHER_HTTP_URL, + url = firebaseGatewayProvider.getFirebaseGateway(), pushKey = fcmToken ) } diff --git a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/DefaultFirebaseNewTokenHandlerTest.kt b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/DefaultFirebaseNewTokenHandlerTest.kt index 08e9c5be363..c8c5dfa9bfa 100644 --- a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/DefaultFirebaseNewTokenHandlerTest.kt +++ b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/DefaultFirebaseNewTokenHandlerTest.kt @@ -79,8 +79,8 @@ class DefaultFirebaseNewTokenHandlerTest { registerPusherResult.assertions() .isCalledExactly(2) .withSequence( - listOf(value(aMatrixClient1), value("aToken"), value(FirebaseConfig.PUSHER_HTTP_URL)), - listOf(value(aMatrixClient3), value("aToken"), value(FirebaseConfig.PUSHER_HTTP_URL)), + listOf(value(aMatrixClient1), value("aToken"), value(A_FIREBASE_GATEWAY)), + listOf(value(aMatrixClient3), value("aToken"), value(A_FIREBASE_GATEWAY)), ) } @@ -130,7 +130,7 @@ class DefaultFirebaseNewTokenHandlerTest { registerPusherResult.assertions() registerPusherResult.assertions() .isCalledOnce() - .with(value(aMatrixClient1), value("aToken"), value(FirebaseConfig.PUSHER_HTTP_URL)) + .with(value(aMatrixClient1), value("aToken"), value(A_FIREBASE_GATEWAY)) } private fun createDefaultFirebaseNewTokenHandler( @@ -139,13 +139,15 @@ class DefaultFirebaseNewTokenHandlerTest { userPushStoreFactory: UserPushStoreFactory = FakeUserPushStoreFactory(), matrixClientProvider: MatrixClientProvider = FakeMatrixClientProvider(), firebaseStore: FirebaseStore = InMemoryFirebaseStore(), + firebaseGatewayProvider: FirebaseGatewayProvider = FakeFirebaseGatewayProvider(), ): FirebaseNewTokenHandler { return DefaultFirebaseNewTokenHandler( pusherSubscriber = pusherSubscriber, sessionStore = sessionStore, userPushStoreFactory = userPushStoreFactory, matrixClientProvider = matrixClientProvider, - firebaseStore = firebaseStore + firebaseStore = firebaseStore, + firebaseGatewayProvider = firebaseGatewayProvider, ) } } diff --git a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FakeFirebaseGatewayProvider.kt b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FakeFirebaseGatewayProvider.kt new file mode 100644 index 00000000000..3540562a3d4 --- /dev/null +++ b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FakeFirebaseGatewayProvider.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.pushproviders.firebase + +const val A_FIREBASE_GATEWAY = "aGateway" + +class FakeFirebaseGatewayProvider( + private val firebaseGatewayResult: () -> String = { A_FIREBASE_GATEWAY } +) : FirebaseGatewayProvider { + override fun getFirebaseGateway() = firebaseGatewayResult() +} diff --git a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt index fbb945106a1..53ed52be078 100644 --- a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt +++ b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt @@ -70,7 +70,7 @@ class FirebasePushProviderTest { assertThat(result).isEqualTo(Result.success(Unit)) registerPusherResultLambda.assertions() .isCalledOnce() - .with(value(matrixClient), value("aToken"), value(FirebaseConfig.PUSHER_HTTP_URL)) + .with(value(matrixClient), value("aToken"), value(A_FIREBASE_GATEWAY)) } @Test @@ -117,7 +117,7 @@ class FirebasePushProviderTest { assertThat(result).isEqualTo(Result.success(Unit)) unregisterPusherResultLambda.assertions() .isCalledOnce() - .with(value(matrixClient), value("aToken"), value(FirebaseConfig.PUSHER_HTTP_URL)) + .with(value(matrixClient), value("aToken"), value(A_FIREBASE_GATEWAY)) } @Test @@ -164,7 +164,7 @@ class FirebasePushProviderTest { ), ) val result = firebasePushProvider.getCurrentUserPushConfig() - assertThat(result).isEqualTo(CurrentUserPushConfig(FirebaseConfig.PUSHER_HTTP_URL, "aToken")) + assertThat(result).isEqualTo(CurrentUserPushConfig(A_FIREBASE_GATEWAY, "aToken")) } @Test @@ -194,12 +194,14 @@ class FirebasePushProviderTest { pusherSubscriber: PusherSubscriber = FakePusherSubscriber(), isPlayServiceAvailable: IsPlayServiceAvailable = FakeIsPlayServiceAvailable(false), firebaseTokenRotator: FirebaseTokenRotator = FakeFirebaseTokenRotator(), + firebaseGatewayProvider: FirebaseGatewayProvider = FakeFirebaseGatewayProvider() ): FirebasePushProvider { return FirebasePushProvider( firebaseStore = firebaseStore, pusherSubscriber = pusherSubscriber, isPlayServiceAvailable = isPlayServiceAvailable, firebaseTokenRotator = firebaseTokenRotator, + firebaseGatewayProvider = firebaseGatewayProvider, ) } } From 5cab146eed5c4cbf918fcfb952424fc648c31050 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 12 Mar 2025 17:10:33 +0100 Subject: [PATCH 2/3] Give ability to configure the UnifiedPush default push gateway. --- .../enterprise/api/EnterpriseService.kt | 1 + .../impl/DefaultEnterpriseService.kt | 1 + .../enterprise/test/FakeEnterpriseService.kt | 5 ++++ .../unifiedpush/build.gradle.kts | 2 ++ .../DefaultPushGatewayHttpUrlProvider.kt | 26 +++++++++++++++++++ .../UnifiedPushGatewayUrlResolver.kt | 3 ++- ...efaultUnifiedPushGatewayUrlResolverTest.kt | 6 +++-- .../FakeDefaultPushGatewayHttpUrlProvider.kt | 18 +++++++++++++ 8 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt create mode 100644 libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt diff --git a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt index 12c7d6f21dc..9c1cb8b9812 100644 --- a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt +++ b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt @@ -19,4 +19,5 @@ interface EnterpriseService { fun semanticColorsDark(): SemanticColors fun firebasePushGateway(): String? + fun unifiedPushDefaultPushGateway(): String? } diff --git a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt index f2fe0df49c8..2d66bb3968d 100644 --- a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt +++ b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt @@ -29,4 +29,5 @@ class DefaultEnterpriseService @Inject constructor() : EnterpriseService { override fun semanticColorsDark(): SemanticColors = compoundColorsDark override fun firebasePushGateway(): String? = null + override fun unifiedPushDefaultPushGateway(): String? = null } diff --git a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt index 2dfe4165bff..ae71bf6b76b 100644 --- a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt +++ b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt @@ -20,6 +20,7 @@ class FakeEnterpriseService( private val semanticColorsLightResult: () -> SemanticColors = { lambdaError() }, private val semanticColorsDarkResult: () -> SemanticColors = { lambdaError() }, private val firebasePushGatewayResult: () -> String? = { lambdaError() }, + private val unifiedPushDefaultPushGatewayResult: () -> String? = { lambdaError() }, ) : EnterpriseService { override suspend fun isEnterpriseUser(sessionId: SessionId): Boolean = simulateLongTask { isEnterpriseUserResult(sessionId) @@ -41,6 +42,10 @@ class FakeEnterpriseService( return firebasePushGatewayResult() } + override fun unifiedPushDefaultPushGateway(): String? { + return unifiedPushDefaultPushGatewayResult() + } + companion object { const val A_FAKE_HOMESERVER = "a_fake_homeserver" } diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index fd502263e9d..db8ced9a78c 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -19,6 +19,7 @@ setupAnvil() dependencies { implementation(libs.dagger) + implementation(projects.features.enterprise.api) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.libraries.matrix.api) @@ -48,6 +49,7 @@ dependencies { testImplementation(libs.test.robolectric) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) + testImplementation(projects.features.enterprise.test) testImplementation(projects.libraries.matrix.test) testImplementation(projects.libraries.push.test) testImplementation(projects.libraries.pushproviders.test) diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt new file mode 100644 index 00000000000..af434c30204 --- /dev/null +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.pushproviders.unifiedpush + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.enterprise.api.EnterpriseService +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +interface DefaultPushGatewayHttpUrlProvider { + fun provide(): String +} + +@ContributesBinding(AppScope::class) +class DefaultDefaultPushGatewayHttpUrlProvider @Inject constructor( + private val enterpriseService: EnterpriseService, +) : DefaultPushGatewayHttpUrlProvider { + override fun provide(): String { + return enterpriseService.unifiedPushDefaultPushGateway() ?: UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL + } +} diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt index 918db35e4ef..e7e31cfd673 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt @@ -21,6 +21,7 @@ interface UnifiedPushGatewayUrlResolver { @ContributesBinding(AppScope::class) class DefaultUnifiedPushGatewayUrlResolver @Inject constructor( private val unifiedPushStore: UnifiedPushStore, + private val defaultPushGatewayHttpUrlProvider: DefaultPushGatewayHttpUrlProvider, ) : UnifiedPushGatewayUrlResolver { override fun resolve( gatewayResult: UnifiedPushGatewayResolverResult, @@ -33,7 +34,7 @@ class DefaultUnifiedPushGatewayUrlResolver @Inject constructor( } UnifiedPushGatewayResolverResult.ErrorInvalidUrl, UnifiedPushGatewayResolverResult.NoMatrixGateway -> { - UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL + defaultPushGatewayHttpUrlProvider.provide() } is UnifiedPushGatewayResolverResult.Success -> { gatewayResult.gateway diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt index 7edc223f73a..27008d96ecf 100644 --- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt +++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt @@ -18,7 +18,7 @@ class DefaultUnifiedPushGatewayUrlResolverTest { gatewayResult = UnifiedPushGatewayResolverResult.ErrorInvalidUrl, instance = "", ) - assertThat(result).isEqualTo(UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL) + assertThat(result).isEqualTo(A_UNIFIED_PUSH_GATEWAY) } @Test @@ -28,7 +28,7 @@ class DefaultUnifiedPushGatewayUrlResolverTest { gatewayResult = UnifiedPushGatewayResolverResult.NoMatrixGateway, instance = "", ) - assertThat(result).isEqualTo(UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL) + assertThat(result).isEqualTo(A_UNIFIED_PUSH_GATEWAY) } @Test @@ -77,7 +77,9 @@ class DefaultUnifiedPushGatewayUrlResolverTest { private fun createDefaultUnifiedPushGatewayUrlResolver( unifiedPushStore: UnifiedPushStore = FakeUnifiedPushStore(), + defaultPushGatewayHttpUrlProvider: DefaultPushGatewayHttpUrlProvider = FakeDefaultPushGatewayHttpUrlProvider(), ) = DefaultUnifiedPushGatewayUrlResolver( unifiedPushStore = unifiedPushStore, + defaultPushGatewayHttpUrlProvider = defaultPushGatewayHttpUrlProvider, ) } diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt new file mode 100644 index 00000000000..de0a293fc21 --- /dev/null +++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.pushproviders.unifiedpush + +const val A_UNIFIED_PUSH_GATEWAY = "aGateway" + +class FakeDefaultPushGatewayHttpUrlProvider( + private val provideResult: () -> String = { A_UNIFIED_PUSH_GATEWAY } +) : DefaultPushGatewayHttpUrlProvider { + override fun provide(): String { + return provideResult() + } +} From 3c5bc3628289b1614e1bdb465b2a9b5532a57ef5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 13 Mar 2025 09:57:54 +0100 Subject: [PATCH 3/3] Update ref to enterprise module. --- enterprise | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enterprise b/enterprise index 6d96bf58aec..665a15a1907 160000 --- a/enterprise +++ b/enterprise @@ -1 +1 @@ -Subproject commit 6d96bf58aec2ecc77b408858272cd64ec26e10d0 +Subproject commit 665a15a1907a116816ffd1653bccfeaeeb7a2968