[db] reset the preferred repo when it gets disabled or deleted

This commit is contained in:
Torsten Grote
2023-10-19 15:44:50 -03:00
parent 5c27f7033e
commit 12af2fa32b
3 changed files with 78 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ package org.fdroid.database
import androidx.core.os.LocaleListCompat
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.fdroid.database.TestUtils.getOrAwaitValue
import org.fdroid.database.TestUtils.getOrFail
import org.fdroid.database.TestUtils.toMetadataV2
import org.fdroid.test.TestRepoUtils.getRandomRepo
@@ -10,6 +11,7 @@ import org.fdroid.test.TestVersionUtils.getRandomPackageVersionV2
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertEquals
import kotlin.test.assertNull
import kotlin.test.assertTrue
import kotlin.test.fail
@@ -82,6 +84,10 @@ internal class AppDaoTest : AppTest() {
// prefer repo1 for this app
appPrefsDao.update(AppPrefs(packageName, preferredRepoId = repoId1))
assertEquals(app1, appDao.getApp(packageName).getOrFail()?.toMetadataV2()?.sort())
// preferring non-existent repo for this app makes query return nothing (avoid this!)
appPrefsDao.update(AppPrefs(packageName, preferredRepoId = 1337L))
assertNull(appDao.getApp(packageName).getOrAwaitValue())
}
@Test

View File

@@ -0,0 +1,57 @@
package org.fdroid.database
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.fdroid.database.TestUtils.getOrFail
import org.fdroid.database.TestUtils.toMetadataV2
import org.fdroid.test.TestRepoUtils.getRandomRepo
import org.fdroid.test.TestUtils.sort
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertEquals
@RunWith(AndroidJUnit4::class)
internal class AppPrefsDaoTest : AppTest() {
@Test
fun testDisablingPreferredRepo() {
// insert same app into three repos (repoId3 has highest weight)
val repoId1 = repoDao.insertOrReplace(getRandomRepo())
val repoId2 = repoDao.insertOrReplace(getRandomRepo())
val repoId3 = repoDao.insertOrReplace(getRandomRepo())
appDao.insert(repoId1, packageName, app1, locales)
appDao.insert(repoId2, packageName, app2, locales)
appDao.insert(repoId2, packageName, app3, locales)
// app from preferred repo gets returned
appPrefsDao.update(AppPrefs(packageName, preferredRepoId = repoId1))
assertEquals(app1, appDao.getApp(packageName).getOrFail()?.toMetadataV2()?.sort())
// preferred repo gets disabled
repoDao.setRepositoryEnabled(repoId1, false)
// now app from repo with highest weight is returned
assertEquals(app3, appDao.getApp(packageName).getOrFail()?.toMetadataV2()?.sort())
}
@Test
fun testRemovingPreferredRepo() {
// insert same app into three repos (repoId3 has highest weight)
val repoId1 = repoDao.insertOrReplace(getRandomRepo())
val repoId2 = repoDao.insertOrReplace(getRandomRepo())
val repoId3 = repoDao.insertOrReplace(getRandomRepo())
appDao.insert(repoId1, packageName, app1, locales)
appDao.insert(repoId2, packageName, app2, locales)
appDao.insert(repoId2, packageName, app3, locales)
// app from preferred repo gets returned
appPrefsDao.update(AppPrefs(packageName, preferredRepoId = repoId1))
assertEquals(app1, appDao.getApp(packageName).getOrFail()?.toMetadataV2()?.sort())
// preferred repo gets removed
repoDao.deleteRepository(repoId1)
// now app from repo with highest weight is returned
assertEquals(app3, appDao.getApp(packageName).getOrFail()?.toMetadataV2()?.sort())
}
}