Unit test for send live location task

This commit is contained in:
Maxime NATUREL 2022-06-14 11:04:57 +02:00
parent 1ecc42c903
commit 879cafc8d1
3 changed files with 110 additions and 1 deletions

View File

@ -32,7 +32,6 @@ internal interface SendLiveLocationTask : Task<SendLiveLocationTask.Params, Canc
)
}
// TODO add unit tests
internal class DefaultSendLiveLocationTask @Inject constructor(
private val localEchoEventFactory: LocalEchoEventFactory,
private val eventSenderProcessor: EventSenderProcessor,

View File

@ -0,0 +1,74 @@
/*
* Copyright (c) 2022 The Matrix.org Foundation C.I.C.
*
* 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 org.matrix.android.sdk.internal.session.room.location
import io.mockk.unmockkAll
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.After
import org.junit.Test
import org.matrix.android.sdk.test.fakes.FakeEventSenderProcessor
import org.matrix.android.sdk.test.fakes.FakeLocalEchoEventFactory
private const val A_ROOM_ID = "room_id"
private const val AN_EVENT_ID = "event_id"
private const val A_LATITUDE = 1.4
private const val A_LONGITUDE = 44.0
private const val AN_UNCERTAINTY = 5.0
@ExperimentalCoroutinesApi
internal class DefaultSendLiveLocationTaskTest {
private val fakeLocalEchoEventFactory = FakeLocalEchoEventFactory()
private val fakeEventSenderProcessor = FakeEventSenderProcessor()
private val defaultSendLiveLocationTask = DefaultSendLiveLocationTask(
localEchoEventFactory = fakeLocalEchoEventFactory.instance,
eventSenderProcessor = fakeEventSenderProcessor
)
@After
fun tearDown() {
unmockkAll()
}
@Test
fun `given parameters when calling the task then it is correctly executed`() = runTest {
val params = SendLiveLocationTask.Params(
roomId = A_ROOM_ID,
beaconInfoEventId = AN_EVENT_ID,
latitude = A_LATITUDE,
longitude = A_LONGITUDE,
uncertainty = AN_UNCERTAINTY
)
val event = fakeLocalEchoEventFactory.givenCreateLiveLocationEvent(
withLocalEcho = true
)
defaultSendLiveLocationTask.execute(params)
fakeLocalEchoEventFactory.verifyCreateLiveLocationEvent(
roomId = params.roomId,
beaconInfoEventId = params.beaconInfoEventId,
latitude = params.latitude,
longitude = params.longitude,
uncertainty = params.uncertainty
)
fakeLocalEchoEventFactory.verifyCreateLocalEcho(event)
}
}

View File

@ -46,6 +46,24 @@ internal class FakeLocalEchoEventFactory {
return event
}
fun givenCreateLiveLocationEvent(withLocalEcho: Boolean): Event {
val event = Event()
every {
instance.createLiveLocationEvent(
beaconInfoEventId = any(),
roomId = any(),
latitude = any(),
longitude = any(),
uncertainty = any()
)
} returns event
if (withLocalEcho) {
every { instance.createLocalEcho(event) } just runs
}
return event
}
fun verifyCreateLocationEvent(
roomId: String,
latitude: Double,
@ -64,6 +82,24 @@ internal class FakeLocalEchoEventFactory {
}
}
fun verifyCreateLiveLocationEvent(
roomId: String,
beaconInfoEventId: String,
latitude: Double,
longitude: Double,
uncertainty: Double?
) {
verify {
instance.createLiveLocationEvent(
roomId = roomId,
beaconInfoEventId = beaconInfoEventId,
latitude = latitude,
longitude = longitude,
uncertainty = uncertainty
)
}
}
fun verifyCreateLocalEcho(event: Event) {
verify { instance.createLocalEcho(event) }
}