creating an injectable request executor to enable unit tests network request (without hitting the network)
This commit is contained in:
parent
6672ab3966
commit
0a2d7d709b
|
@ -23,7 +23,6 @@ import org.matrix.android.sdk.internal.database.model.PusherEntity
|
|||
import org.matrix.android.sdk.internal.database.query.where
|
||||
import org.matrix.android.sdk.internal.di.SessionDatabase
|
||||
import org.matrix.android.sdk.internal.network.GlobalErrorReceiver
|
||||
import org.matrix.android.sdk.internal.network.executeRequest
|
||||
import org.matrix.android.sdk.internal.task.Task
|
||||
import org.matrix.android.sdk.internal.util.awaitTransaction
|
||||
import javax.inject.Inject
|
||||
|
@ -35,6 +34,7 @@ internal interface AddPusherTask : Task<AddPusherTask.Params, Unit> {
|
|||
internal class DefaultAddPusherTask @Inject constructor(
|
||||
private val pushersAPI: PushersAPI,
|
||||
@SessionDatabase private val monarchy: Monarchy,
|
||||
private val requestExecutor: RequestExecutor,
|
||||
private val globalErrorReceiver: GlobalErrorReceiver
|
||||
) : AddPusherTask {
|
||||
override suspend fun execute(params: AddPusherTask.Params) {
|
||||
|
@ -52,7 +52,7 @@ internal class DefaultAddPusherTask @Inject constructor(
|
|||
}
|
||||
|
||||
private suspend fun setPusher(pusher: JsonPusher) {
|
||||
executeRequest(globalErrorReceiver) {
|
||||
requestExecutor.executeRequest(globalErrorReceiver) {
|
||||
pushersAPI.setPusher(pusher)
|
||||
}
|
||||
monarchy.awaitTransaction { realm ->
|
||||
|
@ -75,3 +75,17 @@ internal class DefaultAddPusherTask @Inject constructor(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal interface RequestExecutor {
|
||||
suspend fun <DATA> executeRequest(globalErrorReceiver: GlobalErrorReceiver?,
|
||||
canRetry: Boolean = false,
|
||||
maxDelayBeforeRetry: Long = 32_000L,
|
||||
maxRetriesCount: Int = 4,
|
||||
requestBlock: suspend () -> DATA): DATA
|
||||
}
|
||||
|
||||
internal object DefaultRequestExecutor : RequestExecutor {
|
||||
override suspend fun <DATA> executeRequest(globalErrorReceiver: GlobalErrorReceiver?, canRetry: Boolean, maxDelayBeforeRetry: Long, maxRetriesCount: Int, requestBlock: suspend () -> DATA): DATA {
|
||||
return executeRequest(globalErrorReceiver, canRetry, maxDelayBeforeRetry, maxRetriesCount, requestBlock)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ import org.matrix.android.sdk.internal.session.pushers.gateway.PushGatewayNotify
|
|||
import org.matrix.android.sdk.internal.session.room.notification.DefaultSetRoomNotificationStateTask
|
||||
import org.matrix.android.sdk.internal.session.room.notification.SetRoomNotificationStateTask
|
||||
import retrofit2.Retrofit
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
internal abstract class PushersModule {
|
||||
|
@ -48,6 +49,12 @@ internal abstract class PushersModule {
|
|||
fun providesPushRulesApi(retrofit: Retrofit): PushRulesApi {
|
||||
return retrofit.create(PushRulesApi::class.java)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesRequestExecutor(): RequestExecutor {
|
||||
return DefaultRequestExecutor
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
|
|
Loading…
Reference in New Issue