Unit test for send static location task

This commit is contained in:
Maxime NATUREL 2022-06-13 17:40:35 +02:00
parent f981900cf3
commit 1ecc42c903
4 changed files with 170 additions and 1 deletions

View File

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

View File

@ -0,0 +1,73 @@
/*
* 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 A_LATITUDE = 1.4
private const val A_LONGITUDE = 44.0
private const val AN_UNCERTAINTY = 5.0
@ExperimentalCoroutinesApi
internal class DefaultSendStaticLocationTaskTest {
private val fakeLocalEchoEventFactory = FakeLocalEchoEventFactory()
private val fakeEventSenderProcessor = FakeEventSenderProcessor()
private val defaultSendStaticLocationTask = DefaultSendStaticLocationTask(
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 = SendStaticLocationTask.Params(
roomId = A_ROOM_ID,
latitude = A_LATITUDE,
longitude = A_LONGITUDE,
uncertainty = AN_UNCERTAINTY,
isUserLocation = true
)
val event = fakeLocalEchoEventFactory.givenCreateLocationEvent(
withLocalEcho = true
)
defaultSendStaticLocationTask.execute(params)
fakeLocalEchoEventFactory.verifyCreateLocationEvent(
roomId = params.roomId,
latitude = params.latitude,
longitude = params.longitude,
uncertainty = params.uncertainty,
isUserLocation = params.isUserLocation
)
fakeLocalEchoEventFactory.verifyCreateLocalEcho(event)
}
}

View File

@ -0,0 +1,27 @@
/*
* 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.test.fakes
import io.mockk.mockk
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.util.Cancelable
import org.matrix.android.sdk.internal.session.room.send.queue.EventSenderProcessor
internal class FakeEventSenderProcessor : EventSenderProcessor by mockk() {
override fun postEvent(event: Event): Cancelable = mockk()
}

View File

@ -0,0 +1,70 @@
/*
* 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.test.fakes
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.runs
import io.mockk.verify
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory
internal class FakeLocalEchoEventFactory {
val instance = mockk<LocalEchoEventFactory>()
fun givenCreateLocationEvent(withLocalEcho: Boolean): Event {
val event = Event()
every {
instance.createLocationEvent(
roomId = any(),
latitude = any(),
longitude = any(),
uncertainty = any(),
isUserLocation = any()
)
} returns event
if (withLocalEcho) {
every { instance.createLocalEcho(event) } just runs
}
return event
}
fun verifyCreateLocationEvent(
roomId: String,
latitude: Double,
longitude: Double,
uncertainty: Double?,
isUserLocation: Boolean
) {
verify {
instance.createLocationEvent(
roomId = roomId,
latitude = latitude,
longitude = longitude,
uncertainty = uncertainty,
isUserLocation = isUserLocation
)
}
}
fun verifyCreateLocalEcho(event: Event) {
verify { instance.createLocalEcho(event) }
}
}