Fix and add test
This commit is contained in:
parent
e0c829d887
commit
b976d9deac
3 changed files with 27 additions and 8 deletions
|
|
@ -25,6 +25,7 @@ class WorkerDataConverter(
|
||||||
private val json: JsonProvider,
|
private val json: JsonProvider,
|
||||||
) {
|
) {
|
||||||
fun serialize(notificationEventRequests: List<NotificationEventRequest>): List<Result<Data>> {
|
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)
|
return serializeRequests(notificationEventRequests)
|
||||||
.fold(
|
.fold(
|
||||||
onSuccess = {
|
onSuccess = {
|
||||||
|
|
@ -69,7 +70,7 @@ class WorkerDataConverter(
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val REQUESTS_KEY = "requests"
|
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 io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import kotlin.collections.first
|
||||||
|
|
||||||
class SyncNotificationWorkManagerRequestTest {
|
class SyncNotificationWorkManagerRequestTest {
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -32,8 +33,8 @@ class SyncNotificationWorkManagerRequestTest {
|
||||||
)
|
)
|
||||||
|
|
||||||
val result = request.build()
|
val result = request.build()
|
||||||
assertThat(result.isSuccess).isTrue()
|
assertThat(result.first().isSuccess).isTrue()
|
||||||
result.getOrNull()!!.run {
|
result.first().getOrNull()!!.run {
|
||||||
assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java)
|
assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java)
|
||||||
assertThat(workSpec.input.hasKeyWithValueOfType<String>("requests")).isTrue()
|
assertThat(workSpec.input.hasKeyWithValueOfType<String>("requests")).isTrue()
|
||||||
// True in API 33+
|
// True in API 33+
|
||||||
|
|
@ -51,8 +52,8 @@ class SyncNotificationWorkManagerRequestTest {
|
||||||
)
|
)
|
||||||
|
|
||||||
val result = request.build()
|
val result = request.build()
|
||||||
assertThat(result.isSuccess).isTrue()
|
assertThat(result.first().isSuccess).isTrue()
|
||||||
result.getOrNull()!!.run {
|
result.first().getOrNull()!!.run {
|
||||||
assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java)
|
assertThat(this).isInstanceOf(OneTimeWorkRequest::class.java)
|
||||||
assertThat(workSpec.input.hasKeyWithValueOfType<String>("requests")).isTrue()
|
assertThat(workSpec.input.hasKeyWithValueOfType<String>("requests")).isTrue()
|
||||||
// False before API 33
|
// False before API 33
|
||||||
|
|
@ -69,7 +70,7 @@ class SyncNotificationWorkManagerRequestTest {
|
||||||
)
|
)
|
||||||
|
|
||||||
val result = request.build()
|
val result = request.build()
|
||||||
assertThat(result.isFailure).isTrue()
|
assertThat(result.first().isFailure).isTrue()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -80,7 +81,7 @@ class SyncNotificationWorkManagerRequestTest {
|
||||||
workerDataConverter = WorkerDataConverter({ error("error during serialization") })
|
workerDataConverter = WorkerDataConverter({ error("error during serialization") })
|
||||||
)
|
)
|
||||||
val result = request.build()
|
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 com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.androidutils.json.DefaultJsonProvider
|
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
|
||||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID_2
|
import io.element.android.libraries.matrix.test.AN_EVENT_ID_2
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
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>) {
|
private fun testIdentity(data: List<NotificationEventRequest>) {
|
||||||
val sut = WorkerDataConverter(DefaultJsonProvider())
|
val sut = WorkerDataConverter(DefaultJsonProvider())
|
||||||
val serialized = sut.serialize(data).getOrThrow()
|
val serialized = sut.serialize(data).first().getOrThrow()
|
||||||
val result = sut.deserialize(serialized)
|
val result = sut.deserialize(serialized)
|
||||||
assertThat(result).isEqualTo(data)
|
assertThat(result).isEqualTo(data)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue