From 76fb0ee53625cf3eb8c5c776b7d14cfb5af01dd7 Mon Sep 17 00:00:00 2001 From: Jonathan Klee Date: Wed, 28 Jun 2023 11:56:50 +0200 Subject: [PATCH 1/2] Force tests to run on MR --- .gitlab-ci.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0b00750d6..d7af9add3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,8 +22,10 @@ buildDebug: - app/build/outputs/apk/debug/ test: - allow_failure: true - stage: debug + stage: release + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + when: always script: - ./gradlew test -PtestAccountName="$testAccountName" -PtestAccountPwd="$testAccountPwd" -PtestServerUrl="$testServerUrl" artifacts: @@ -33,7 +35,7 @@ test: - app/build/reports/tests/* reports: junit: app/build/test-results/*/TEST-*.xml - + # Default lint configuration for debug builds # Manual as we don't want to run them generally for debug builds .lintDebugDefault: @@ -164,10 +166,10 @@ pushToPrebuilt: - rm Apps/*-release.apk - mv ../${NEW_APK_PATH}/${NEW_APK_NAME} Apps/ # todo: improve to replace sed command, by a new one based on REGEXP (instead of using line number) - - sed -i "6s/.*/LOCAL_SRC_FILES := ${NEW_APK_NAME}/" Apps/Android.mk + - sed -i "6s/.*/LOCAL_SRC_FILES := ${NEW_APK_NAME}/" Apps/Android.mk - git add Apps - git status - git commit -m "App Lounge - ${NEW_APK_VERSION}, ${CI_COMMIT_TAG}" -m "From ${CI_COMMIT_SHA}, pipeline ${CI_PIPELINE_ID}" - git push # Sometimes a single push doesn't do all the job, so we have to push twice - - git push \ No newline at end of file + - git push -- GitLab From 44c592464229f2fd4a8a09e691c8f7060a1fc089 Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Tue, 4 Jul 2023 06:54:08 +0600 Subject: [PATCH 2/2] fixed: unit tests --- .../e/apps/data/updates/UpdatesManagerImpl.kt | 7 ++- .../foundation/e/apps/FakePkgManagerModule.kt | 52 +++++++++++++++++++ .../foundation/e/apps/FakePreferenceModule.kt | 5 ++ .../e/apps/UpdateManagerImptTest.kt | 48 +++++++++-------- .../FusedManagerRepositoryTest.kt | 16 ++++-- 5 files changed, 102 insertions(+), 26 deletions(-) create mode 100644 app/src/test/java/foundation/e/apps/FakePkgManagerModule.kt diff --git a/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt b/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt index c4e786c2f..764cab30a 100644 --- a/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt +++ b/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt @@ -95,13 +95,18 @@ class UpdatesManagerImpl @Inject constructor( gPlayInstalledApps.isNotEmpty() ) { - status = getUpdatesFromApi({ + val gplayStatus = getUpdatesFromApi({ fusedAPIRepository.getApplicationDetails( gPlayInstalledApps, authData, Origin.GPLAY ) }, updateList) + + /** + If any one of the sources is successful, status should be [ResultStatus.OK] + **/ + status = if (status == ResultStatus.OK) status else gplayStatus } val nonFaultyUpdateList = faultyAppRepository.removeFaultyApps(updateList) diff --git a/app/src/test/java/foundation/e/apps/FakePkgManagerModule.kt b/app/src/test/java/foundation/e/apps/FakePkgManagerModule.kt new file mode 100644 index 000000000..b24f4af36 --- /dev/null +++ b/app/src/test/java/foundation/e/apps/FakePkgManagerModule.kt @@ -0,0 +1,52 @@ +/* + * Copyright MURENA SAS 2023 + * Apps Quickly and easily install Android apps onto your device! + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package foundation.e.apps + +import android.content.Context +import android.content.pm.ApplicationInfo +import foundation.e.apps.data.fused.data.FusedApp +import foundation.e.apps.data.updates.UpdatesManagerImpl.Companion.PACKAGE_NAME_ANDROID_VENDING +import foundation.e.apps.data.updates.UpdatesManagerImpl.Companion.PACKAGE_NAME_F_DROID +import foundation.e.apps.install.pkg.PkgManagerModule + +class FakePkgManagerModule( + context: Context, + val gplayApps: List, +) : PkgManagerModule(context) { + + val applicationInfo = mutableListOf( + ApplicationInfo().apply { this.packageName = "foundation.e.demoone" }, + ApplicationInfo().apply { this.packageName = "foundation.e.demotwo" }, + ApplicationInfo().apply { this.packageName = "foundation.e.demothree" } + ) + + override fun getAllUserApps(): List { + return applicationInfo + } + + override fun getInstallerName(packageName: String): String { + val gplayPackageNames = gplayApps.map { it.package_name } + + return if (gplayPackageNames.contains(packageName)) { + PACKAGE_NAME_ANDROID_VENDING + } else { + PACKAGE_NAME_F_DROID + } + } +} diff --git a/app/src/test/java/foundation/e/apps/FakePreferenceModule.kt b/app/src/test/java/foundation/e/apps/FakePreferenceModule.kt index 4c5e1bdd1..538bd64e5 100644 --- a/app/src/test/java/foundation/e/apps/FakePreferenceModule.kt +++ b/app/src/test/java/foundation/e/apps/FakePreferenceModule.kt @@ -24,6 +24,7 @@ class FakePreferenceModule(context: Context) : PreferenceManagerModule(context) var isPWASelectedFake = false var isOpenSourceelectedFake = false var isGplaySelectedFake = false + var shouldUpdateFromOtherStores = true override fun isPWASelected(): Boolean { return isPWASelectedFake @@ -44,4 +45,8 @@ class FakePreferenceModule(context: Context) : PreferenceManagerModule(context) else -> "any" } } + + override fun shouldUpdateAppsFromOtherStores(): Boolean { + return shouldUpdateFromOtherStores + } } diff --git a/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt b/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt index fb78eeeda..648567559 100644 --- a/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt +++ b/app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt @@ -31,7 +31,6 @@ import foundation.e.apps.data.fused.FusedAPIRepository import foundation.e.apps.data.fused.FusedApi import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.updates.UpdatesManagerImpl -import foundation.e.apps.install.pkg.PkgManagerModule import foundation.e.apps.util.MainCoroutineRule import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest @@ -64,8 +63,7 @@ class UpdateManagerImptTest { @Mock private lateinit var context: Context - @Mock - private lateinit var pkgManagerModule: PkgManagerModule + private lateinit var pkgManagerModule: FakePkgManagerModule @Mock private lateinit var fusedAPIRepository: FusedAPIRepository @@ -90,6 +88,7 @@ class UpdateManagerImptTest { MockitoAnnotations.openMocks(this) faultyAppRepository = FaultyAppRepository(FakeFaultyAppDao()) preferenceModule = FakePreferenceModule(context) + pkgManagerModule = FakePkgManagerModule(context, getGplayApps()) updatesManagerImpl = UpdatesManagerImpl(context, pkgManagerModule, fusedAPIRepository, faultyAppRepository, preferenceModule, fdroidRepository) } @@ -103,7 +102,6 @@ class UpdateManagerImptTest { val gplayUpdates = Pair(gplayApps, ResultStatus.OK) setupMockingForFetchingUpdates( - applicationInfo, openSourceUpdates, gplayUpdates ) @@ -136,8 +134,7 @@ class UpdateManagerImptTest { @Test fun getUpdateWhenInstalledPackageListIsEmpty() = runTest { val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - val applicationInfo = mutableListOf() - Mockito.`when`(pkgManagerModule.getAllUserApps()).thenReturn(applicationInfo) + pkgManagerModule.applicationInfo.clear() val updateResult = updatesManagerImpl.getUpdates(authData) System.out.println("===> updates: ${updateResult.first.map { it.package_name }}") @@ -154,7 +151,6 @@ class UpdateManagerImptTest { val gplayUpdates = Pair(gplayApps, ResultStatus.OK) setupMockingForFetchingUpdates( - applicationInfo, openSourceUpdates, gplayUpdates ) @@ -174,7 +170,6 @@ class UpdateManagerImptTest { val gplayUpdates = Pair(gplayApps, ResultStatus.OK) setupMockingForFetchingUpdates( - applicationInfo, openSourceUpdates, gplayUpdates ) @@ -194,14 +189,11 @@ class UpdateManagerImptTest { val gplayUpdates = Pair(gplayApps, ResultStatus.OK) setupMockingForFetchingUpdates( - applicationInfo, openSourceUpdates, gplayUpdates ) val updateResult = updatesManagerImpl.getUpdates(authData) - System.out.println("===> updates: ${updateResult.first.map { it.package_name }}") - assertFalse("fetchupdate", updateResult.first.any { it.origin == Origin.CLEANAPK }) } @@ -214,16 +206,13 @@ class UpdateManagerImptTest { val gplayUpdates = Pair(gplayApps, ResultStatus.OK) setupMockingForFetchingUpdates( - applicationInfo, openSourceUpdates, gplayUpdates ) val updateResult = updatesManagerImpl.getUpdates(authData) - System.out.println("===> updates: ${updateResult.first.map { it.package_name }}") - assertEquals("fetchupdate", 1, updateResult.first.size) - assertEquals("fetchupdate", ResultStatus.TIMEOUT, updateResult.second) + assertEquals("fetchupdate", ResultStatus.OK, updateResult.second) } @Test @@ -235,7 +224,26 @@ class UpdateManagerImptTest { val gplayUpdates = Pair(gplayApps, ResultStatus.TIMEOUT) setupMockingForFetchingUpdates( - applicationInfo, + openSourceUpdates, + gplayUpdates + ) + + val updateResult = updatesManagerImpl.getUpdates(authData) + System.out.println("===> updates: ${updateResult.first.map { it.package_name }}") + + assertEquals("fetchupdate", 1, updateResult.first.size) + assertEquals("fetchupdate", ResultStatus.OK, updateResult.second) + } + + @Test + fun getUpdateWhenBothSourcesAreFailed() = runTest { + val gplayApps = mutableListOf() + val openSourceApps = getOpenSourceApps(Status.UPDATABLE) + + val openSourceUpdates = Pair(openSourceApps, ResultStatus.TIMEOUT) + val gplayUpdates = Pair(gplayApps, ResultStatus.TIMEOUT) + + setupMockingForFetchingUpdates( openSourceUpdates, gplayUpdates ) @@ -266,7 +274,7 @@ class UpdateManagerImptTest { val openSourceUpdates = Pair(openSourceApps, ResultStatus.OK) val gplayUpdates = Pair(gPlayApps, ResultStatus.OK) - setupMockingForFetchingUpdates(applicationInfo, openSourceUpdates, gplayUpdates) + setupMockingForFetchingUpdates(openSourceUpdates, gplayUpdates) val updateResult = updatesManagerImpl.getUpdatesOSS() assertEquals("UpdateOSS", 1, updateResult.first.size) @@ -281,7 +289,7 @@ class UpdateManagerImptTest { val openSourceUpdates = Pair(openSourceApps, ResultStatus.OK) val gplayUpdates = Pair(gPlayApps, ResultStatus.OK) - setupMockingForFetchingUpdates(applicationInfo, openSourceUpdates, gplayUpdates) + setupMockingForFetchingUpdates(openSourceUpdates, gplayUpdates) val updateResult = updatesManagerImpl.getUpdatesOSS() assertEquals("UpdateOSS", 0, updateResult.first.size) @@ -295,7 +303,7 @@ class UpdateManagerImptTest { val openSourceUpdates = Pair(openSourceApps, ResultStatus.TIMEOUT) val gplayUpdates = Pair(gPlayApps, ResultStatus.OK) - setupMockingForFetchingUpdates(applicationInfo, openSourceUpdates, gplayUpdates) + setupMockingForFetchingUpdates(openSourceUpdates, gplayUpdates) val updateResult = updatesManagerImpl.getUpdatesOSS() assertEquals("UpdateOSS", 0, updateResult.first.size) @@ -303,7 +311,6 @@ class UpdateManagerImptTest { } private suspend fun setupMockingForFetchingUpdates( - applicationInfo: MutableList, openSourceUpdates: Pair, ResultStatus>, gplayUpdates: Pair, ResultStatus>, selectedApplicationSources: List = mutableListOf( @@ -312,7 +319,6 @@ class UpdateManagerImptTest { FusedApi.APP_TYPE_PWA ) ) { - Mockito.`when`(pkgManagerModule.getAllUserApps()).thenReturn(applicationInfo) Mockito.`when`( fusedAPIRepository.getApplicationDetails( any(), diff --git a/app/src/test/java/foundation/e/apps/fusedManager/FusedManagerRepositoryTest.kt b/app/src/test/java/foundation/e/apps/fusedManager/FusedManagerRepositoryTest.kt index cba43e63e..5d47945b1 100644 --- a/app/src/test/java/foundation/e/apps/fusedManager/FusedManagerRepositoryTest.kt +++ b/app/src/test/java/foundation/e/apps/fusedManager/FusedManagerRepositoryTest.kt @@ -22,7 +22,6 @@ import android.app.Application import androidx.arch.core.executor.testing.InstantTaskExecutorRule import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fdroid.FdroidRepository -import foundation.e.apps.data.fusedDownload.FusedDownloadDAO import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.data.fusedDownload.models.FusedDownload import foundation.e.apps.install.workmanager.InstallWorkManager @@ -52,7 +51,7 @@ class FusedManagerRepositoryTest { @get:Rule var mainCoroutineRule = MainCoroutineRule() - private lateinit var fusedDownloadDAO: FusedDownloadDAO + private lateinit var fusedDownloadDAO: FakeFusedDownloadDAO private lateinit var fakeFusedManager: FakeFusedManager @Mock @@ -88,15 +87,24 @@ class FusedManagerRepositoryTest { } @Test - fun `addDownload when work is already available`() = runTest { + fun `addDownload when work and FusedDownload Both are available`() = runTest { val fusedDownload = initTest(true) + fusedDownloadDAO.fusedDownloadList.add(fusedDownload) val isSuccessful = fusedManagerRepository.addDownload(fusedDownload) assertFalse("addDownload", isSuccessful) } @Test - fun `addDownload when fusedDownload already exists`() = runTest { + fun `addDownload when only work exists`() = runTest { + val fusedDownload = initTest(true) + + val isSuccessful = fusedManagerRepository.addDownload(fusedDownload) + assertTrue("addDownload", isSuccessful) + } + + @Test + fun `addDownload when on FusedDownload exists`() = runTest { val fusedDownload = initTest() fusedDownloadDAO.addDownload(fusedDownload) -- GitLab