Skip to content
Snippets Groups Projects
Commit f57a749c authored by Taras's avatar Taras
Browse files

Move worker test to app

parent bc41234c
No related branches found
No related tags found
No related merge requests found
......@@ -102,10 +102,16 @@ dependencies {
implementation "com.google.dagger:hilt-android:$rootProject.ext.hilt_version"
kapt "com.google.dagger:hilt-compiler:$rootProject.ext.hilt_version"
//Coroutines
def coroutines_version = '1.7.3'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
//test
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation "androidx.work:work-testing:2.8.1"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
}
kapt {
......
package org.futo.circles.gallery
package org.futo.circles
import android.content.Context
import android.os.Handler
......@@ -28,7 +28,7 @@ import java.util.UUID
import java.util.concurrent.TimeUnit
import kotlin.coroutines.resume
class WorkerTest {
class MediaBackupWorkerTest {
lateinit var context: Context
......
package org.futo.circles
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.lifecycle.Observer
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.platform.app.InstrumentationRegistry
import androidx.work.Configuration
import androidx.work.Constraints
import androidx.work.Data
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequest
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkInfo
import androidx.work.WorkManager
import androidx.work.testing.SynchronousExecutor
import androidx.work.testing.WorkManagerTestInitHelper
import junit.framework.TestCase.assertTrue
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.futo.circles.auth.feature.token.RefreshTokenWorker
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import java.util.UUID
import java.util.concurrent.TimeUnit
import kotlin.coroutines.resume
import kotlin.math.max
class RefreshTokenWorkerTest {
lateinit var context: Context
private val job = SupervisorJob()
private val testDispatcher = StandardTestDispatcher()
private val testScope = TestScope(job + testDispatcher)
@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)
@Before
fun setup() {
context = InstrumentationRegistry.getInstrumentation().targetContext
val config = Configuration.Builder()
.setMinimumLoggingLevel(Log.DEBUG)
.setExecutor(SynchronousExecutor())
.build()
WorkManagerTestInitHelper.initializeTestWorkManager(context, config)
}
@Test
fun testPeriodicWork() = testScope.runTest {
val workManager = WorkManager.getInstance(context)
val testDriver = WorkManagerTestInitHelper.getTestDriver(context)
?: throw IllegalArgumentException("test driver is null")
val expireTime = 3600000L
val sessionIdData = Data.Builder()
.putString(RefreshTokenWorker.SESSION_ID_PARAM_KEY, "test")
.build()
val flex = max(expireTime / 3, PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS)
val refreshRequest = PeriodicWorkRequestBuilder<RefreshTokenWorker>(
expireTime, TimeUnit.MILLISECONDS,
flex, TimeUnit.MILLISECONDS
)
.setConstraints(
Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()
)
.setInputData(sessionIdData)
.build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"test",
ExistingPeriodicWorkPolicy.UPDATE,
refreshRequest
).result.get()
testDriver.setPeriodDelayMet(refreshRequest.id)
testDriver.setAllConstraintsMet(refreshRequest.id)
val isSucceeded = awaitForWork(workManager, refreshRequest.id)
assertTrue(isSucceeded)
}
private suspend fun awaitForWork(
workManager: WorkManager,
workId: UUID
): Boolean {
val checkWorkerLiveState = workManager.getWorkInfoByIdLiveData(workId)
return suspendCancellableCoroutine {
val observer = object : Observer<WorkInfo> {
override fun onChanged(value: WorkInfo) {
if (value.state == WorkInfo.State.ENQUEUED) {
checkWorkerLiveState.removeObserver(this)
it.resume(true)
}
if (value.state == WorkInfo.State.FAILED || value.state == WorkInfo.State.CANCELLED) {
checkWorkerLiveState.removeObserver(this)
it.resume(false)
}
}
}
Handler(Looper.getMainLooper()).post { checkWorkerLiveState.observeForever(observer) }
}
}
}
......@@ -48,7 +48,7 @@ dependencies {
implementation 'com.jsibbold:zoomage:1.3.1'
//ExoPlayer
def exoplayer_version = '1.1.1'
def exoplayer_version = '1.2.0'
implementation "androidx.media3:media3-exoplayer:$exoplayer_version"
implementation "androidx.media3:media3-ui:$exoplayer_version"
......@@ -56,10 +56,6 @@ dependencies {
def work_version = "2.8.1"
implementation "androidx.work:work-runtime-ktx:$work_version"
//Coroutines
def coroutines_version = '1.7.3'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
//Hilt
implementation "com.google.dagger:hilt-android:$rootProject.ext.hilt_version"
kapt "com.google.dagger:hilt-compiler:$rootProject.ext.hilt_version"
......@@ -68,8 +64,6 @@ dependencies {
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation "androidx.work:work-testing:2.8.1"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
}
kapt {
......
......@@ -29,7 +29,7 @@ class MediaBackupWorker @AssistedInject constructor(
mediaBackupDataSource.startMediaBackup()
syncService?.stopAnyBackgroundSync()
} catch (t: Throwable) {
Result.failure()
return Result.failure()
}
return Result.success()
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment