From d50b0fbb6ba51912b1dc221049c64b3c966309ee Mon Sep 17 00:00:00 2001 From: Maxime NATUREL Date: Thu, 16 Jun 2022 17:45:16 +0200 Subject: [PATCH] Adding unit tests for the stop live use case --- .../live/StopLiveLocationShareUseCaseTest.kt | 17 +++++++++- .../live/map/LocationLiveMapViewModelTest.kt | 34 ++++++++++++------- .../test/fakes/FakeLocationSharingService.kt | 6 ++++ .../FakeLocationSharingServiceConnection.kt | 12 +++++++ 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/vector/src/test/java/im/vector/app/features/location/live/StopLiveLocationShareUseCaseTest.kt b/vector/src/test/java/im/vector/app/features/location/live/StopLiveLocationShareUseCaseTest.kt index f508968cc8..9ebddc76eb 100644 --- a/vector/src/test/java/im/vector/app/features/location/live/StopLiveLocationShareUseCaseTest.kt +++ b/vector/src/test/java/im/vector/app/features/location/live/StopLiveLocationShareUseCaseTest.kt @@ -46,15 +46,30 @@ class StopLiveLocationShareUseCaseTest { @Test fun `given a room id when calling use case then the current live is stopped with success`() = runTest { fakeLocationSharingServiceConnection.givenStopLiveLocationSharing() + val updateLiveResult = UpdateLiveLocationShareResult.Success(AN_EVENT_ID) + fakeSession.roomService() + .getRoom(A_ROOM_ID) + .locationSharingService() + .givenStopLiveLocationShareReturns(updateLiveResult) val result = stopLiveLocationShareUseCase.execute(A_ROOM_ID) - result shouldBeEqualTo UpdateLiveLocationShareResult.Success(AN_EVENT_ID) + result shouldBeEqualTo updateLiveResult fakeLocationSharingServiceConnection.verifyStopLiveLocationSharing(A_ROOM_ID) } @Test fun `given a room id and error during the process when calling use case then result is failure`() = runTest { + val error = Throwable() + val updateLiveResult = UpdateLiveLocationShareResult.Failure(error) + fakeSession.roomService() + .getRoom(A_ROOM_ID) + .locationSharingService() + .givenStopLiveLocationShareReturns(updateLiveResult) + val result = stopLiveLocationShareUseCase.execute(A_ROOM_ID) + + result shouldBeEqualTo updateLiveResult + fakeLocationSharingServiceConnection.verifyStopLiveLocationSharingNotCalled(A_ROOM_ID) } } diff --git a/vector/src/test/java/im/vector/app/features/location/live/map/LocationLiveMapViewModelTest.kt b/vector/src/test/java/im/vector/app/features/location/live/map/LocationLiveMapViewModelTest.kt index b477265506..dd1a894a28 100644 --- a/vector/src/test/java/im/vector/app/features/location/live/map/LocationLiveMapViewModelTest.kt +++ b/vector/src/test/java/im/vector/app/features/location/live/map/LocationLiveMapViewModelTest.kt @@ -18,39 +18,47 @@ package im.vector.app.features.location.live.map import com.airbnb.mvrx.test.MvRxTestRule import im.vector.app.features.location.LocationData -import im.vector.app.features.location.LocationSharingServiceConnection +import im.vector.app.features.location.live.StopLiveLocationShareUseCase +import im.vector.app.test.fakes.FakeLocationSharingServiceConnection import im.vector.app.test.test import io.mockk.every -import io.mockk.just import io.mockk.mockk -import io.mockk.runs -import io.mockk.verify +import io.mockk.unmockkAll import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest +import org.junit.After import org.junit.Rule import org.junit.Test import org.matrix.android.sdk.api.util.MatrixItem +private const val A_ROOM_ID = "room_id" + class LocationLiveMapViewModelTest { @get:Rule - val mvrxTestRule = MvRxTestRule() + val mvRxTestRule = MvRxTestRule(testDispatcher = UnconfinedTestDispatcher()) - private val fakeRoomId = "" - - private val args = LocationLiveMapViewArgs(roomId = fakeRoomId) + private val args = LocationLiveMapViewArgs(roomId = A_ROOM_ID) private val getListOfUserLiveLocationUseCase = mockk() - private val locationServiceConnection = mockk() + private val locationServiceConnection = FakeLocationSharingServiceConnection() + private val stopLiveLocationShareUseCase = mockk() private fun createViewModel(): LocationLiveMapViewModel { return LocationLiveMapViewModel( LocationLiveMapViewState(args), getListOfUserLiveLocationUseCase, - locationServiceConnection + locationServiceConnection.instance, + stopLiveLocationShareUseCase ) } + @After + fun tearDown() { + unmockkAll() + } + @Test fun `given the viewModel has been initialized then viewState contains user locations list`() = runTest { val userLocations = listOf( @@ -63,8 +71,8 @@ class LocationLiveMapViewModelTest { showStopSharingButton = false ) ) - every { locationServiceConnection.bind(any()) } just runs - every { getListOfUserLiveLocationUseCase.execute(fakeRoomId) } returns flowOf(userLocations) + locationServiceConnection.givenBind() + every { getListOfUserLiveLocationUseCase.execute(A_ROOM_ID) } returns flowOf(userLocations) val viewModel = createViewModel() viewModel @@ -76,6 +84,6 @@ class LocationLiveMapViewModelTest { ) .finish() - verify { locationServiceConnection.bind(viewModel) } + locationServiceConnection.verifyBind(viewModel) } } diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingService.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingService.kt index 2cd98c086c..0c105a588a 100644 --- a/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingService.kt +++ b/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingService.kt @@ -18,9 +18,11 @@ package im.vector.app.test.fakes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import io.mockk.coEvery import io.mockk.every import io.mockk.mockk import org.matrix.android.sdk.api.session.room.location.LocationSharingService +import org.matrix.android.sdk.api.session.room.location.UpdateLiveLocationShareResult import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationShareAggregatedSummary class FakeLocationSharingService : LocationSharingService by mockk() { @@ -31,4 +33,8 @@ class FakeLocationSharingService : LocationSharingService by mockk() { every { getRunningLiveLocationShareSummaries() } returns it } } + + fun givenStopLiveLocationShareReturns(result: UpdateLiveLocationShareResult) { + coEvery { stopLiveLocationShare() } returns result + } } diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt index 2a152e44fe..d0d148a9e2 100644 --- a/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt +++ b/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt @@ -27,6 +27,14 @@ class FakeLocationSharingServiceConnection { val instance = mockk() + fun givenBind() { + every { instance.bind(any()) } just runs + } + + fun verifyBind(callback: LocationSharingServiceConnection.Callback) { + verify { instance.bind(callback) } + } + fun givenStopLiveLocationSharing() { every { instance.stopLiveLocationSharing(any()) } just runs } @@ -34,4 +42,8 @@ class FakeLocationSharingServiceConnection { fun verifyStopLiveLocationSharing(roomId: String) { verify { instance.stopLiveLocationSharing(roomId) } } + + fun verifyStopLiveLocationSharingNotCalled(roomId: String) { + verify(inverse = true) { instance.stopLiveLocationSharing(roomId) } + } }