22
33package com.ichi2.anki
44
5+ import androidx.core.content.edit
56import androidx.test.ext.junit.runners.AndroidJUnit4
7+ import com.ichi2.anki.common.preferences.sharedPrefs
68import com.ichi2.anki.exception.StorageNotConfiguredException
79import com.ichi2.anki.exception.SystemStorageException
810import com.ichi2.anki.storage.StorageDecision
11+ import org.junit.After
912import org.junit.Test
1013import org.junit.runner.RunWith
14+ import java.io.File
1115import kotlin.test.assertEquals
1216import kotlin.test.assertFailsWith
1317import kotlin.test.assertSame
1418
1519/* *
16- * Proves the storage-decision gate in [CollectionManager.ensureOpenInner] is wired up. In production
17- * [CollectionHelper.storageDecision] always returns [com.ichi2.anki.storage.StorageDecision.Decided], so this never fires;
18- * here we force [com.ichi2.anki.storage.StorageDecision.Undecided] via the test override.
20+ * Proves the storage-decision gate in [CollectionManager.ensureOpenInner] is wired up.
21+ * [CollectionHelper.storageDecision] is [StorageDecision.Decided] once a collection path has
22+ * been set ([CollectionHelper.PREF_COLLECTION_PATH]); tests force
23+ * [StorageDecision.Undecided] via the test override.
1924 */
2025@RunWith(AndroidJUnit4 ::class )
2126class StorageDecisionGateTest : RobolectricTest () {
27+ private val prefs
28+ get() = targetContext.sharedPrefs()
29+
30+ @After
31+ fun resetOverrides () {
32+ CollectionHelper .ankiDroidDirectoryOverride = null
33+ CollectionHelper .storageDecisionTestOverride = null
34+ CollectionHelper .systemStorageFailure = null
35+ }
36+
37+ @Test
38+ fun `storage decision is decided when the collection path is set` () {
39+ prefs.edit { putString(CollectionHelper .PREF_COLLECTION_PATH , " /a/collection/path" ) }
40+ assertEquals(StorageDecision .Decided , CollectionHelper .storageDecision(prefs))
41+ }
42+
43+ @Test
44+ fun `storage decision is undecided when the collection path is unset` () {
45+ prefs.edit { remove(CollectionHelper .PREF_COLLECTION_PATH ) }
46+ assertEquals(StorageDecision .Undecided , CollectionHelper .storageDecision(prefs))
47+ }
48+
49+ @Test
50+ fun `storage decision is decided when a directory override is active` () {
51+ prefs.edit { remove(CollectionHelper .PREF_COLLECTION_PATH ) }
52+ CollectionHelper .ankiDroidDirectoryOverride = File (" /an/override" )
53+ assertEquals(StorageDecision .Decided , CollectionHelper .storageDecision(prefs))
54+ }
55+
2256 @Test
2357 fun `opening the collection throws when storage is undecided` () {
2458 CollectionHelper .storageDecisionTestOverride = StorageDecision .Undecided
25- try {
26- assertFailsWith<StorageNotConfiguredException > { CollectionManager .getColUnsafe() }
27- } finally {
28- CollectionHelper .storageDecisionTestOverride = null
29- }
59+ assertFailsWith<StorageNotConfiguredException > { CollectionManager .getColUnsafe() }
3060 }
3161
3262 /* * No collection access should be attempted: a crash report would otherwise be generated */
3363 @Test
3464 fun `startup failure is StorageUndecided when storage is undecided` () {
3565 CollectionHelper .storageDecisionTestOverride = StorageDecision .Undecided
36- try {
37- val failure = InitialActivity .getStartupFailureType { true }
38- assertEquals(InitialActivity .StartupFailure .StorageUndecided , failure)
39- } finally {
40- CollectionHelper .storageDecisionTestOverride = null
41- }
66+ val failure = InitialActivity .getStartupFailureType(prefs) { true }
67+ assertEquals(InitialActivity .StartupFailure .StorageUndecided , failure)
4268 }
4369
4470 /* *
@@ -50,12 +76,8 @@ class StorageDecisionGateTest : RobolectricTest() {
5076 val failure = SystemStorageException .build(" simulated getExternalFilesDir failure" )
5177 CollectionHelper .storageDecisionTestOverride = StorageDecision .Undecided
5278 CollectionHelper .systemStorageFailure = failure
53- try {
54- val thrown = assertFailsWith<SystemStorageException > { CollectionManager .getColUnsafe() }
55- assertSame(failure, thrown)
56- } finally {
57- CollectionHelper .storageDecisionTestOverride = null
58- CollectionHelper .systemStorageFailure = null
59- }
79+
80+ val thrown = assertFailsWith<SystemStorageException > { CollectionManager .getColUnsafe() }
81+ assertSame(failure, thrown)
6082 }
6183}
0 commit comments