Fix unit tests in ViewModel
This commit is contained in:
parent
68bee65e97
commit
da3d3308b4
@ -217,8 +217,8 @@ class DevicesViewModelTest {
|
|||||||
.fakeSession
|
.fakeSession
|
||||||
.fakeCryptoService
|
.fakeCryptoService
|
||||||
.fakeVerificationService
|
.fakeVerificationService
|
||||||
every { fakeVerificationService.addListener(any()) } just runs
|
fakeVerificationService.givenAddListenerSucceeds()
|
||||||
every { fakeVerificationService.removeListener(any()) } just runs
|
fakeVerificationService.givenRemoveListenerSucceeds()
|
||||||
return fakeVerificationService
|
return fakeVerificationService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,9 +19,14 @@ package im.vector.app.features.settings.devices.v2.overview
|
|||||||
import com.airbnb.mvrx.Success
|
import com.airbnb.mvrx.Success
|
||||||
import com.airbnb.mvrx.test.MvRxTestRule
|
import com.airbnb.mvrx.test.MvRxTestRule
|
||||||
import im.vector.app.features.settings.devices.v2.DeviceFullInfo
|
import im.vector.app.features.settings.devices.v2.DeviceFullInfo
|
||||||
import im.vector.app.features.settings.devices.v2.IsCurrentSessionUseCase
|
import im.vector.app.features.settings.devices.v2.RefreshDevicesUseCase
|
||||||
|
import im.vector.app.features.settings.devices.v2.signout.InterceptSignoutFlowResponseUseCase
|
||||||
|
import im.vector.app.features.settings.devices.v2.signout.SignoutSessionUseCase
|
||||||
import im.vector.app.features.settings.devices.v2.verification.CheckIfCurrentSessionCanBeVerifiedUseCase
|
import im.vector.app.features.settings.devices.v2.verification.CheckIfCurrentSessionCanBeVerifiedUseCase
|
||||||
import im.vector.app.test.fakes.FakeActiveSessionHolder
|
import im.vector.app.test.fakes.FakeActiveSessionHolder
|
||||||
|
import im.vector.app.test.fakes.FakePendingAuthHandler
|
||||||
|
import im.vector.app.test.fakes.FakeStringProvider
|
||||||
|
import im.vector.app.test.fakes.FakeVerificationService
|
||||||
import im.vector.app.test.test
|
import im.vector.app.test.test
|
||||||
import im.vector.app.test.testDispatcher
|
import im.vector.app.test.testDispatcher
|
||||||
import io.mockk.coEvery
|
import io.mockk.coEvery
|
||||||
@ -46,29 +51,35 @@ class SessionOverviewViewModelTest {
|
|||||||
deviceId = A_SESSION_ID_1
|
deviceId = A_SESSION_ID_1
|
||||||
)
|
)
|
||||||
private val fakeActiveSessionHolder = FakeActiveSessionHolder()
|
private val fakeActiveSessionHolder = FakeActiveSessionHolder()
|
||||||
private val isCurrentSessionUseCase = mockk<IsCurrentSessionUseCase>()
|
private val fakeStringProvider = FakeStringProvider()
|
||||||
private val getDeviceFullInfoUseCase = mockk<GetDeviceFullInfoUseCase>()
|
private val getDeviceFullInfoUseCase = mockk<GetDeviceFullInfoUseCase>()
|
||||||
private val checkIfCurrentSessionCanBeVerifiedUseCase = mockk<CheckIfCurrentSessionCanBeVerifiedUseCase>()
|
private val checkIfCurrentSessionCanBeVerifiedUseCase = mockk<CheckIfCurrentSessionCanBeVerifiedUseCase>()
|
||||||
|
private val signoutSessionUseCase = mockk<SignoutSessionUseCase>()
|
||||||
|
private val interceptSignoutFlowResponseUseCase = mockk<InterceptSignoutFlowResponseUseCase>()
|
||||||
|
private val fakePendingAuthHandler = FakePendingAuthHandler()
|
||||||
|
private val refreshDevicesUseCase = mockk<RefreshDevicesUseCase>()
|
||||||
|
|
||||||
private fun createViewModel() = SessionOverviewViewModel(
|
private fun createViewModel() = SessionOverviewViewModel(
|
||||||
initialState = SessionOverviewViewState(args),
|
initialState = SessionOverviewViewState(args),
|
||||||
activeSessionHolder = fakeActiveSessionHolder.instance,
|
stringProvider = fakeStringProvider.instance,
|
||||||
isCurrentSessionUseCase = isCurrentSessionUseCase,
|
|
||||||
getDeviceFullInfoUseCase = getDeviceFullInfoUseCase,
|
getDeviceFullInfoUseCase = getDeviceFullInfoUseCase,
|
||||||
checkIfCurrentSessionCanBeVerifiedUseCase = checkIfCurrentSessionCanBeVerifiedUseCase,
|
checkIfCurrentSessionCanBeVerifiedUseCase = checkIfCurrentSessionCanBeVerifiedUseCase,
|
||||||
|
signoutSessionUseCase = signoutSessionUseCase,
|
||||||
|
interceptSignoutFlowResponseUseCase = interceptSignoutFlowResponseUseCase,
|
||||||
|
pendingAuthHandler = fakePendingAuthHandler.instance,
|
||||||
|
activeSessionHolder = fakeActiveSessionHolder.instance,
|
||||||
|
refreshDevicesUseCase = refreshDevicesUseCase,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `given the viewModel has been initialized then viewState is updated with session info and current session verification status`() {
|
fun `given the viewModel has been initialized then viewState is updated with session info and current session verification status`() {
|
||||||
// Given
|
// Given
|
||||||
|
givenVerificationService()
|
||||||
val deviceFullInfo = mockk<DeviceFullInfo>()
|
val deviceFullInfo = mockk<DeviceFullInfo>()
|
||||||
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
||||||
val isCurrentSession = true
|
|
||||||
every { isCurrentSessionUseCase.execute(any()) } returns isCurrentSession
|
|
||||||
givenCurrentSessionIsTrusted()
|
givenCurrentSessionIsTrusted()
|
||||||
val expectedState = SessionOverviewViewState(
|
val expectedState = SessionOverviewViewState(
|
||||||
deviceId = A_SESSION_ID_1,
|
deviceId = A_SESSION_ID_1,
|
||||||
isCurrentSession = isCurrentSession,
|
|
||||||
deviceInfo = Success(deviceFullInfo),
|
deviceInfo = Success(deviceFullInfo),
|
||||||
isCurrentSessionTrusted = true,
|
isCurrentSessionTrusted = true,
|
||||||
)
|
)
|
||||||
@ -81,7 +92,6 @@ class SessionOverviewViewModelTest {
|
|||||||
.assertLatestState { state -> state == expectedState }
|
.assertLatestState { state -> state == expectedState }
|
||||||
.finish()
|
.finish()
|
||||||
verify {
|
verify {
|
||||||
isCurrentSessionUseCase.execute(A_SESSION_ID_1)
|
|
||||||
getDeviceFullInfoUseCase.execute(A_SESSION_ID_1)
|
getDeviceFullInfoUseCase.execute(A_SESSION_ID_1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,9 +99,10 @@ class SessionOverviewViewModelTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `given current session can be verified when handling verify current session action then self verification event is posted`() {
|
fun `given current session can be verified when handling verify current session action then self verification event is posted`() {
|
||||||
// Given
|
// Given
|
||||||
|
givenVerificationService()
|
||||||
val deviceFullInfo = mockk<DeviceFullInfo>()
|
val deviceFullInfo = mockk<DeviceFullInfo>()
|
||||||
|
every { deviceFullInfo.isCurrentDevice } returns true
|
||||||
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
||||||
every { isCurrentSessionUseCase.execute(any()) } returns true
|
|
||||||
val verifySessionAction = SessionOverviewAction.VerifySession
|
val verifySessionAction = SessionOverviewAction.VerifySession
|
||||||
coEvery { checkIfCurrentSessionCanBeVerifiedUseCase.execute() } returns true
|
coEvery { checkIfCurrentSessionCanBeVerifiedUseCase.execute() } returns true
|
||||||
givenCurrentSessionIsTrusted()
|
givenCurrentSessionIsTrusted()
|
||||||
@ -113,9 +124,10 @@ class SessionOverviewViewModelTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `given current session cannot be verified when handling verify current session action then reset secrets event is posted`() {
|
fun `given current session cannot be verified when handling verify current session action then reset secrets event is posted`() {
|
||||||
// Given
|
// Given
|
||||||
|
givenVerificationService()
|
||||||
val deviceFullInfo = mockk<DeviceFullInfo>()
|
val deviceFullInfo = mockk<DeviceFullInfo>()
|
||||||
|
every { deviceFullInfo.isCurrentDevice } returns true
|
||||||
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
||||||
every { isCurrentSessionUseCase.execute(any()) } returns true
|
|
||||||
val verifySessionAction = SessionOverviewAction.VerifySession
|
val verifySessionAction = SessionOverviewAction.VerifySession
|
||||||
coEvery { checkIfCurrentSessionCanBeVerifiedUseCase.execute() } returns false
|
coEvery { checkIfCurrentSessionCanBeVerifiedUseCase.execute() } returns false
|
||||||
givenCurrentSessionIsTrusted()
|
givenCurrentSessionIsTrusted()
|
||||||
@ -137,9 +149,10 @@ class SessionOverviewViewModelTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `given another session when handling verify session action then verify session event is posted`() {
|
fun `given another session when handling verify session action then verify session event is posted`() {
|
||||||
// Given
|
// Given
|
||||||
|
givenVerificationService()
|
||||||
val deviceFullInfo = mockk<DeviceFullInfo>()
|
val deviceFullInfo = mockk<DeviceFullInfo>()
|
||||||
|
every { deviceFullInfo.isCurrentDevice } returns false
|
||||||
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
every { getDeviceFullInfoUseCase.execute(A_SESSION_ID_1) } returns flowOf(deviceFullInfo)
|
||||||
every { isCurrentSessionUseCase.execute(any()) } returns false
|
|
||||||
val verifySessionAction = SessionOverviewAction.VerifySession
|
val verifySessionAction = SessionOverviewAction.VerifySession
|
||||||
givenCurrentSessionIsTrusted()
|
givenCurrentSessionIsTrusted()
|
||||||
|
|
||||||
@ -154,6 +167,16 @@ class SessionOverviewViewModelTest {
|
|||||||
.finish()
|
.finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun givenVerificationService(): FakeVerificationService {
|
||||||
|
val fakeVerificationService = fakeActiveSessionHolder
|
||||||
|
.fakeSession
|
||||||
|
.fakeCryptoService
|
||||||
|
.fakeVerificationService
|
||||||
|
fakeVerificationService.givenAddListenerSucceeds()
|
||||||
|
fakeVerificationService.givenRemoveListenerSucceeds()
|
||||||
|
return fakeVerificationService
|
||||||
|
}
|
||||||
|
|
||||||
private fun givenCurrentSessionIsTrusted() {
|
private fun givenCurrentSessionIsTrusted() {
|
||||||
fakeActiveSessionHolder.fakeSession.givenSessionId(A_SESSION_ID_2)
|
fakeActiveSessionHolder.fakeSession.givenSessionId(A_SESSION_ID_2)
|
||||||
val deviceFullInfo = mockk<DeviceFullInfo>()
|
val deviceFullInfo = mockk<DeviceFullInfo>()
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* 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.features.auth.PendingAuthHandler
|
||||||
|
import io.mockk.mockk
|
||||||
|
|
||||||
|
class FakePendingAuthHandler {
|
||||||
|
|
||||||
|
val instance = mockk<PendingAuthHandler>()
|
||||||
|
}
|
@ -16,7 +16,19 @@
|
|||||||
|
|
||||||
package im.vector.app.test.fakes
|
package im.vector.app.test.fakes
|
||||||
|
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.just
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
|
import io.mockk.runs
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
|
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
|
||||||
|
|
||||||
class FakeVerificationService : VerificationService by mockk()
|
class FakeVerificationService : VerificationService by mockk() {
|
||||||
|
|
||||||
|
fun givenAddListenerSucceeds() {
|
||||||
|
every { addListener(any()) } just runs
|
||||||
|
}
|
||||||
|
|
||||||
|
fun givenRemoveListenerSucceeds() {
|
||||||
|
every { removeListener(any()) } just runs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user