Remove dependency on AppNavigationStateService from DefaultUnifiedPushCurrentUserPushConfigProvider
This commit is contained in:
parent
c53dabce16
commit
44b5ad48f1
21 changed files with 124 additions and 160 deletions
|
|
@ -99,7 +99,7 @@ class DefaultPushService(
|
||||||
|
|
||||||
override suspend fun testPush(sessionId: SessionId): Boolean {
|
override suspend fun testPush(sessionId: SessionId): Boolean {
|
||||||
val pushProvider = getCurrentPushProvider(sessionId) ?: return false
|
val pushProvider = getCurrentPushProvider(sessionId) ?: return false
|
||||||
val config = pushProvider.getCurrentUserPushConfig() ?: return false
|
val config = pushProvider.getPushConfig(sessionId) ?: return false
|
||||||
testPush.execute(config)
|
testPush.execute(config)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,17 +13,17 @@ import io.element.android.appconfig.PushConfig
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.push.impl.pushgateway.PushGatewayNotifyRequest
|
import io.element.android.libraries.push.impl.pushgateway.PushGatewayNotifyRequest
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
|
|
||||||
interface TestPush {
|
interface TestPush {
|
||||||
suspend fun execute(config: CurrentUserPushConfig)
|
suspend fun execute(config: Config)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class DefaultTestPush(
|
class DefaultTestPush(
|
||||||
private val pushGatewayNotifyRequest: PushGatewayNotifyRequest,
|
private val pushGatewayNotifyRequest: PushGatewayNotifyRequest,
|
||||||
) : TestPush {
|
) : TestPush {
|
||||||
override suspend fun execute(config: CurrentUserPushConfig) {
|
override suspend fun execute(config: Config) {
|
||||||
pushGatewayNotifyRequest.execute(
|
pushGatewayNotifyRequest.execute(
|
||||||
PushGatewayNotifyRequest.Params(
|
PushGatewayNotifyRequest.Params(
|
||||||
url = config.url,
|
url = config.url,
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,11 @@ import io.element.android.libraries.push.impl.store.PushDataStore
|
||||||
import io.element.android.libraries.push.impl.test.FakeTestPush
|
import io.element.android.libraries.push.impl.test.FakeTestPush
|
||||||
import io.element.android.libraries.push.impl.test.TestPush
|
import io.element.android.libraries.push.impl.test.TestPush
|
||||||
import io.element.android.libraries.push.test.FakeGetCurrentPushProvider
|
import io.element.android.libraries.push.test.FakeGetCurrentPushProvider
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
import io.element.android.libraries.pushproviders.api.Distributor
|
import io.element.android.libraries.pushproviders.api.Distributor
|
||||||
import io.element.android.libraries.pushproviders.api.PushProvider
|
import io.element.android.libraries.pushproviders.api.PushProvider
|
||||||
import io.element.android.libraries.pushproviders.test.FakePushProvider
|
import io.element.android.libraries.pushproviders.test.FakePushProvider
|
||||||
import io.element.android.libraries.pushproviders.test.aCurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.test.aSessionPushConfig
|
||||||
import io.element.android.libraries.pushstore.api.UserPushStoreFactory
|
import io.element.android.libraries.pushstore.api.UserPushStoreFactory
|
||||||
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore
|
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore
|
||||||
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore
|
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore
|
||||||
|
|
@ -62,10 +62,10 @@ class DefaultPushServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `test push ok`() = runTest {
|
fun `test push ok`() = runTest {
|
||||||
val aConfig = aCurrentUserPushConfig()
|
val aConfig = aSessionPushConfig()
|
||||||
val testPushResult = lambdaRecorder<CurrentUserPushConfig, Unit> { }
|
val testPushResult = lambdaRecorder<Config, Unit> { }
|
||||||
val aPushProvider = FakePushProvider(
|
val aPushProvider = FakePushProvider(
|
||||||
currentUserPushConfig = aConfig
|
config = aConfig
|
||||||
)
|
)
|
||||||
val defaultPushService = createDefaultPushService(
|
val defaultPushService = createDefaultPushService(
|
||||||
pushProviders = setOf(aPushProvider),
|
pushProviders = setOf(aPushProvider),
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ package io.element.android.libraries.push.impl.test
|
||||||
|
|
||||||
import io.element.android.appconfig.PushConfig
|
import io.element.android.appconfig.PushConfig
|
||||||
import io.element.android.libraries.push.impl.pushgateway.PushGatewayNotifyRequest
|
import io.element.android.libraries.push.impl.pushgateway.PushGatewayNotifyRequest
|
||||||
import io.element.android.libraries.pushproviders.test.aCurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.test.aSessionPushConfig
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.lambda.value
|
import io.element.android.tests.testutils.lambda.value
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
|
|
@ -24,7 +24,7 @@ class DefaultTestPushTest {
|
||||||
executeResult = executeResult,
|
executeResult = executeResult,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
val aConfig = aCurrentUserPushConfig()
|
val aConfig = aSessionPushConfig()
|
||||||
defaultTestPush.execute(aConfig)
|
defaultTestPush.execute(aConfig)
|
||||||
executeResult.assertions()
|
executeResult.assertions()
|
||||||
.isCalledOnce()
|
.isCalledOnce()
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,13 @@
|
||||||
|
|
||||||
package io.element.android.libraries.push.impl.test
|
package io.element.android.libraries.push.impl.test
|
||||||
|
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
import io.element.android.tests.testutils.lambda.lambdaError
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
|
|
||||||
class FakeTestPush(
|
class FakeTestPush(
|
||||||
private val executeResult: (CurrentUserPushConfig) -> Unit = { lambdaError() }
|
private val executeResult: (Config) -> Unit = { lambdaError() }
|
||||||
) : TestPush {
|
) : TestPush {
|
||||||
override suspend fun execute(config: CurrentUserPushConfig) {
|
override suspend fun execute(config: Config) {
|
||||||
executeResult(config)
|
executeResult(config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
package io.element.android.libraries.pushproviders.api
|
package io.element.android.libraries.pushproviders.api
|
||||||
|
|
||||||
data class CurrentUserPushConfig(
|
data class Config(
|
||||||
val url: String,
|
val url: String,
|
||||||
val pushKey: String,
|
val pushKey: String,
|
||||||
)
|
)
|
||||||
|
|
@ -59,7 +59,7 @@ interface PushProvider {
|
||||||
*/
|
*/
|
||||||
suspend fun onSessionDeleted(sessionId: SessionId)
|
suspend fun onSessionDeleted(sessionId: SessionId)
|
||||||
|
|
||||||
suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig?
|
suspend fun getPushConfig(sessionId: SessionId): Config?
|
||||||
|
|
||||||
fun canRotateToken(): Boolean
|
fun canRotateToken(): Boolean
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import dev.zacsweers.metro.Inject
|
||||||
import io.element.android.libraries.core.log.logger.LoggerTag
|
import io.element.android.libraries.core.log.logger.LoggerTag
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
import io.element.android.libraries.pushproviders.api.Distributor
|
import io.element.android.libraries.pushproviders.api.Distributor
|
||||||
import io.element.android.libraries.pushproviders.api.PushProvider
|
import io.element.android.libraries.pushproviders.api.PushProvider
|
||||||
import io.element.android.libraries.pushproviders.api.PusherSubscriber
|
import io.element.android.libraries.pushproviders.api.PusherSubscriber
|
||||||
|
|
@ -74,9 +74,9 @@ class FirebasePushProvider(
|
||||||
*/
|
*/
|
||||||
override suspend fun onSessionDeleted(sessionId: SessionId) = Unit
|
override suspend fun onSessionDeleted(sessionId: SessionId) = Unit
|
||||||
|
|
||||||
override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? {
|
override suspend fun getPushConfig(sessionId: SessionId): Config? {
|
||||||
return firebaseStore.getFcmToken()?.let { fcmToken ->
|
return firebaseStore.getFcmToken()?.let { fcmToken ->
|
||||||
CurrentUserPushConfig(
|
Config(
|
||||||
url = firebaseGatewayProvider.getFirebaseGateway(),
|
url = firebaseGatewayProvider.getFirebaseGateway(),
|
||||||
pushKey = fcmToken
|
pushKey = fcmToken
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import io.element.android.libraries.matrix.test.AN_EXCEPTION
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||||
import io.element.android.libraries.push.test.FakePusherSubscriber
|
import io.element.android.libraries.push.test.FakePusherSubscriber
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
import io.element.android.libraries.pushproviders.api.Distributor
|
import io.element.android.libraries.pushproviders.api.Distributor
|
||||||
import io.element.android.libraries.pushproviders.api.PusherSubscriber
|
import io.element.android.libraries.pushproviders.api.PusherSubscriber
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
|
|
@ -152,7 +152,7 @@ class FirebasePushProviderTest {
|
||||||
token = null
|
token = null
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
val result = firebasePushProvider.getCurrentUserPushConfig()
|
val result = firebasePushProvider.getPushConfig(A_SESSION_ID)
|
||||||
assertThat(result).isNull()
|
assertThat(result).isNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,8 +163,8 @@ class FirebasePushProviderTest {
|
||||||
token = "aToken"
|
token = "aToken"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
val result = firebasePushProvider.getCurrentUserPushConfig()
|
val result = firebasePushProvider.getPushConfig(A_SESSION_ID)
|
||||||
assertThat(result).isEqualTo(CurrentUserPushConfig(A_FIREBASE_GATEWAY, "aToken"))
|
assertThat(result).isEqualTo(Config(A_FIREBASE_GATEWAY, "aToken"))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ package io.element.android.libraries.pushproviders.test
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
import io.element.android.libraries.pushproviders.api.Distributor
|
import io.element.android.libraries.pushproviders.api.Distributor
|
||||||
import io.element.android.libraries.pushproviders.api.PushProvider
|
import io.element.android.libraries.pushproviders.api.PushProvider
|
||||||
import io.element.android.tests.testutils.lambda.lambdaError
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
|
|
@ -21,7 +21,7 @@ class FakePushProvider(
|
||||||
private val distributors: List<Distributor> = listOf(Distributor("aDistributorValue", "aDistributorName")),
|
private val distributors: List<Distributor> = listOf(Distributor("aDistributorValue", "aDistributorName")),
|
||||||
private val currentDistributorValue: () -> String? = { lambdaError() },
|
private val currentDistributorValue: () -> String? = { lambdaError() },
|
||||||
private val currentDistributor: () -> Distributor? = { distributors.firstOrNull() },
|
private val currentDistributor: () -> Distributor? = { distributors.firstOrNull() },
|
||||||
private val currentUserPushConfig: CurrentUserPushConfig? = null,
|
private val config: Config? = null,
|
||||||
private val registerWithResult: (MatrixClient, Distributor) -> Result<Unit> = { _, _ -> lambdaError() },
|
private val registerWithResult: (MatrixClient, Distributor) -> Result<Unit> = { _, _ -> lambdaError() },
|
||||||
private val unregisterWithResult: (MatrixClient) -> Result<Unit> = { lambdaError() },
|
private val unregisterWithResult: (MatrixClient) -> Result<Unit> = { lambdaError() },
|
||||||
private val onSessionDeletedLambda: (SessionId) -> Unit = { lambdaError() },
|
private val onSessionDeletedLambda: (SessionId) -> Unit = { lambdaError() },
|
||||||
|
|
@ -50,8 +50,8 @@ class FakePushProvider(
|
||||||
onSessionDeletedLambda(sessionId)
|
onSessionDeletedLambda(sessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? {
|
override suspend fun getPushConfig(sessionId: SessionId): Config? {
|
||||||
return currentUserPushConfig
|
return config
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun canRotateToken(): Boolean {
|
override fun canRotateToken(): Boolean {
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@
|
||||||
|
|
||||||
package io.element.android.libraries.pushproviders.test
|
package io.element.android.libraries.pushproviders.test
|
||||||
|
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
|
|
||||||
fun aCurrentUserPushConfig(
|
fun aSessionPushConfig(
|
||||||
url: String = "aUrl",
|
url: String = "aUrl",
|
||||||
pushKey: String = "aPushKey",
|
pushKey: String = "aPushKey",
|
||||||
) = CurrentUserPushConfig(
|
) = Config(
|
||||||
url = url,
|
url = url,
|
||||||
pushKey = pushKey,
|
pushKey = pushKey,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ dependencies {
|
||||||
implementation(projects.libraries.pushproviders.api)
|
implementation(projects.libraries.pushproviders.api)
|
||||||
implementation(projects.libraries.architecture)
|
implementation(projects.libraries.architecture)
|
||||||
implementation(projects.libraries.core)
|
implementation(projects.libraries.core)
|
||||||
implementation(projects.services.appnavstate.api)
|
|
||||||
implementation(projects.services.toolbox.api)
|
implementation(projects.services.toolbox.api)
|
||||||
|
|
||||||
implementation(projects.libraries.network)
|
implementation(projects.libraries.network)
|
||||||
|
|
@ -53,5 +52,4 @@ dependencies {
|
||||||
testImplementation(projects.libraries.pushstore.test)
|
testImplementation(projects.libraries.pushstore.test)
|
||||||
testImplementation(projects.libraries.troubleshoot.test)
|
testImplementation(projects.libraries.troubleshoot.test)
|
||||||
testImplementation(projects.services.toolbox.test)
|
testImplementation(projects.services.toolbox.test)
|
||||||
testImplementation(projects.services.appnavstate.test)
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2024 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 dev.zacsweers.metro.AppScope
|
|
||||||
import dev.zacsweers.metro.ContributesBinding
|
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
|
||||||
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
|
||||||
import io.element.android.services.appnavstate.api.AppNavigationStateService
|
|
||||||
import io.element.android.services.appnavstate.api.currentSessionId
|
|
||||||
|
|
||||||
interface UnifiedPushCurrentUserPushConfigProvider {
|
|
||||||
suspend fun provide(): CurrentUserPushConfig?
|
|
||||||
}
|
|
||||||
|
|
||||||
@ContributesBinding(AppScope::class)
|
|
||||||
class DefaultUnifiedPushCurrentUserPushConfigProvider(
|
|
||||||
private val pushClientSecret: PushClientSecret,
|
|
||||||
private val unifiedPushStore: UnifiedPushStore,
|
|
||||||
private val appNavigationStateService: AppNavigationStateService,
|
|
||||||
) : UnifiedPushCurrentUserPushConfigProvider {
|
|
||||||
override suspend fun provide(): CurrentUserPushConfig? {
|
|
||||||
val currentSession = appNavigationStateService.appNavigationState.value.navigationState.currentSessionId() ?: return null
|
|
||||||
val clientSecret = pushClientSecret.getSecretForUser(currentSession)
|
|
||||||
val url = unifiedPushStore.getPushGateway(clientSecret) ?: return null
|
|
||||||
val pushKey = unifiedPushStore.getEndpoint(clientSecret) ?: return null
|
|
||||||
return CurrentUserPushConfig(
|
|
||||||
url = url,
|
|
||||||
pushKey = pushKey,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -12,7 +12,7 @@ import dev.zacsweers.metro.ContributesIntoSet
|
||||||
import dev.zacsweers.metro.Inject
|
import dev.zacsweers.metro.Inject
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
import io.element.android.libraries.pushproviders.api.Distributor
|
import io.element.android.libraries.pushproviders.api.Distributor
|
||||||
import io.element.android.libraries.pushproviders.api.PushProvider
|
import io.element.android.libraries.pushproviders.api.PushProvider
|
||||||
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
||||||
|
|
@ -25,7 +25,7 @@ class UnifiedPushProvider(
|
||||||
private val unRegisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase,
|
private val unRegisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase,
|
||||||
private val pushClientSecret: PushClientSecret,
|
private val pushClientSecret: PushClientSecret,
|
||||||
private val unifiedPushStore: UnifiedPushStore,
|
private val unifiedPushStore: UnifiedPushStore,
|
||||||
private val unifiedPushCurrentUserPushConfigProvider: UnifiedPushCurrentUserPushConfigProvider,
|
private val unifiedPushSessionPushConfigProvider: UnifiedPushSessionPushConfigProvider,
|
||||||
) : PushProvider {
|
) : PushProvider {
|
||||||
override val index = UnifiedPushConfig.INDEX
|
override val index = UnifiedPushConfig.INDEX
|
||||||
override val name = UnifiedPushConfig.NAME
|
override val name = UnifiedPushConfig.NAME
|
||||||
|
|
@ -62,8 +62,8 @@ class UnifiedPushProvider(
|
||||||
unRegisterUnifiedPushUseCase.cleanup(clientSecret)
|
unRegisterUnifiedPushUseCase.cleanup(clientSecret)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? {
|
override suspend fun getPushConfig(sessionId: SessionId): Config? {
|
||||||
return unifiedPushCurrentUserPushConfigProvider.provide()
|
return unifiedPushSessionPushConfigProvider.provide(sessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun canRotateToken(): Boolean = false
|
override fun canRotateToken(): Boolean = false
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 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 dev.zacsweers.metro.AppScope
|
||||||
|
import dev.zacsweers.metro.ContributesBinding
|
||||||
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
|
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
||||||
|
|
||||||
|
interface UnifiedPushSessionPushConfigProvider {
|
||||||
|
suspend fun provide(sessionId: SessionId): Config?
|
||||||
|
}
|
||||||
|
|
||||||
|
@ContributesBinding(AppScope::class)
|
||||||
|
class DefaultUnifiedPushPushConfigProvider(
|
||||||
|
private val pushClientSecret: PushClientSecret,
|
||||||
|
private val unifiedPushStore: UnifiedPushStore,
|
||||||
|
) : UnifiedPushSessionPushConfigProvider {
|
||||||
|
override suspend fun provide(sessionId: SessionId): Config? {
|
||||||
|
val clientSecret = pushClientSecret.getSecretForUser(sessionId)
|
||||||
|
val url = unifiedPushStore.getPushGateway(clientSecret) ?: return null
|
||||||
|
val pushKey = unifiedPushStore.getEndpoint(clientSecret) ?: return null
|
||||||
|
return Config(
|
||||||
|
url = url,
|
||||||
|
pushKey = pushKey,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -7,13 +7,14 @@
|
||||||
|
|
||||||
package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot
|
package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot
|
||||||
|
|
||||||
import dev.zacsweers.metro.AppScope
|
|
||||||
import dev.zacsweers.metro.ContributesIntoSet
|
import dev.zacsweers.metro.ContributesIntoSet
|
||||||
import dev.zacsweers.metro.Inject
|
import dev.zacsweers.metro.Inject
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
|
import io.element.android.libraries.di.SessionScope
|
||||||
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushApiFactory
|
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushApiFactory
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig
|
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushCurrentUserPushConfigProvider
|
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushSessionPushConfigProvider
|
||||||
import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTest
|
import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTest
|
||||||
import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTestDelegate
|
import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTestDelegate
|
||||||
import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTestState
|
import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTestState
|
||||||
|
|
@ -22,12 +23,13 @@ import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@ContributesIntoSet(AppScope::class)
|
@ContributesIntoSet(SessionScope::class)
|
||||||
@Inject
|
@Inject
|
||||||
class UnifiedPushMatrixGatewayTest(
|
class UnifiedPushMatrixGatewayTest(
|
||||||
|
private val sessionId: SessionId,
|
||||||
private val unifiedPushApiFactory: UnifiedPushApiFactory,
|
private val unifiedPushApiFactory: UnifiedPushApiFactory,
|
||||||
private val coroutineDispatchers: CoroutineDispatchers,
|
private val coroutineDispatchers: CoroutineDispatchers,
|
||||||
private val unifiedPushCurrentUserPushConfigProvider: UnifiedPushCurrentUserPushConfigProvider,
|
private val unifiedPushSessionPushConfigProvider: UnifiedPushSessionPushConfigProvider,
|
||||||
) : NotificationTroubleshootTest {
|
) : NotificationTroubleshootTest {
|
||||||
override val order = 450
|
override val order = 450
|
||||||
private val delegate = NotificationTroubleshootTestDelegate(
|
private val delegate = NotificationTroubleshootTestDelegate(
|
||||||
|
|
@ -44,7 +46,7 @@ class UnifiedPushMatrixGatewayTest(
|
||||||
|
|
||||||
override suspend fun run(coroutineScope: CoroutineScope) {
|
override suspend fun run(coroutineScope: CoroutineScope) {
|
||||||
delegate.start()
|
delegate.start()
|
||||||
val config = unifiedPushCurrentUserPushConfigProvider.provide()
|
val config = unifiedPushSessionPushConfigProvider.provide(sessionId)
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
delegate.updateState(
|
delegate.updateState(
|
||||||
description = "No current push provider",
|
description = "No current push provider",
|
||||||
|
|
|
||||||
|
|
@ -10,36 +10,16 @@ package io.element.android.libraries.pushproviders.unifiedpush
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.matrix.test.A_SECRET
|
import io.element.android.libraries.matrix.test.A_SECRET
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
||||||
import io.element.android.libraries.pushstore.test.userpushstore.clientsecret.FakePushClientSecret
|
import io.element.android.libraries.pushstore.test.userpushstore.clientsecret.FakePushClientSecret
|
||||||
import io.element.android.services.appnavstate.api.AppNavigationState
|
|
||||||
import io.element.android.services.appnavstate.api.AppNavigationStateService
|
|
||||||
import io.element.android.services.appnavstate.api.NavigationState
|
|
||||||
import io.element.android.services.appnavstate.test.FakeAppNavigationStateService
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class DefaultUnifiedPushCurrentUserPushConfigProviderTest {
|
class DefaultUnifiedPushCurrentUserPushConfigProviderTest {
|
||||||
@Test
|
|
||||||
fun `getCurrentUserPushConfig no session`() = runTest {
|
|
||||||
val sut = createDefaultUnifiedPushCurrentUserPushConfigProvider()
|
|
||||||
val result = sut.provide()
|
|
||||||
assertThat(result).isNull()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `getCurrentUserPushConfig no push gateway`() = runTest {
|
fun `getCurrentUserPushConfig no push gateway`() = runTest {
|
||||||
val sut = createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
val sut = createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
||||||
appNavigationStateService = FakeAppNavigationStateService(
|
|
||||||
appNavigationState = MutableStateFlow(
|
|
||||||
AppNavigationState(
|
|
||||||
navigationState = NavigationState.Session(owner = "owner", sessionId = A_SESSION_ID),
|
|
||||||
isInForeground = true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
pushClientSecret = FakePushClientSecret(
|
pushClientSecret = FakePushClientSecret(
|
||||||
getSecretForUserResult = { A_SECRET }
|
getSecretForUserResult = { A_SECRET }
|
||||||
),
|
),
|
||||||
|
|
@ -47,21 +27,13 @@ class DefaultUnifiedPushCurrentUserPushConfigProviderTest {
|
||||||
getPushGatewayResult = { null }
|
getPushGatewayResult = { null }
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
val result = sut.provide()
|
val result = sut.provide(A_SESSION_ID)
|
||||||
assertThat(result).isNull()
|
assertThat(result).isNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `getCurrentUserPushConfig no push key`() = runTest {
|
fun `getCurrentUserPushConfig no push key`() = runTest {
|
||||||
val sut = createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
val sut = createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
||||||
appNavigationStateService = FakeAppNavigationStateService(
|
|
||||||
appNavigationState = MutableStateFlow(
|
|
||||||
AppNavigationState(
|
|
||||||
navigationState = NavigationState.Session(owner = "owner", sessionId = A_SESSION_ID),
|
|
||||||
isInForeground = true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
pushClientSecret = FakePushClientSecret(
|
pushClientSecret = FakePushClientSecret(
|
||||||
getSecretForUserResult = { A_SECRET }
|
getSecretForUserResult = { A_SECRET }
|
||||||
),
|
),
|
||||||
|
|
@ -70,21 +42,13 @@ class DefaultUnifiedPushCurrentUserPushConfigProviderTest {
|
||||||
getEndpointResult = { null }
|
getEndpointResult = { null }
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
val result = sut.provide()
|
val result = sut.provide(A_SESSION_ID)
|
||||||
assertThat(result).isNull()
|
assertThat(result).isNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `getCurrentUserPushConfig ok`() = runTest {
|
fun `getCurrentUserPushConfig ok`() = runTest {
|
||||||
val sut = createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
val sut = createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
||||||
appNavigationStateService = FakeAppNavigationStateService(
|
|
||||||
appNavigationState = MutableStateFlow(
|
|
||||||
AppNavigationState(
|
|
||||||
navigationState = NavigationState.Session(owner = "owner", sessionId = A_SESSION_ID),
|
|
||||||
isInForeground = true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
pushClientSecret = FakePushClientSecret(
|
pushClientSecret = FakePushClientSecret(
|
||||||
getSecretForUserResult = { A_SECRET }
|
getSecretForUserResult = { A_SECRET }
|
||||||
),
|
),
|
||||||
|
|
@ -93,19 +57,17 @@ class DefaultUnifiedPushCurrentUserPushConfigProviderTest {
|
||||||
getEndpointResult = { "aEndpoint" }
|
getEndpointResult = { "aEndpoint" }
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
val result = sut.provide()
|
val result = sut.provide(A_SESSION_ID)
|
||||||
assertThat(result).isEqualTo(CurrentUserPushConfig("aPushGateway", "aEndpoint"))
|
assertThat(result).isEqualTo(Config("aPushGateway", "aEndpoint"))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
private fun createDefaultUnifiedPushCurrentUserPushConfigProvider(
|
||||||
pushClientSecret: PushClientSecret = FakePushClientSecret(),
|
pushClientSecret: PushClientSecret = FakePushClientSecret(),
|
||||||
unifiedPushStore: UnifiedPushStore = FakeUnifiedPushStore(),
|
unifiedPushStore: UnifiedPushStore = FakeUnifiedPushStore(),
|
||||||
appNavigationStateService: AppNavigationStateService = FakeAppNavigationStateService(),
|
): DefaultUnifiedPushPushConfigProvider {
|
||||||
): DefaultUnifiedPushCurrentUserPushConfigProvider {
|
return DefaultUnifiedPushPushConfigProvider(
|
||||||
return DefaultUnifiedPushCurrentUserPushConfigProvider(
|
|
||||||
pushClientSecret = pushClientSecret,
|
pushClientSecret = pushClientSecret,
|
||||||
unifiedPushStore = unifiedPushStore,
|
unifiedPushStore = unifiedPushStore,
|
||||||
appNavigationStateService = appNavigationStateService,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@ import io.element.android.libraries.matrix.test.A_SECRET
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||||
import io.element.android.libraries.pushproviders.api.Distributor
|
import io.element.android.libraries.pushproviders.api.Distributor
|
||||||
import io.element.android.libraries.pushproviders.test.aCurrentUserPushConfig
|
import io.element.android.libraries.pushproviders.test.aSessionPushConfig
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.troubleshoot.FakeUnifiedPushCurrentUserPushConfigProvider
|
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.troubleshoot.FakeUnifiedPushDistributorProvider
|
import io.element.android.libraries.pushproviders.unifiedpush.troubleshoot.FakeUnifiedPushDistributorProvider
|
||||||
|
import io.element.android.libraries.pushproviders.unifiedpush.troubleshoot.FakeUnifiedPushSessionPushConfigProvider
|
||||||
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
|
||||||
import io.element.android.libraries.pushstore.test.userpushstore.clientsecret.FakePushClientSecret
|
import io.element.android.libraries.pushstore.test.userpushstore.clientsecret.FakePushClientSecret
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
|
|
@ -211,13 +211,13 @@ class UnifiedPushProviderTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `getCurrentUserPushConfig invokes the provider methods`() = runTest {
|
fun `getCurrentUserPushConfig invokes the provider methods`() = runTest {
|
||||||
val currentUserPushConfig = aCurrentUserPushConfig()
|
val currentUserPushConfig = aSessionPushConfig()
|
||||||
val unifiedPushProvider = createUnifiedPushProvider(
|
val unifiedPushProvider = createUnifiedPushProvider(
|
||||||
unifiedPushCurrentUserPushConfigProvider = FakeUnifiedPushCurrentUserPushConfigProvider(
|
unifiedPushSessionPushConfigProvider = FakeUnifiedPushSessionPushConfigProvider(
|
||||||
currentUserPushConfig = { currentUserPushConfig }
|
config = { currentUserPushConfig }
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
val result = unifiedPushProvider.getCurrentUserPushConfig()
|
val result = unifiedPushProvider.getPushConfig(A_SESSION_ID)
|
||||||
assertThat(result).isEqualTo(currentUserPushConfig)
|
assertThat(result).isEqualTo(currentUserPushConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -248,7 +248,7 @@ class UnifiedPushProviderTest {
|
||||||
unRegisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase = FakeUnregisterUnifiedPushUseCase(),
|
unRegisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase = FakeUnregisterUnifiedPushUseCase(),
|
||||||
pushClientSecret: PushClientSecret = FakePushClientSecret(),
|
pushClientSecret: PushClientSecret = FakePushClientSecret(),
|
||||||
unifiedPushStore: UnifiedPushStore = FakeUnifiedPushStore(),
|
unifiedPushStore: UnifiedPushStore = FakeUnifiedPushStore(),
|
||||||
unifiedPushCurrentUserPushConfigProvider: UnifiedPushCurrentUserPushConfigProvider = FakeUnifiedPushCurrentUserPushConfigProvider(),
|
unifiedPushSessionPushConfigProvider: UnifiedPushSessionPushConfigProvider = FakeUnifiedPushSessionPushConfigProvider(),
|
||||||
): UnifiedPushProvider {
|
): UnifiedPushProvider {
|
||||||
return UnifiedPushProvider(
|
return UnifiedPushProvider(
|
||||||
unifiedPushDistributorProvider = unifiedPushDistributorProvider,
|
unifiedPushDistributorProvider = unifiedPushDistributorProvider,
|
||||||
|
|
@ -256,7 +256,7 @@ class UnifiedPushProviderTest {
|
||||||
unRegisterUnifiedPushUseCase = unRegisterUnifiedPushUseCase,
|
unRegisterUnifiedPushUseCase = unRegisterUnifiedPushUseCase,
|
||||||
pushClientSecret = pushClientSecret,
|
pushClientSecret = pushClientSecret,
|
||||||
unifiedPushStore = unifiedPushStore,
|
unifiedPushStore = unifiedPushStore,
|
||||||
unifiedPushCurrentUserPushConfigProvider = unifiedPushCurrentUserPushConfigProvider,
|
unifiedPushSessionPushConfigProvider = unifiedPushSessionPushConfigProvider,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2024 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.troubleshoot
|
|
||||||
|
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushCurrentUserPushConfigProvider
|
|
||||||
import io.element.android.tests.testutils.lambda.lambdaError
|
|
||||||
|
|
||||||
class FakeUnifiedPushCurrentUserPushConfigProvider(
|
|
||||||
private val currentUserPushConfig: () -> CurrentUserPushConfig? = { lambdaError() },
|
|
||||||
) : UnifiedPushCurrentUserPushConfigProvider {
|
|
||||||
override suspend fun provide(): CurrentUserPushConfig? {
|
|
||||||
return currentUserPushConfig()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 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.troubleshoot
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
|
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushSessionPushConfigProvider
|
||||||
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
|
|
||||||
|
class FakeUnifiedPushSessionPushConfigProvider(
|
||||||
|
private val config: (SessionId) -> Config? = { lambdaError() },
|
||||||
|
) : UnifiedPushSessionPushConfigProvider {
|
||||||
|
override suspend fun provide(sessionId: SessionId): Config? {
|
||||||
|
return config(sessionId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,8 +8,10 @@
|
||||||
package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot
|
package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.pushproviders.test.aCurrentUserPushConfig
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
|
import io.element.android.libraries.pushproviders.api.Config
|
||||||
|
import io.element.android.libraries.pushproviders.test.aSessionPushConfig
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.FakeUnifiedPushApiFactory
|
import io.element.android.libraries.pushproviders.unifiedpush.FakeUnifiedPushApiFactory
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig
|
import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig
|
||||||
import io.element.android.libraries.pushproviders.unifiedpush.invalidDiscoveryResponse
|
import io.element.android.libraries.pushproviders.unifiedpush.invalidDiscoveryResponse
|
||||||
|
|
@ -27,7 +29,7 @@ class UnifiedPushMatrixGatewayTestTest {
|
||||||
@Test
|
@Test
|
||||||
fun `test UnifiedPushMatrixGatewayTest success`() = runTest {
|
fun `test UnifiedPushMatrixGatewayTest success`() = runTest {
|
||||||
val sut = createUnifiedPushMatrixGatewayTest(
|
val sut = createUnifiedPushMatrixGatewayTest(
|
||||||
currentUserPushConfig = aCurrentUserPushConfig(),
|
config = aSessionPushConfig(),
|
||||||
discoveryResponse = matrixDiscoveryResponse,
|
discoveryResponse = matrixDiscoveryResponse,
|
||||||
)
|
)
|
||||||
sut.runAndTestState {
|
sut.runAndTestState {
|
||||||
|
|
@ -41,7 +43,7 @@ class UnifiedPushMatrixGatewayTestTest {
|
||||||
@Test
|
@Test
|
||||||
fun `test UnifiedPushMatrixGatewayTest no config found`() = runTest {
|
fun `test UnifiedPushMatrixGatewayTest no config found`() = runTest {
|
||||||
val sut = createUnifiedPushMatrixGatewayTest(
|
val sut = createUnifiedPushMatrixGatewayTest(
|
||||||
currentUserPushConfig = null,
|
config = null,
|
||||||
discoveryResponse = matrixDiscoveryResponse,
|
discoveryResponse = matrixDiscoveryResponse,
|
||||||
)
|
)
|
||||||
sut.runAndTestState {
|
sut.runAndTestState {
|
||||||
|
|
@ -55,7 +57,7 @@ class UnifiedPushMatrixGatewayTestTest {
|
||||||
@Test
|
@Test
|
||||||
fun `test UnifiedPushMatrixGatewayTest not valid gateway`() = runTest {
|
fun `test UnifiedPushMatrixGatewayTest not valid gateway`() = runTest {
|
||||||
val sut = createUnifiedPushMatrixGatewayTest(
|
val sut = createUnifiedPushMatrixGatewayTest(
|
||||||
currentUserPushConfig = aCurrentUserPushConfig(),
|
config = aSessionPushConfig(),
|
||||||
discoveryResponse = invalidDiscoveryResponse,
|
discoveryResponse = invalidDiscoveryResponse,
|
||||||
)
|
)
|
||||||
sut.runAndTestState {
|
sut.runAndTestState {
|
||||||
|
|
@ -72,7 +74,7 @@ class UnifiedPushMatrixGatewayTestTest {
|
||||||
@Test
|
@Test
|
||||||
fun `test UnifiedPushMatrixGatewayTest network error`() = runTest {
|
fun `test UnifiedPushMatrixGatewayTest network error`() = runTest {
|
||||||
val sut = createUnifiedPushMatrixGatewayTest(
|
val sut = createUnifiedPushMatrixGatewayTest(
|
||||||
currentUserPushConfig = aCurrentUserPushConfig(),
|
config = aSessionPushConfig(),
|
||||||
discoveryResponse = { error("Network error") },
|
discoveryResponse = { error("Network error") },
|
||||||
)
|
)
|
||||||
sut.runAndTestState {
|
sut.runAndTestState {
|
||||||
|
|
@ -91,14 +93,16 @@ class UnifiedPushMatrixGatewayTestTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun TestScope.createUnifiedPushMatrixGatewayTest(
|
private fun TestScope.createUnifiedPushMatrixGatewayTest(
|
||||||
currentUserPushConfig: CurrentUserPushConfig? = null,
|
sessionId: SessionId = A_SESSION_ID,
|
||||||
|
config: Config? = null,
|
||||||
discoveryResponse: () -> DiscoveryResponse = matrixDiscoveryResponse,
|
discoveryResponse: () -> DiscoveryResponse = matrixDiscoveryResponse,
|
||||||
): UnifiedPushMatrixGatewayTest {
|
): UnifiedPushMatrixGatewayTest {
|
||||||
return UnifiedPushMatrixGatewayTest(
|
return UnifiedPushMatrixGatewayTest(
|
||||||
|
sessionId = sessionId,
|
||||||
unifiedPushApiFactory = FakeUnifiedPushApiFactory(discoveryResponse),
|
unifiedPushApiFactory = FakeUnifiedPushApiFactory(discoveryResponse),
|
||||||
coroutineDispatchers = testCoroutineDispatchers(),
|
coroutineDispatchers = testCoroutineDispatchers(),
|
||||||
unifiedPushCurrentUserPushConfigProvider = FakeUnifiedPushCurrentUserPushConfigProvider(
|
unifiedPushSessionPushConfigProvider = FakeUnifiedPushSessionPushConfigProvider(
|
||||||
currentUserPushConfig = { currentUserPushConfig }
|
config = { config }
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue