Adding unit tests for register and unregister use cases
This commit is contained in:
parent
a3815d7012
commit
46ccf4d73f
@ -32,7 +32,6 @@ class RegisterUnifiedPushUseCase @Inject constructor(
|
||||
object NeedToAskUserForDistributor : RegisterUnifiedPushResult
|
||||
}
|
||||
|
||||
// TODO add unit tests
|
||||
fun execute(distributor: String = ""): RegisterUnifiedPushResult {
|
||||
if (distributor.isNotEmpty()) {
|
||||
saveAndRegisterApp(distributor)
|
||||
|
@ -31,7 +31,6 @@ class UnregisterUnifiedPushUseCase @Inject constructor(
|
||||
private val unifiedPushHelper: UnifiedPushHelper,
|
||||
) {
|
||||
|
||||
// TODO add unit tests
|
||||
suspend fun execute(pushersManager: PushersManager?) {
|
||||
val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME
|
||||
vectorPreferences.setFdroidSyncBackgroundMode(mode)
|
||||
|
@ -0,0 +1,158 @@
|
||||
/*
|
||||
* Copyright (c) 2022 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 im.vector.app.core.pushers
|
||||
|
||||
import im.vector.app.test.fakes.FakeContext
|
||||
import im.vector.app.test.fakes.FakeVectorFeatures
|
||||
import io.mockk.every
|
||||
import io.mockk.justRun
|
||||
import io.mockk.mockkStatic
|
||||
import io.mockk.unmockkAll
|
||||
import io.mockk.verify
|
||||
import io.mockk.verifyAll
|
||||
import io.mockk.verifyOrder
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.amshove.kluent.shouldBe
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.unifiedpush.android.connector.UnifiedPush
|
||||
|
||||
class RegisterUnifiedPushUseCaseTest {
|
||||
|
||||
private val fakeContext = FakeContext()
|
||||
private val fakeVectorFeatures = FakeVectorFeatures()
|
||||
|
||||
private val registerUnifiedPushUseCase = RegisterUnifiedPushUseCase(
|
||||
context = fakeContext.instance,
|
||||
vectorFeatures = fakeVectorFeatures,
|
||||
)
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
mockkStatic(UnifiedPush::class)
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
unmockkAll()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given non empty distributor when execute then distributor is saved and app is registered`() = runTest {
|
||||
// Given
|
||||
val aDistributor = "distributor"
|
||||
justRun { UnifiedPush.registerApp(any()) }
|
||||
justRun { UnifiedPush.saveDistributor(any(), any()) }
|
||||
|
||||
// When
|
||||
val result = registerUnifiedPushUseCase.execute(aDistributor)
|
||||
|
||||
// Then
|
||||
result shouldBe RegisterUnifiedPushUseCase.RegisterUnifiedPushResult.Success
|
||||
verifyOrder {
|
||||
UnifiedPush.saveDistributor(fakeContext.instance, aDistributor)
|
||||
UnifiedPush.registerApp(fakeContext.instance)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given external distributors are not allowed when execute then internal distributor is saved and app is registered`() = runTest {
|
||||
// Given
|
||||
val aPackageName = "packageName"
|
||||
fakeContext.givenPackageName(aPackageName)
|
||||
justRun { UnifiedPush.registerApp(any()) }
|
||||
justRun { UnifiedPush.saveDistributor(any(), any()) }
|
||||
fakeVectorFeatures.givenExternalDistributorsAreAllowed(false)
|
||||
|
||||
// When
|
||||
val result = registerUnifiedPushUseCase.execute()
|
||||
|
||||
// Then
|
||||
result shouldBe RegisterUnifiedPushUseCase.RegisterUnifiedPushResult.Success
|
||||
verifyOrder {
|
||||
UnifiedPush.saveDistributor(fakeContext.instance, aPackageName)
|
||||
UnifiedPush.registerApp(fakeContext.instance)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given a saved distributor and external distributors are allowed when execute then app is registered`() = runTest {
|
||||
// Given
|
||||
justRun { UnifiedPush.registerApp(any()) }
|
||||
val aDistributor = "distributor"
|
||||
every { UnifiedPush.getDistributor(any()) } returns aDistributor
|
||||
fakeVectorFeatures.givenExternalDistributorsAreAllowed(true)
|
||||
|
||||
// When
|
||||
val result = registerUnifiedPushUseCase.execute()
|
||||
|
||||
// Then
|
||||
result shouldBe RegisterUnifiedPushUseCase.RegisterUnifiedPushResult.Success
|
||||
verifyAll {
|
||||
UnifiedPush.getDistributor(fakeContext.instance)
|
||||
UnifiedPush.registerApp(fakeContext.instance)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given no saved distributor and a unique distributor available when execute then the distributor is saved and app is registered`() = runTest {
|
||||
// Given
|
||||
justRun { UnifiedPush.registerApp(any()) }
|
||||
justRun { UnifiedPush.saveDistributor(any(), any()) }
|
||||
every { UnifiedPush.getDistributor(any()) } returns ""
|
||||
fakeVectorFeatures.givenExternalDistributorsAreAllowed(true)
|
||||
val aDistributor = "distributor"
|
||||
every { UnifiedPush.getDistributors(any()) } returns listOf(aDistributor)
|
||||
|
||||
// When
|
||||
val result = registerUnifiedPushUseCase.execute()
|
||||
|
||||
// Then
|
||||
result shouldBe RegisterUnifiedPushUseCase.RegisterUnifiedPushResult.Success
|
||||
verifyOrder {
|
||||
UnifiedPush.getDistributor(fakeContext.instance)
|
||||
UnifiedPush.getDistributors(fakeContext.instance)
|
||||
UnifiedPush.saveDistributor(fakeContext.instance, aDistributor)
|
||||
UnifiedPush.registerApp(fakeContext.instance)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given no saved distributor and multiple distributors available when execute then result is to ask user`() = runTest {
|
||||
// Given
|
||||
every { UnifiedPush.getDistributor(any()) } returns ""
|
||||
fakeVectorFeatures.givenExternalDistributorsAreAllowed(true)
|
||||
val aDistributor1 = "distributor1"
|
||||
val aDistributor2 = "distributor2"
|
||||
every { UnifiedPush.getDistributors(any()) } returns listOf(aDistributor1, aDistributor2)
|
||||
|
||||
// When
|
||||
val result = registerUnifiedPushUseCase.execute()
|
||||
|
||||
// Then
|
||||
result shouldBe RegisterUnifiedPushUseCase.RegisterUnifiedPushResult.NeedToAskUserForDistributor
|
||||
verifyOrder {
|
||||
UnifiedPush.getDistributor(fakeContext.instance)
|
||||
UnifiedPush.getDistributors(fakeContext.instance)
|
||||
}
|
||||
verify(inverse = true) {
|
||||
UnifiedPush.saveDistributor(any(), any())
|
||||
UnifiedPush.registerApp(any())
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2022 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 im.vector.app.core.pushers
|
||||
|
||||
import im.vector.app.features.settings.BackgroundSyncMode
|
||||
import im.vector.app.test.fakes.FakeContext
|
||||
import im.vector.app.test.fakes.FakePushersManager
|
||||
import im.vector.app.test.fakes.FakeUnifiedPushHelper
|
||||
import im.vector.app.test.fakes.FakeUnifiedPushStore
|
||||
import im.vector.app.test.fakes.FakeVectorPreferences
|
||||
import io.mockk.justRun
|
||||
import io.mockk.mockkStatic
|
||||
import io.mockk.unmockkAll
|
||||
import io.mockk.verifyAll
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.unifiedpush.android.connector.UnifiedPush
|
||||
|
||||
class UnregisterUnifiedPushUseCaseTest {
|
||||
|
||||
private val fakeContext = FakeContext()
|
||||
private val fakeVectorPreferences = FakeVectorPreferences()
|
||||
private val fakeUnifiedPushStore = FakeUnifiedPushStore()
|
||||
private val fakeUnifiedPushHelper = FakeUnifiedPushHelper()
|
||||
|
||||
private val unregisterUnifiedPushUseCase = UnregisterUnifiedPushUseCase(
|
||||
context = fakeContext.instance,
|
||||
vectorPreferences = fakeVectorPreferences.instance,
|
||||
unifiedPushStore = fakeUnifiedPushStore.instance,
|
||||
unifiedPushHelper = fakeUnifiedPushHelper.instance,
|
||||
)
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
mockkStatic(UnifiedPush::class)
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
unmockkAll()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given pushersManager when execute then unregister and clean everything which is needed`() = runTest {
|
||||
// Given
|
||||
val aEndpoint = "endpoint"
|
||||
fakeUnifiedPushHelper.givenGetEndpointOrTokenReturns(aEndpoint)
|
||||
val aPushersManager = FakePushersManager()
|
||||
aPushersManager.givenUnregisterPusher(aEndpoint)
|
||||
justRun { UnifiedPush.unregisterApp(any()) }
|
||||
fakeVectorPreferences.givenSetFdroidSyncBackgroundMode(BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME)
|
||||
fakeUnifiedPushStore.givenStorePushGateway(null)
|
||||
fakeUnifiedPushStore.givenStoreUpEndpoint(null)
|
||||
|
||||
// When
|
||||
unregisterUnifiedPushUseCase.execute(aPushersManager.instance)
|
||||
|
||||
// Then
|
||||
fakeVectorPreferences.verifySetFdroidSyncBackgroundMode(BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME)
|
||||
aPushersManager.verifyUnregisterPusher(aEndpoint)
|
||||
verifyAll {
|
||||
UnifiedPush.unregisterApp(fakeContext.instance)
|
||||
}
|
||||
fakeUnifiedPushStore.verifyStorePushGateway(null)
|
||||
fakeUnifiedPushStore.verifyStoreUpEndpoint(null)
|
||||
}
|
||||
}
|
@ -81,4 +81,8 @@ class FakeContext(
|
||||
givenService(Context.CLIPBOARD_SERVICE, ClipboardManager::class.java, fakeClipboardManager.instance)
|
||||
return fakeClipboardManager
|
||||
}
|
||||
|
||||
fun givenPackageName(name: String) {
|
||||
every { instance.packageName } returns name
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,8 @@
|
||||
package im.vector.app.test.fakes
|
||||
|
||||
import im.vector.app.core.pushers.PushersManager
|
||||
import io.mockk.coJustRun
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import org.matrix.android.sdk.api.session.pushers.Pusher
|
||||
@ -28,4 +30,12 @@ class FakePushersManager {
|
||||
fun givenGetPusherForCurrentSessionReturns(pusher: Pusher?) {
|
||||
every { instance.getPusherForCurrentSession() } returns pusher
|
||||
}
|
||||
|
||||
fun givenUnregisterPusher(pushKey: String) {
|
||||
coJustRun { instance.unregisterPusher(pushKey) }
|
||||
}
|
||||
|
||||
fun verifyUnregisterPusher(pushKey: String) {
|
||||
coVerify { instance.unregisterPusher(pushKey) }
|
||||
}
|
||||
}
|
||||
|
@ -27,4 +27,8 @@ class FakeUnifiedPushHelper {
|
||||
fun givenIsEmbeddedDistributorReturns(isEmbedded: Boolean) {
|
||||
every { instance.isEmbeddedDistributor() } returns isEmbedded
|
||||
}
|
||||
|
||||
fun givenGetEndpointOrTokenReturns(endpoint: String?) {
|
||||
every { instance.getEndpointOrToken() } returns endpoint
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2022 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 im.vector.app.test.fakes
|
||||
|
||||
import im.vector.app.core.pushers.UnifiedPushStore
|
||||
import io.mockk.justRun
|
||||
import io.mockk.mockk
|
||||
import io.mockk.verify
|
||||
|
||||
class FakeUnifiedPushStore {
|
||||
|
||||
val instance = mockk<UnifiedPushStore>()
|
||||
|
||||
fun givenStoreUpEndpoint(endpoint: String?) {
|
||||
justRun { instance.storeUpEndpoint(endpoint) }
|
||||
}
|
||||
|
||||
fun verifyStoreUpEndpoint(endpoint: String?) {
|
||||
verify { instance.storeUpEndpoint(endpoint) }
|
||||
}
|
||||
|
||||
fun givenStorePushGateway(gateway: String?) {
|
||||
justRun { instance.storePushGateway(gateway) }
|
||||
}
|
||||
|
||||
fun verifyStorePushGateway(gateway: String?) {
|
||||
verify { instance.storePushGateway(gateway) }
|
||||
}
|
||||
}
|
@ -54,4 +54,8 @@ class FakeVectorFeatures : VectorFeatures by spyk<DefaultVectorFeatures>() {
|
||||
fun givenUnverifiedSessionsAlertEnabled(isEnabled: Boolean) {
|
||||
every { isUnverifiedSessionsAlertEnabled() } returns isEnabled
|
||||
}
|
||||
|
||||
fun givenExternalDistributorsAreAllowed(allowed: Boolean) {
|
||||
every { allowExternalUnifiedPushDistributors() } returns allowed
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package im.vector.app.test.fakes
|
||||
|
||||
import im.vector.app.features.settings.BackgroundSyncMode
|
||||
import im.vector.app.features.settings.VectorPreferences
|
||||
import io.mockk.every
|
||||
import io.mockk.justRun
|
||||
@ -60,4 +61,12 @@ class FakeVectorPreferences {
|
||||
fun givenUnverifiedSessionsAlertLastShownMillis(lastShownMillis: Long) {
|
||||
every { instance.getUnverifiedSessionsAlertLastShownMillis(any()) } returns lastShownMillis
|
||||
}
|
||||
|
||||
fun givenSetFdroidSyncBackgroundMode(mode: BackgroundSyncMode) {
|
||||
justRun { instance.setFdroidSyncBackgroundMode(mode) }
|
||||
}
|
||||
|
||||
fun verifySetFdroidSyncBackgroundMode(mode: BackgroundSyncMode) {
|
||||
verify { instance.setFdroidSyncBackgroundMode(mode) }
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user