mirror of
https://github.com/bitfireAT/davx5-ose
synced 2024-07-22 03:01:24 +00:00
RefreshCollectionsWorkerTest: wait for completion of enqueue (bitfireAT/davx5#486)
* RefreshCollectionsWorkerTest: wait for completion of enqueue * Work may have finished already
This commit is contained in:
parent
787e1a687f
commit
1854822757
|
@ -11,9 +11,10 @@ import androidx.hilt.work.HiltWorkerFactory
|
|||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.work.Configuration
|
||||
import androidx.work.WorkManager
|
||||
import androidx.work.await
|
||||
import androidx.work.testing.WorkManagerTestInitHelper
|
||||
import at.bitfire.davdroid.network.HttpClient
|
||||
import at.bitfire.davdroid.TestUtils.workScheduledOrRunning
|
||||
import at.bitfire.davdroid.TestUtils.workScheduledOrRunningOrSuccessful
|
||||
import at.bitfire.davdroid.db.AppDatabase
|
||||
import at.bitfire.davdroid.db.Collection
|
||||
import at.bitfire.davdroid.db.Credentials
|
||||
|
@ -21,6 +22,7 @@ import at.bitfire.davdroid.db.HomeSet
|
|||
import at.bitfire.davdroid.db.Principal
|
||||
import at.bitfire.davdroid.db.Service
|
||||
import at.bitfire.davdroid.log.Logger
|
||||
import at.bitfire.davdroid.network.HttpClient
|
||||
import at.bitfire.davdroid.settings.Settings
|
||||
import at.bitfire.davdroid.settings.SettingsManager
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
|
@ -29,6 +31,7 @@ import dagger.hilt.android.testing.HiltAndroidRule
|
|||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import okhttp3.mockwebserver.Dispatcher
|
||||
import okhttp3.mockwebserver.MockResponse
|
||||
import okhttp3.mockwebserver.MockWebServer
|
||||
|
@ -128,18 +131,10 @@ class RefreshCollectionsWorkerTest {
|
|||
@Test
|
||||
fun testRefreshCollections_enqueuesWorker() {
|
||||
val service = createTestService(Service.TYPE_CALDAV)!!
|
||||
val workerName = RefreshCollectionsWorker.enqueue(context, service.id)
|
||||
assertTrue(workScheduledOrRunning(context, workerName))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOnStopped_stopsRefreshThread() {
|
||||
val service = createTestService(Service.TYPE_CALDAV)!!
|
||||
val workerName = RefreshCollectionsWorker.enqueue(context, service.id)
|
||||
WorkManager.getInstance(context).cancelUniqueWork(workerName)
|
||||
assertFalse(workScheduledOrRunning(context, workerName))
|
||||
|
||||
// here we should test whether stopping the work really interrupts the refresh thread
|
||||
val (workerName, enqueueOp) = RefreshCollectionsWorker.enqueue(context, service.id)
|
||||
enqueueOp.result.get()
|
||||
assertTrue(workScheduledOrRunningOrSuccessful(context, workerName))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -17,6 +17,7 @@ import androidx.work.Data
|
|||
import androidx.work.ExistingWorkPolicy
|
||||
import androidx.work.ForegroundInfo
|
||||
import androidx.work.OneTimeWorkRequestBuilder
|
||||
import androidx.work.Operation
|
||||
import androidx.work.OutOfQuotaPolicy
|
||||
import androidx.work.WorkInfo
|
||||
import androidx.work.WorkManager
|
||||
|
@ -127,11 +128,14 @@ class RefreshCollectionsWorker @AssistedInject constructor(
|
|||
* a [RefreshCollectionsWorker].
|
||||
*
|
||||
* @param serviceId serviceId which is to be refreshed
|
||||
* @return workerName name of the worker started
|
||||
* @return Pair with
|
||||
*
|
||||
* 1. worker name,
|
||||
* 2. operation of [WorkManager.enqueueUniqueWork] (can be used to wait for completion)
|
||||
*
|
||||
* @throws IllegalArgumentException when there's no service with this ID
|
||||
*/
|
||||
fun enqueue(context: Context, serviceId: Long): String {
|
||||
fun enqueue(context: Context, serviceId: Long): Pair<String, Operation> {
|
||||
val name = workerName(serviceId)
|
||||
val arguments = Data.Builder()
|
||||
.putLong(ARG_SERVICE_ID, serviceId)
|
||||
|
@ -142,12 +146,14 @@ class RefreshCollectionsWorker @AssistedInject constructor(
|
|||
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
|
||||
.build()
|
||||
|
||||
WorkManager.getInstance(context).enqueueUniqueWork(
|
||||
return Pair(
|
||||
name,
|
||||
ExistingWorkPolicy.KEEP, // if refresh is already running, just continue that one
|
||||
workRequest
|
||||
WorkManager.getInstance(context).enqueueUniqueWork(
|
||||
name,
|
||||
ExistingWorkPolicy.KEEP, // if refresh is already running, just continue that one
|
||||
workRequest
|
||||
)
|
||||
)
|
||||
return name
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue