Add test on DefaultPusherSubscriber
This commit is contained in:
parent
1c52697e59
commit
f95af132cb
2 changed files with 203 additions and 3 deletions
|
|
@ -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.SetHttpPusherData
|
||||||
import io.element.android.libraries.matrix.api.pusher.UnsetHttpPusherData
|
import io.element.android.libraries.matrix.api.pusher.UnsetHttpPusherData
|
||||||
|
|
||||||
class FakePushersService : PushersService {
|
class FakePushersService(
|
||||||
override suspend fun setHttpPusher(setHttpPusherData: SetHttpPusherData) = Result.success(Unit)
|
private val setHttpPusherResult: (SetHttpPusherData) -> Result<Unit> = { TODO() },
|
||||||
override suspend fun unsetHttpPusher(unsetHttpPusherData: UnsetHttpPusherData): Result<Unit> = Result.success(Unit)
|
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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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…
Add table
Add a link
Reference in a new issue