Fix and add test

This commit is contained in:
Benoit Marty
2025-11-19 17:30:34 +01:00
parent e0c829d887
commit b976d9deac
3 changed files with 27 additions and 8 deletions

View File

@@ -25,6 +25,7 @@ class WorkerDataConverter(
private val json: JsonProvider,
) {
fun serialize(notificationEventRequests: List<NotificationEventRequest>): List<Result<Data>> {
// First try to serialize all requests at once. In the vast majority of cases this will work.
return serializeRequests(notificationEventRequests)
.fold(
onSuccess = {
@@ -69,7 +70,7 @@ class WorkerDataConverter(
companion object {
private const val REQUESTS_KEY = "requests"
private const val CHUNK_SIZE = 20
internal const val CHUNK_SIZE = 20
}
}

View File

@@ -21,6 +21,7 @@ import io.element.android.libraries.workmanager.api.workManagerTag
import io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider
import kotlinx.coroutines.test.runTest
import org.junit.Test
import kotlin.collections.first
class SyncNotificationWorkManagerRequestTest {
@Test
@@ -32,8 +33,8 @@ class SyncNotificationWorkManagerRequestTest {
)
val result = request.build()
assertThat(result.isSuccess).isTrue()
result.getOrNull()!!.run {
assertThat(result.first().isSuccess).isTrue()
result.first().getOrNull()!!.run {
assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java)
assertThat(workSpec.input.hasKeyWithValueOfType<String>("requests")).isTrue()
// True in API 33+
@@ -51,8 +52,8 @@ class SyncNotificationWorkManagerRequestTest {
)
val result = request.build()
assertThat(result.isSuccess).isTrue()
result.getOrNull()!!.run {
assertThat(result.first().isSuccess).isTrue()
result.first().getOrNull()!!.run {
assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java)
assertThat(workSpec.input.hasKeyWithValueOfType<String>("requests")).isTrue()
// False before API 33
@@ -69,7 +70,7 @@ class SyncNotificationWorkManagerRequestTest {
)
val result = request.build()
assertThat(result.isFailure).isTrue()
assertThat(result.first().isFailure).isTrue()
}
@Test
@@ -80,7 +81,7 @@ class SyncNotificationWorkManagerRequestTest {
workerDataConverter = WorkerDataConverter({ error("error during serialization") })
)
val result = request.build()
assertThat(result.isFailure).isTrue()
assertThat(result.first().isFailure).isTrue()
}
}

View File

@@ -10,6 +10,7 @@ package io.element.android.libraries.push.impl.workmanager
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.androidutils.json.DefaultJsonProvider
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.test.AN_EVENT_ID
import io.element.android.libraries.matrix.test.AN_EVENT_ID_2
import io.element.android.libraries.matrix.test.A_ROOM_ID
@@ -45,9 +46,25 @@ class WorkerDataConverterTest {
)
}
@Test
fun `serializing lots of data leads to several work data generated`() {
val data = List(100) {
NotificationEventRequest(
sessionId = A_SESSION_ID,
roomId = A_ROOM_ID,
eventId = EventId(AN_EVENT_ID.value + it),
providerInfo = "info$it",
)
}
val sut = WorkerDataConverter(DefaultJsonProvider())
val serialized = sut.serialize(data)
assertThat(serialized.size).isGreaterThan(1)
assertThat(serialized.size).isEqualTo(100 / WorkerDataConverter.CHUNK_SIZE)
}
private fun testIdentity(data: List<NotificationEventRequest>) {
val sut = WorkerDataConverter(DefaultJsonProvider())
val serialized = sut.serialize(data).getOrThrow()
val serialized = sut.serialize(data).first().getOrThrow()
val result = sut.deserialize(serialized)
assertThat(result).isEqualTo(data)
}