Fix tests.

This commit is contained in:
Benoit Marty
2023-12-12 16:47:31 +01:00
parent 96fac67b58
commit 47f0aba3be
5 changed files with 69 additions and 54 deletions

View File

@@ -31,12 +31,15 @@ import io.element.android.libraries.push.impl.notifications.fixtures.aSimpleNoti
import io.element.android.libraries.push.impl.notifications.fixtures.anInviteNotifiableEvent
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
private val MY_AVATAR_URL: String? = null
private val AN_INVITATION_EVENT = anInviteNotifiableEvent(roomId = A_ROOM_ID)
private val A_SIMPLE_EVENT = aSimpleNotifiableEvent(eventId = AN_EVENT_ID)
private val A_MESSAGE_EVENT = aNotifiableMessageEvent(eventId = AN_EVENT_ID, roomId = A_ROOM_ID)
@RunWith(RobolectricTestRunner::class)
class NotificationFactoryTest {
private val androidNotificationFactory = FakeAndroidNotificationFactory()
@@ -131,12 +134,14 @@ class NotificationFactoryTest {
)
val roomWithMessage = mapOf(A_ROOM_ID to listOf(ProcessedEvent(ProcessedEvent.Type.KEEP, A_MESSAGE_EVENT)))
val fakeImageLoader = FakeImageLoader()
val result = roomWithMessage.toNotifications(
currentUser = MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
assertThat(result).isEqualTo(listOf(expectedNotification))
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
@Test
@@ -144,9 +149,10 @@ class NotificationFactoryTest {
val events = listOf(ProcessedEvent(ProcessedEvent.Type.REMOVE, A_MESSAGE_EVENT))
val emptyRoom = mapOf(A_ROOM_ID to events)
val fakeImageLoader = FakeImageLoader()
val result = emptyRoom.toNotifications(
currentUser = MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
assertThat(result).isEqualTo(
@@ -156,15 +162,17 @@ class NotificationFactoryTest {
)
)
)
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
@Test
fun `given a room with only redacted events when mapping to notification then is Empty`() = testWith(notificationFactory) {
val redactedRoom = mapOf(A_ROOM_ID to listOf(ProcessedEvent(ProcessedEvent.Type.KEEP, A_MESSAGE_EVENT.copy(isRedacted = true))))
val fakeImageLoader = FakeImageLoader()
val result = redactedRoom.toNotifications(
currentUser = MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
assertThat(result).isEqualTo(
@@ -174,6 +182,7 @@ class NotificationFactoryTest {
)
)
)
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
@Test
@@ -193,12 +202,14 @@ class NotificationFactoryTest {
A_ROOM_ID,
)
val fakeImageLoader = FakeImageLoader()
val result = roomWithRedactedMessage.toNotifications(
currentUser = MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
assertThat(result).isEqualTo(listOf(expectedNotification))
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
}

View File

@@ -28,6 +28,8 @@ import io.element.android.libraries.push.impl.notifications.model.NotifiableEven
import io.mockk.mockk
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
private const val MY_USER_DISPLAY_NAME = "display-name"
private const val MY_USER_AVATAR_URL = "avatar-url"
@@ -43,6 +45,7 @@ private val MESSAGE_META = RoomNotification.Message.Meta(
)
private val ONE_SHOT_META = OneShotNotification.Append.Meta(key = "ignored", summaryLine = "ignored", isNoisy = false, timestamp = -1)
@RunWith(RobolectricTestRunner::class)
class NotificationRendererTest {
private val notificationDisplayer = FakeNotificationDisplayer()
@@ -199,7 +202,7 @@ class NotificationRendererTest {
MatrixUser(A_SESSION_ID, MY_USER_DISPLAY_NAME, MY_USER_AVATAR_URL),
useCompleteNotificationFormat = USE_COMPLETE_NOTIFICATION_FORMAT,
eventsToProcess = AN_EVENT_LIST,
imageLoader = FakeImageLoader(),
imageLoader = FakeImageLoader().getImageLoader(),
)
}

View File

@@ -17,13 +17,8 @@
package io.element.android.libraries.push.impl.notifications
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Build
import coil.Coil
import coil.ImageLoader
import coil.annotation.ExperimentalCoilApi
import coil.test.FakeImageLoaderEngine
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.media.MediaSource
import io.element.android.libraries.matrix.test.A_ROOM_ID
@@ -51,6 +46,7 @@ class RoomGroupMessageCreatorTest {
@Test
fun `test createRoomMessage with one Event`() = runTest {
val sut = createRoomGroupMessageCreator()
val fakeImageLoader = FakeImageLoader()
val result = sut.createRoomMessage(
currentUser = aMatrixUser(),
events = listOf(
@@ -59,7 +55,7 @@ class RoomGroupMessageCreatorTest {
)
),
roomId = A_ROOM_ID,
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
val resultMetaWithoutFormatting = result.meta.copy(
summaryLine = result.meta.summaryLine.toString()
@@ -73,11 +69,13 @@ class RoomGroupMessageCreatorTest {
shouldBing = false,
)
)
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
@Test
fun `test createRoomMessage with one noisy Event`() = runTest {
val sut = createRoomGroupMessageCreator()
val fakeImageLoader = FakeImageLoader()
val result = sut.createRoomMessage(
currentUser = aMatrixUser(),
events = listOf(
@@ -86,7 +84,7 @@ class RoomGroupMessageCreatorTest {
)
),
roomId = A_ROOM_ID,
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
val resultMetaWithoutFormatting = result.meta.copy(
summaryLine = result.meta.summaryLine.toString()
@@ -100,6 +98,7 @@ class RoomGroupMessageCreatorTest {
shouldBing = true,
)
)
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
@Test
@@ -144,20 +143,7 @@ class RoomGroupMessageCreatorTest {
api: Int,
expectedCoilRequests: List<Any>,
) = runTest {
val coilRequests = mutableListOf<Any>()
val engine = FakeImageLoaderEngine.Builder()
.intercept(
predicate = {
coilRequests.add(it)
true
},
drawable = ColorDrawable(Color.BLUE)
)
.build()
val imageLoader = ImageLoader.Builder(RuntimeEnvironment.getApplication())
.components { add(engine) }
.build()
Coil.setImageLoader(imageLoader)
val fakeImageLoader = FakeImageLoader()
val sut = createRoomGroupMessageCreator(
sdkIntProvider = FakeBuildVersionSdkIntProvider(api)
)
@@ -173,7 +159,7 @@ class RoomGroupMessageCreatorTest {
)
),
roomId = A_ROOM_ID,
imageLoader = imageLoader,
imageLoader = fakeImageLoader.getImageLoader(),
)
val resultMetaWithoutFormatting = result.meta.copy(
summaryLine = result.meta.summaryLine.toString()
@@ -187,12 +173,13 @@ class RoomGroupMessageCreatorTest {
shouldBing = false,
)
)
assertThat(coilRequests.toList()).isEqualTo(expectedCoilRequests)
assertThat(fakeImageLoader.getCoilRequests()).isEqualTo(expectedCoilRequests)
}
@Test
fun `test createRoomMessage with two Events`() = runTest {
val sut = createRoomGroupMessageCreator()
val fakeImageLoader = FakeImageLoader()
val result = sut.createRoomMessage(
currentUser = aMatrixUser(),
events = listOf(
@@ -200,7 +187,7 @@ class RoomGroupMessageCreatorTest {
aNotifiableMessageEvent(timestamp = A_TIMESTAMP + 10),
),
roomId = A_ROOM_ID,
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
val resultMetaWithoutFormatting = result.meta.copy(
summaryLine = result.meta.summaryLine.toString()
@@ -214,11 +201,13 @@ class RoomGroupMessageCreatorTest {
shouldBing = false,
)
)
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
@Test
fun `test createRoomMessage with smart reply error`() = runTest {
val sut = createRoomGroupMessageCreator()
val fakeImageLoader = FakeImageLoader()
val result = sut.createRoomMessage(
currentUser = aMatrixUser(),
events = listOf(
@@ -228,7 +217,7 @@ class RoomGroupMessageCreatorTest {
),
),
roomId = A_ROOM_ID,
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
val resultMetaWithoutFormatting = result.meta.copy(
summaryLine = result.meta.summaryLine.toString()
@@ -242,11 +231,13 @@ class RoomGroupMessageCreatorTest {
shouldBing = false,
)
)
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
@Test
fun `test createRoomMessage for direct room`() = runTest {
val sut = createRoomGroupMessageCreator()
val fakeImageLoader = FakeImageLoader()
val result = sut.createRoomMessage(
currentUser = aMatrixUser(),
events = listOf(
@@ -255,7 +246,7 @@ class RoomGroupMessageCreatorTest {
),
),
roomId = A_ROOM_ID,
imageLoader = FakeImageLoader(),
imageLoader = fakeImageLoader.getImageLoader(),
)
val resultMetaWithoutFormatting = result.meta.copy(
summaryLine = result.meta.summaryLine.toString()
@@ -269,6 +260,7 @@ class RoomGroupMessageCreatorTest {
shouldBing = false,
)
)
assertThat(fakeImageLoader.getCoilRequests().size).isEqualTo(0)
}
}

View File

@@ -16,32 +16,40 @@
package io.element.android.libraries.push.impl.notifications.fake
import coil.ComponentRegistry
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import coil.ImageLoader
import coil.disk.DiskCache
import coil.memory.MemoryCache
import coil.request.DefaultRequestOptions
import coil.request.Disposable
import coil.request.ImageRequest
import coil.request.ImageResult
import coil.annotation.ExperimentalCoilApi
import coil.test.FakeImageLoaderEngine
import org.robolectric.RuntimeEnvironment
class FakeImageLoader : ImageLoader {
override val components: ComponentRegistry = error("Fake class")
override val defaults: DefaultRequestOptions = error("Fake class")
override val diskCache: DiskCache? = null
override val memoryCache: MemoryCache? = null
@OptIn(ExperimentalCoilApi::class)
class FakeImageLoader {
private val coilRequests = mutableListOf<Any>()
override fun enqueue(request: ImageRequest): Disposable {
error("Fake class")
private var cache: ImageLoader? = null
fun getImageLoader(): ImageLoader {
return cache ?: ImageLoader.Builder(RuntimeEnvironment.getApplication())
.components {
val engine = FakeImageLoaderEngine.Builder()
.intercept(
predicate = {
coilRequests.add(it)
true
},
drawable = ColorDrawable(Color.BLUE)
)
.build()
add(engine)
}
.build()
.also {
cache = it
}
}
override suspend fun execute(request: ImageRequest): ImageResult {
error("Fake class")
fun getCoilRequests(): List<Any> {
return coilRequests.toList()
}
override fun newBuilder(): ImageLoader.Builder {
error("Fake class")
}
override fun shutdown() = Unit
}

View File

@@ -21,7 +21,8 @@ import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder
class FakeImageLoaderHolder : ImageLoaderHolder {
private val fakeImageLoader = FakeImageLoader()
override fun get(client: MatrixClient): ImageLoader {
return FakeImageLoader()
return fakeImageLoader.getImageLoader()
}
}