Adding tests to cover errors thrown during start/stop process
This commit is contained in:
parent
3e05431e6f
commit
e1fc6fa727
@ -33,7 +33,6 @@ internal interface StartLiveLocationShareTask : Task<StartLiveLocationShareTask.
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO update unit test
|
|
||||||
internal class DefaultStartLiveLocationShareTask @Inject constructor(
|
internal class DefaultStartLiveLocationShareTask @Inject constructor(
|
||||||
@UserId private val userId: String,
|
@UserId private val userId: String,
|
||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
|
@ -36,7 +36,6 @@ internal interface StopLiveLocationShareTask : Task<StopLiveLocationShareTask.Pa
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO update unit tests
|
|
||||||
internal class DefaultStopLiveLocationShareTask @Inject constructor(
|
internal class DefaultStopLiveLocationShareTask @Inject constructor(
|
||||||
@UserId private val userId: String,
|
@UserId private val userId: String,
|
||||||
private val sendStateTask: SendStateTask,
|
private val sendStateTask: SendStateTask,
|
||||||
|
@ -20,6 +20,7 @@ import io.mockk.unmockkAll
|
|||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.amshove.kluent.shouldBeEqualTo
|
import org.amshove.kluent.shouldBeEqualTo
|
||||||
|
import org.amshove.kluent.shouldBeInstanceOf
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
@ -54,7 +55,7 @@ internal class DefaultStartLiveLocationShareTaskTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `given parameters an no error when calling the task then it is correctly executed`() = runTest {
|
fun `given parameters and no error when calling the task then result is success`() = runTest {
|
||||||
val params = StartLiveLocationShareTask.Params(
|
val params = StartLiveLocationShareTask.Params(
|
||||||
roomId = A_ROOM_ID,
|
roomId = A_ROOM_ID,
|
||||||
timeoutMillis = A_TIMEOUT
|
timeoutMillis = A_TIMEOUT
|
||||||
@ -81,4 +82,33 @@ internal class DefaultStartLiveLocationShareTaskTest {
|
|||||||
remainingRetry = 3
|
remainingRetry = 3
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given parameters and an empty returned event id when calling the task then result is failure`() = runTest {
|
||||||
|
val params = StartLiveLocationShareTask.Params(
|
||||||
|
roomId = A_ROOM_ID,
|
||||||
|
timeoutMillis = A_TIMEOUT
|
||||||
|
)
|
||||||
|
fakeClock.givenEpoch(AN_EPOCH)
|
||||||
|
fakeSendStateTask.givenExecuteRetryReturns("")
|
||||||
|
|
||||||
|
val result = defaultStartLiveLocationShareTask.execute(params)
|
||||||
|
|
||||||
|
result shouldBeInstanceOf UpdateLiveLocationShareResult.Failure::class
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given parameters and error during event sending when calling the task then result is failure`() = runTest {
|
||||||
|
val params = StartLiveLocationShareTask.Params(
|
||||||
|
roomId = A_ROOM_ID,
|
||||||
|
timeoutMillis = A_TIMEOUT
|
||||||
|
)
|
||||||
|
fakeClock.givenEpoch(AN_EPOCH)
|
||||||
|
val error = Throwable()
|
||||||
|
fakeSendStateTask.givenExecuteRetryThrows(error)
|
||||||
|
|
||||||
|
val result = defaultStartLiveLocationShareTask.execute(params)
|
||||||
|
|
||||||
|
result shouldBeEqualTo UpdateLiveLocationShareResult.Failure(error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,12 +20,14 @@ import io.mockk.unmockkAll
|
|||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.amshove.kluent.shouldBeEqualTo
|
import org.amshove.kluent.shouldBeEqualTo
|
||||||
|
import org.amshove.kluent.shouldBeInstanceOf
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.api.session.room.location.UpdateLiveLocationShareResult
|
import org.matrix.android.sdk.api.session.room.location.UpdateLiveLocationShareResult
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.message.MessageAudioContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconInfoContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconInfoContent
|
||||||
import org.matrix.android.sdk.internal.session.room.state.SendStateTask
|
import org.matrix.android.sdk.internal.session.room.state.SendStateTask
|
||||||
import org.matrix.android.sdk.test.fakes.FakeSendStateTask
|
import org.matrix.android.sdk.test.fakes.FakeSendStateTask
|
||||||
@ -55,7 +57,7 @@ class DefaultStopLiveLocationShareTaskTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `given parameters when calling the task then it is correctly executed`() = runTest {
|
fun `given parameters and no error when calling the task then result is success`() = runTest {
|
||||||
val params = StopLiveLocationShareTask.Params(roomId = A_ROOM_ID)
|
val params = StopLiveLocationShareTask.Params(roomId = A_ROOM_ID)
|
||||||
val currentStateEvent = Event(
|
val currentStateEvent = Event(
|
||||||
stateKey = A_USER_ID,
|
stateKey = A_USER_ID,
|
||||||
@ -92,4 +94,78 @@ class DefaultStopLiveLocationShareTaskTest {
|
|||||||
stateKey = A_USER_ID
|
stateKey = A_USER_ID
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given parameters and an incorrect current state event when calling the task then result is failure`() = runTest {
|
||||||
|
val incorrectCurrentStateEvents = listOf(
|
||||||
|
// no event
|
||||||
|
null,
|
||||||
|
// no stateKey
|
||||||
|
Event(
|
||||||
|
stateKey = null,
|
||||||
|
content = MessageBeaconInfoContent(
|
||||||
|
timeout = A_TIMEOUT,
|
||||||
|
isLive = true,
|
||||||
|
unstableTimestampMillis = AN_EPOCH
|
||||||
|
).toContent()
|
||||||
|
),
|
||||||
|
// incorrect content
|
||||||
|
Event(
|
||||||
|
stateKey = A_USER_ID,
|
||||||
|
content = MessageAudioContent(
|
||||||
|
msgType = "",
|
||||||
|
body = ""
|
||||||
|
).toContent()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
incorrectCurrentStateEvents.forEach { currentStateEvent ->
|
||||||
|
fakeStateEventDataSource.givenGetStateEventReturns(currentStateEvent)
|
||||||
|
fakeSendStateTask.givenExecuteRetryReturns(AN_EVENT_ID)
|
||||||
|
val params = StopLiveLocationShareTask.Params(roomId = A_ROOM_ID)
|
||||||
|
|
||||||
|
val result = defaultStopLiveLocationShareTask.execute(params)
|
||||||
|
|
||||||
|
result shouldBeInstanceOf UpdateLiveLocationShareResult.Failure::class
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given parameters and an empty returned event id when calling the task then result is failure`() = runTest {
|
||||||
|
val params = StopLiveLocationShareTask.Params(roomId = A_ROOM_ID)
|
||||||
|
val currentStateEvent = Event(
|
||||||
|
stateKey = A_USER_ID,
|
||||||
|
content = MessageBeaconInfoContent(
|
||||||
|
timeout = A_TIMEOUT,
|
||||||
|
isLive = true,
|
||||||
|
unstableTimestampMillis = AN_EPOCH
|
||||||
|
).toContent()
|
||||||
|
)
|
||||||
|
fakeStateEventDataSource.givenGetStateEventReturns(currentStateEvent)
|
||||||
|
fakeSendStateTask.givenExecuteRetryReturns("")
|
||||||
|
|
||||||
|
val result = defaultStopLiveLocationShareTask.execute(params)
|
||||||
|
|
||||||
|
result shouldBeInstanceOf UpdateLiveLocationShareResult.Failure::class
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given parameters and error during event sending when calling the task then result is failure`() = runTest {
|
||||||
|
val params = StopLiveLocationShareTask.Params(roomId = A_ROOM_ID)
|
||||||
|
val currentStateEvent = Event(
|
||||||
|
stateKey = A_USER_ID,
|
||||||
|
content = MessageBeaconInfoContent(
|
||||||
|
timeout = A_TIMEOUT,
|
||||||
|
isLive = true,
|
||||||
|
unstableTimestampMillis = AN_EPOCH
|
||||||
|
).toContent()
|
||||||
|
)
|
||||||
|
fakeStateEventDataSource.givenGetStateEventReturns(currentStateEvent)
|
||||||
|
val error = Throwable()
|
||||||
|
fakeSendStateTask.givenExecuteRetryThrows(error)
|
||||||
|
|
||||||
|
val result = defaultStopLiveLocationShareTask.execute(params)
|
||||||
|
|
||||||
|
result shouldBeEqualTo UpdateLiveLocationShareResult.Failure(error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,10 @@ internal class FakeSendStateTask : SendStateTask by mockk() {
|
|||||||
coEvery { executeRetry(any(), any()) } returns eventId
|
coEvery { executeRetry(any(), any()) } returns eventId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun givenExecuteRetryThrows(error: Throwable) {
|
||||||
|
coEvery { executeRetry(any(), any()) } throws error
|
||||||
|
}
|
||||||
|
|
||||||
fun verifyExecuteRetry(params: SendStateTask.Params, remainingRetry: Int) {
|
fun verifyExecuteRetry(params: SendStateTask.Params, remainingRetry: Int) {
|
||||||
coVerify { executeRetry(params, remainingRetry) }
|
coVerify { executeRetry(params, remainingRetry) }
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ internal class FakeStateEventDataSource {
|
|||||||
|
|
||||||
val instance: StateEventDataSource = mockk()
|
val instance: StateEventDataSource = mockk()
|
||||||
|
|
||||||
fun givenGetStateEventReturns(event: Event) {
|
fun givenGetStateEventReturns(event: Event?) {
|
||||||
every {
|
every {
|
||||||
instance.getStateEvent(
|
instance.getStateEvent(
|
||||||
roomId = any(),
|
roomId = any(),
|
||||||
|
Loading…
Reference in New Issue
Block a user