diff --git a/app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorkerTest.kt b/app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorkerTest.kt index b155630df..af23cca9e 100644 --- a/app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorkerTest.kt +++ b/app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorkerTest.kt @@ -11,7 +11,6 @@ import android.content.Context import android.provider.CalendarContract import android.provider.ContactsContract import android.util.Log -import androidx.test.platform.app.InstrumentationRegistry import androidx.work.Configuration import androidx.work.ListenableWorker import androidx.work.WorkManager @@ -25,19 +24,16 @@ import at.bitfire.davdroid.TestUtils.workScheduledOrRunning import at.bitfire.davdroid.db.Credentials import at.bitfire.davdroid.settings.AccountSettings import at.bitfire.davdroid.sync.account.AccountUtils -import dagger.assisted.AssistedFactory import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest -import io.mockk.junit4.MockKRule import io.mockk.mockkObject import io.mockk.verify import kotlinx.coroutines.runBlocking -import org.junit.AfterClass +import org.junit.After import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before -import org.junit.BeforeClass import org.junit.Rule import org.junit.Test import javax.inject.Inject @@ -45,56 +41,39 @@ import javax.inject.Inject @HiltAndroidTest class PeriodicSyncWorkerTest { - companion object { - - private val context: Context = InstrumentationRegistry.getInstrumentation().targetContext - - private val accountManager = AccountManager.get(context) - private val account = Account("Test Account", context.getString(R.string.account_type)) - private val fakeCredentials = Credentials("test", "test") - - @BeforeClass - @JvmStatic - fun setUp() { - // Initialize WorkManager for instrumentation tests. - val config = Configuration.Builder() - .setMinimumLoggingLevel(Log.DEBUG) - .build() - WorkManagerTestInitHelper.initializeTestWorkManager(context, config) - - assertTrue(AccountUtils.createAccount(context, account, AccountSettings.initialUserData(fakeCredentials))) - ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 1) - ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1) - } - - @AfterClass - @JvmStatic - fun removeAccount() { - accountManager.removeAccountExplicitly(account) - } - - } - - @AssistedFactory - interface PeriodicSyncWorkerFactory { - fun create(appContext: Context, workerParams: WorkerParameters): PeriodicSyncWorker - } - @Inject @ApplicationContext lateinit var context: Context @Inject - lateinit var syncWorkerFactory: PeriodicSyncWorkerFactory + lateinit var syncWorkerFactory: PeriodicSyncWorker.Factory @get:Rule val hiltRule = HiltAndroidRule(this) - @get:Rule - val mockkRule = MockKRule(this) + + private val accountManager by lazy { AccountManager.get(context) } + private val account by lazy { Account("Test Account", context.getString(R.string.account_type)) } + private val fakeCredentials = Credentials("test", "test") @Before - fun inject() { + fun setup() { hiltRule.inject() + + // Initialize WorkManager for instrumentation tests. + val config = Configuration.Builder() + .setMinimumLoggingLevel(Log.DEBUG) + .build() + WorkManagerTestInitHelper.initializeTestWorkManager(context, config) + + // create test account + assertTrue(AccountUtils.createAccount(context, account, AccountSettings.initialUserData(fakeCredentials))) + ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 1) + ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1) + } + + @After + fun teardown() { + accountManager.removeAccountExplicitly(account) } diff --git a/app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/TestSyncWorker.kt b/app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/TestSyncWorker.kt deleted file mode 100644 index 279054a8a..000000000 --- a/app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/TestSyncWorker.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details. - */ - -package at.bitfire.davdroid.sync.worker - -import android.content.Context -import androidx.work.WorkerParameters -import dagger.hilt.android.qualifiers.ApplicationContext -import io.mockk.mockk -import kotlinx.coroutines.Dispatchers -import javax.inject.Inject - -class TestSyncWorker @Inject constructor( - @ApplicationContext context: Context -): BaseSyncWorker( - context, - workerParams = mockk(), - syncDispatcher = Dispatchers.Main -) \ No newline at end of file diff --git a/app/src/main/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorker.kt b/app/src/main/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorker.kt index 6a442e7be..4c18c0b99 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorker.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorker.kt @@ -7,6 +7,7 @@ package at.bitfire.davdroid.sync.worker import android.accounts.Account import android.content.Context import android.provider.CalendarContract +import androidx.annotation.VisibleForTesting import androidx.hilt.work.HiltWorker import androidx.work.Constraints import androidx.work.Data @@ -18,6 +19,7 @@ import androidx.work.WorkManager import androidx.work.WorkerParameters import at.bitfire.davdroid.sync.SyncDispatcher import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import java.util.concurrent.TimeUnit @@ -107,4 +109,10 @@ class PeriodicSyncWorker @AssistedInject constructor( } + @AssistedFactory + @VisibleForTesting + interface Factory { + fun create(appContext: Context, workerParams: WorkerParameters): PeriodicSyncWorker + } + } \ No newline at end of file