Skip to content

Commit 8e7d289

Browse files
authored
Tests: don't create account as long as Hilt is not ready (#939)
1 parent d4c05b9 commit 8e7d289

File tree

3 files changed

+31
-64
lines changed

3 files changed

+31
-64
lines changed

app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorkerTest.kt

+23-44
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import android.content.Context
1111
import android.provider.CalendarContract
1212
import android.provider.ContactsContract
1313
import android.util.Log
14-
import androidx.test.platform.app.InstrumentationRegistry
1514
import androidx.work.Configuration
1615
import androidx.work.ListenableWorker
1716
import androidx.work.WorkManager
@@ -25,76 +24,56 @@ import at.bitfire.davdroid.TestUtils.workScheduledOrRunning
2524
import at.bitfire.davdroid.db.Credentials
2625
import at.bitfire.davdroid.settings.AccountSettings
2726
import at.bitfire.davdroid.sync.account.AccountUtils
28-
import dagger.assisted.AssistedFactory
2927
import dagger.hilt.android.qualifiers.ApplicationContext
3028
import dagger.hilt.android.testing.HiltAndroidRule
3129
import dagger.hilt.android.testing.HiltAndroidTest
32-
import io.mockk.junit4.MockKRule
3330
import io.mockk.mockkObject
3431
import io.mockk.verify
3532
import kotlinx.coroutines.runBlocking
36-
import org.junit.AfterClass
33+
import org.junit.After
3734
import org.junit.Assert.assertFalse
3835
import org.junit.Assert.assertTrue
3936
import org.junit.Before
40-
import org.junit.BeforeClass
4137
import org.junit.Rule
4238
import org.junit.Test
4339
import javax.inject.Inject
4440

4541
@HiltAndroidTest
4642
class PeriodicSyncWorkerTest {
4743

48-
companion object {
49-
50-
private val context: Context = InstrumentationRegistry.getInstrumentation().targetContext
51-
52-
private val accountManager = AccountManager.get(context)
53-
private val account = Account("Test Account", context.getString(R.string.account_type))
54-
private val fakeCredentials = Credentials("test", "test")
55-
56-
@BeforeClass
57-
@JvmStatic
58-
fun setUp() {
59-
// Initialize WorkManager for instrumentation tests.
60-
val config = Configuration.Builder()
61-
.setMinimumLoggingLevel(Log.DEBUG)
62-
.build()
63-
WorkManagerTestInitHelper.initializeTestWorkManager(context, config)
64-
65-
assertTrue(AccountUtils.createAccount(context, account, AccountSettings.initialUserData(fakeCredentials)))
66-
ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 1)
67-
ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1)
68-
}
69-
70-
@AfterClass
71-
@JvmStatic
72-
fun removeAccount() {
73-
accountManager.removeAccountExplicitly(account)
74-
}
75-
76-
}
77-
78-
@AssistedFactory
79-
interface PeriodicSyncWorkerFactory {
80-
fun create(appContext: Context, workerParams: WorkerParameters): PeriodicSyncWorker
81-
}
82-
8344
@Inject
8445
@ApplicationContext
8546
lateinit var context: Context
8647

8748
@Inject
88-
lateinit var syncWorkerFactory: PeriodicSyncWorkerFactory
49+
lateinit var syncWorkerFactory: PeriodicSyncWorker.Factory
8950

9051
@get:Rule
9152
val hiltRule = HiltAndroidRule(this)
92-
@get:Rule
93-
val mockkRule = MockKRule(this)
53+
54+
private val accountManager by lazy { AccountManager.get(context) }
55+
private val account by lazy { Account("Test Account", context.getString(R.string.account_type)) }
56+
private val fakeCredentials = Credentials("test", "test")
9457

9558
@Before
96-
fun inject() {
59+
fun setup() {
9760
hiltRule.inject()
61+
62+
// Initialize WorkManager for instrumentation tests.
63+
val config = Configuration.Builder()
64+
.setMinimumLoggingLevel(Log.DEBUG)
65+
.build()
66+
WorkManagerTestInitHelper.initializeTestWorkManager(context, config)
67+
68+
// create test account
69+
assertTrue(AccountUtils.createAccount(context, account, AccountSettings.initialUserData(fakeCredentials)))
70+
ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 1)
71+
ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1)
72+
}
73+
74+
@After
75+
fun teardown() {
76+
accountManager.removeAccountExplicitly(account)
9877
}
9978

10079

app/src/androidTest/kotlin/at/bitfire/davdroid/sync/worker/TestSyncWorker.kt

-20
This file was deleted.

app/src/main/kotlin/at/bitfire/davdroid/sync/worker/PeriodicSyncWorker.kt

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package at.bitfire.davdroid.sync.worker
77
import android.accounts.Account
88
import android.content.Context
99
import android.provider.CalendarContract
10+
import androidx.annotation.VisibleForTesting
1011
import androidx.hilt.work.HiltWorker
1112
import androidx.work.Constraints
1213
import androidx.work.Data
@@ -18,6 +19,7 @@ import androidx.work.WorkManager
1819
import androidx.work.WorkerParameters
1920
import at.bitfire.davdroid.sync.SyncDispatcher
2021
import dagger.assisted.Assisted
22+
import dagger.assisted.AssistedFactory
2123
import dagger.assisted.AssistedInject
2224
import java.util.concurrent.TimeUnit
2325

@@ -107,4 +109,10 @@ class PeriodicSyncWorker @AssistedInject constructor(
107109

108110
}
109111

112+
@AssistedFactory
113+
@VisibleForTesting
114+
interface Factory {
115+
fun create(appContext: Context, workerParams: WorkerParameters): PeriodicSyncWorker
116+
}
117+
110118
}

0 commit comments

Comments
 (0)