Fix and add test
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user