Browse Source

Add test on DefaultPusherSubscriber

pull/2899/head
Benoit Marty 4 months ago
parent
commit
97530e752f
  1. 9
      libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/pushers/FakePushersService.kt
  2. 197
      libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriberTest.kt

9
libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/pushers/FakePushersService.kt

@ -20,7 +20,10 @@ import io.element.android.libraries.matrix.api.pusher.PushersService @@ -20,7 +20,10 @@ import io.element.android.libraries.matrix.api.pusher.PushersService
import io.element.android.libraries.matrix.api.pusher.SetHttpPusherData
import io.element.android.libraries.matrix.api.pusher.UnsetHttpPusherData
class FakePushersService : PushersService {
override suspend fun setHttpPusher(setHttpPusherData: SetHttpPusherData) = Result.success(Unit)
override suspend fun unsetHttpPusher(unsetHttpPusherData: UnsetHttpPusherData): Result<Unit> = Result.success(Unit)
class FakePushersService(
private val setHttpPusherResult: (SetHttpPusherData) -> Result<Unit> = { TODO() },
private val unsetHttpPusherResult: (UnsetHttpPusherData) -> Result<Unit> = { TODO() },
) : PushersService {
override suspend fun setHttpPusher(setHttpPusherData: SetHttpPusherData) = setHttpPusherResult(setHttpPusherData)
override suspend fun unsetHttpPusher(unsetHttpPusherData: UnsetHttpPusherData): Result<Unit> = unsetHttpPusherResult(unsetHttpPusherData)
}

197
libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriberTest.kt

@ -0,0 +1,197 @@ @@ -0,0 +1,197 @@
/*
* Copyright (c) 2024 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.element.android.libraries.push.impl
import com.google.common.truth.Truth.assertThat
import io.element.android.appconfig.PushConfig
import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.matrix.api.pusher.SetHttpPusherData
import io.element.android.libraries.matrix.api.pusher.UnsetHttpPusherData
import io.element.android.libraries.matrix.test.AN_EXCEPTION
import io.element.android.libraries.matrix.test.A_SECRET
import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.core.aBuildMeta
import io.element.android.libraries.matrix.test.pushers.FakePushersService
import io.element.android.libraries.pushstore.api.UserPushStoreFactory
import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStoreFactory
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.value
import kotlinx.coroutines.test.runTest
import org.junit.Test
class DefaultPusherSubscriberTest {
@Test
fun `test register pusher OK`() = runTest {
testRegisterPusher(
currentPushKey = null,
registerResult = Result.success(Unit),
)
}
@Test
fun `test re-register pusher OK`() = runTest {
testRegisterPusher(
currentPushKey = "aPushKey",
registerResult = Result.success(Unit),
)
}
@Test
fun `test register pusher error`() = runTest {
testRegisterPusher(
currentPushKey = null,
registerResult = Result.failure(AN_EXCEPTION),
)
}
@Test
fun `test re-register pusher error`() = runTest {
testRegisterPusher(
currentPushKey = "aPushKey",
registerResult = Result.failure(AN_EXCEPTION),
)
}
private suspend fun testRegisterPusher(
currentPushKey: String?,
registerResult: Result<Unit>,
) {
val setHttpPusherResult = lambdaRecorder<SetHttpPusherData, Result<Unit>> { registerResult }
val userPushStore = FakeUserPushStore().apply {
setCurrentRegisteredPushKey(currentPushKey)
}
assertThat(userPushStore.getCurrentRegisteredPushKey()).isEqualTo(currentPushKey)
val matrixClient = FakeMatrixClient(
pushersService = FakePushersService(
setHttpPusherResult = setHttpPusherResult,
),
)
val defaultPusherSubscriber = createDefaultPusherSubscriber(
pushClientSecret = FakePushClientSecret(
getSecretForUserResult = { A_SECRET },
),
userPushStoreFactory = FakeUserPushStoreFactory(
userPushStore = userPushStore,
),
)
val result = defaultPusherSubscriber.registerPusher(
matrixClient = matrixClient,
pushKey = "aPushKey",
gateway = "aGateway",
)
assertThat(result).isEqualTo(registerResult)
setHttpPusherResult.assertions()
.isCalledExactly(1)
.withSequence(
listOf(
value(
SetHttpPusherData(
pushKey = "aPushKey",
appId = PushConfig.PUSHER_APP_ID,
url = "aGateway",
appDisplayName = "MyApp",
deviceDisplayName = "MyDevice",
profileTag = DEFAULT_PUSHER_FILE_TAG + "_",
lang = "en",
defaultPayload = "{\"cs\":\"$A_SECRET\"}",
),
)
)
)
assertThat(userPushStore.getCurrentRegisteredPushKey()).isEqualTo(
if (registerResult.isSuccess) "aPushKey" else currentPushKey
)
}
@Test
fun `test unregister pusher OK`() = runTest {
testUnregisterPusher(
currentPushKey = "aPushKey",
unregisterResult = Result.success(Unit),
)
}
@Test
fun `test unregister pusher error`() = runTest {
testUnregisterPusher(
currentPushKey = "aPushKey",
unregisterResult = Result.failure(AN_EXCEPTION),
)
}
private suspend fun testUnregisterPusher(
currentPushKey: String?,
unregisterResult: Result<Unit>,
) {
val unsetHttpPusherResult = lambdaRecorder<UnsetHttpPusherData, Result<Unit>> { unregisterResult }
val userPushStore = FakeUserPushStore().apply {
setCurrentRegisteredPushKey(currentPushKey)
}
assertThat(userPushStore.getCurrentRegisteredPushKey()).isEqualTo(currentPushKey)
val matrixClient = FakeMatrixClient(
pushersService = FakePushersService(
unsetHttpPusherResult = unsetHttpPusherResult,
),
)
val defaultPusherSubscriber = createDefaultPusherSubscriber(
pushClientSecret = FakePushClientSecret(
getSecretForUserResult = { A_SECRET },
),
userPushStoreFactory = FakeUserPushStoreFactory(
userPushStore = userPushStore,
),
)
val result = defaultPusherSubscriber.unregisterPusher(
matrixClient = matrixClient,
pushKey = "aPushKey",
gateway = "aGateway",
)
assertThat(result).isEqualTo(unregisterResult)
unsetHttpPusherResult.assertions()
.isCalledExactly(1)
.withSequence(
listOf(
value(
UnsetHttpPusherData(
pushKey = "aPushKey",
appId = PushConfig.PUSHER_APP_ID,
),
)
)
)
assertThat(userPushStore.getCurrentRegisteredPushKey()).isEqualTo(
if (unregisterResult.isSuccess) null else currentPushKey
)
}
private fun createDefaultPusherSubscriber(
buildMeta: BuildMeta = aBuildMeta(applicationName = "MyApp"),
userPushStoreFactory: UserPushStoreFactory = FakeUserPushStoreFactory(),
pushClientSecret: PushClientSecret = FakePushClientSecret(),
): DefaultPusherSubscriber {
return DefaultPusherSubscriber(
buildMeta = buildMeta,
pushClientSecret = pushClientSecret,
userPushStoreFactory = userPushStoreFactory,
)
}
}
Loading…
Cancel
Save