diff --git a/app/src/test/java/foundation/e/apps/FusedApiImplTest.kt b/app/src/test/java/foundation/e/apps/FusedApiImplTest.kt index 8400436f4f9ae922322a6305b0c13d737ba71bb5..2ced7456ac689a062238894348e22aefde06f4d8 100644 --- a/app/src/test/java/foundation/e/apps/FusedApiImplTest.kt +++ b/app/src/test/java/foundation/e/apps/FusedApiImplTest.kt @@ -43,6 +43,7 @@ import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.modules.PWAManagerModule import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue @@ -50,6 +51,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.mockito.Mock +import org.mockito.MockedStatic import org.mockito.Mockito import org.mockito.MockitoAnnotations import org.mockito.kotlin.any @@ -88,9 +90,16 @@ class FusedApiImplTest { private lateinit var preferenceManagerModule: FakePreferenceModule + private lateinit var formatterMocked: MockedStatic + + companion object { + private val AUTH_DATA = AuthData("e@e.email", "AtadyMsIAtadyM") + } + @Before fun setup() { MockitoAnnotations.openMocks(this) + formatterMocked = Mockito.mockStatic(Formatter::class.java) preferenceManagerModule = FakePreferenceModule(context) fusedAPIImpl = FusedAPIImpl( cleanApkRepository, @@ -102,6 +111,11 @@ class FusedApiImplTest { ) } + @After + fun after() { + formatterMocked.close() + } + @Test fun `is any app updated when new list is empty`() { val oldAppList = mutableListOf( @@ -110,22 +124,20 @@ class FusedApiImplTest { status = Status.UNAVAILABLE, name = "Demo One", package_name = "foundation.e.demoone" - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.INSTALLED, name = "Demo Two", package_name = "foundation.e.demotwo" - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", package_name = "foundation.e.demothree" ) ) - val newAppList = mutableListOf() + val newAppList = mutableListOf() val isFusedAppUpdated = fusedAPIImpl.isAnyFusedAppUpdated(newAppList, oldAppList) assertTrue("isAnyAppUpdated", isFusedAppUpdated) } @@ -144,34 +156,31 @@ class FusedApiImplTest { status = Status.UNAVAILABLE, name = "Demo One", package_name = "foundation.e.demoone" - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.INSTALLED, name = "Demo Two", package_name = "foundation.e.demotwo" - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", package_name = "foundation.e.demothree" ) ) + val newAppList = mutableListOf( FusedApp( _id = "111", status = Status.UNAVAILABLE, name = "Demo One", package_name = "foundation.e.demoone" - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.UNAVAILABLE, name = "Demo Two", package_name = "foundation.e.demotwo" - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", @@ -192,15 +201,13 @@ class FusedApiImplTest { name = "Demo One", package_name = "foundation.e.demoone", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.INSTALLED, name = "Demo Two", package_name = "foundation.e.demotwo", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", @@ -208,6 +215,7 @@ class FusedApiImplTest { latest_version_code = 123 ) ) + Mockito.`when`(pkgManagerModule.getPackageStatus(eq("foundation.e.demoone"), eq(123))) .thenReturn( Status.UNAVAILABLE @@ -220,6 +228,7 @@ class FusedApiImplTest { .thenReturn( Status.UNAVAILABLE ) + val isAppStatusUpdated = fusedAPIImpl.isAnyAppInstallStatusChanged(oldAppList) assertTrue("hasInstallStatusUpdated", isAppStatusUpdated) } @@ -233,15 +242,13 @@ class FusedApiImplTest { name = "Demo One", package_name = "foundation.e.demoone", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.INSTALLED, name = "Demo Two", package_name = "foundation.e.demotwo", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", @@ -249,6 +256,7 @@ class FusedApiImplTest { latest_version_code = 123 ) ) + Mockito.`when`(pkgManagerModule.getPackageStatus(eq("foundation.e.demoone"), eq(123))) .thenReturn( Status.UNAVAILABLE @@ -261,6 +269,7 @@ class FusedApiImplTest { .thenReturn( Status.UNAVAILABLE ) + val isAppStatusUpdated = fusedAPIImpl.isAnyAppInstallStatusChanged(oldAppList) assertFalse("hasInstallStatusUpdated", isAppStatusUpdated) } @@ -274,15 +283,13 @@ class FusedApiImplTest { name = "Demo One", package_name = "foundation.e.demoone", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.INSTALLED, name = "Demo Two", package_name = "foundation.e.demotwo", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", @@ -290,6 +297,7 @@ class FusedApiImplTest { latest_version_code = 123 ) ) + Mockito.`when`(pkgManagerModule.getPackageStatus(eq("foundation.e.demoone"), eq(123))) .thenReturn( Status.UNAVAILABLE @@ -302,6 +310,7 @@ class FusedApiImplTest { .thenReturn( Status.UNAVAILABLE ) + val isAppStatusUpdated = fusedAPIImpl.isAnyAppInstallStatusChanged(oldAppList) assertFalse("hasInstallStatusUpdated", isAppStatusUpdated) } @@ -315,15 +324,13 @@ class FusedApiImplTest { name = "Demo One", package_name = "foundation.e.demoone", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.INSTALLED, name = "Demo Two", package_name = "foundation.e.demotwo", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", @@ -331,6 +338,7 @@ class FusedApiImplTest { latest_version_code = 123 ) ) + val newAppList = mutableListOf( FusedApp( _id = "111", @@ -338,15 +346,13 @@ class FusedApiImplTest { name = "Demo One", package_name = "foundation.e.demoone", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.UNAVAILABLE, name = "Demo Two", package_name = "foundation.e.demotwo", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", @@ -354,6 +360,7 @@ class FusedApiImplTest { latest_version_code = 123 ) ) + val oldHomeData = listOf(FusedHome("Top Free Apps", oldAppList), FusedHome("Top Free Games", oldAppList)) var newHomeData = @@ -362,6 +369,7 @@ class FusedApiImplTest { assertFalse("isHomeDataUpdated/NO", isHomeDataUpdated) newHomeData = listOf(FusedHome("Top Free Apps", oldAppList), FusedHome("Top Free Games", newAppList)) + isHomeDataUpdated = fusedAPIImpl.isHomeDataUpdated(newHomeData, oldHomeData) assertTrue("isHomeDataUpdated/YES", isHomeDataUpdated) } @@ -398,7 +406,9 @@ class FusedApiImplTest { latest_version_code = 123, is_pwa = true ) + Mockito.`when`(pwaManagerModule.getPwaStatus(fusedApp)).thenReturn(fusedApp.status) + val installationStatus = fusedAPIImpl.getFusedAppInstallationStatus(fusedApp) assertEquals("getFusedAppInstallationStatusWhenPWA", fusedApp.status, installationStatus) } @@ -411,12 +421,13 @@ class FusedApiImplTest { package_name = "foundation.e.demothree", latest_version_code = 123, ) + Mockito.`when`( pkgManagerModule.getPackageStatus( - fusedApp.package_name, - fusedApp.latest_version_code + fusedApp.package_name, fusedApp.latest_version_code ) ).thenReturn(Status.INSTALLED) + val installationStatus = fusedAPIImpl.getFusedAppInstallationStatus(fusedApp) assertEquals("getFusedAppInstallationStatusWhenPWA", Status.INSTALLED, installationStatus) } @@ -429,8 +440,8 @@ class FusedApiImplTest { package_name = "", latest_version_code = 123, ) - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, authData) + + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, AUTH_DATA) assertEquals("getAppFilterLevel", FilterLevel.UNKNOWN, filterLevel) } @@ -444,8 +455,7 @@ class FusedApiImplTest { origin = Origin.CLEANAPK ) - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, authData) + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, AUTH_DATA) assertEquals("getAppFilterLevel", FilterLevel.NONE, filterLevel) } @@ -458,6 +468,7 @@ class FusedApiImplTest { latest_version_code = 123, origin = Origin.CLEANAPK ) + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, null) assertEquals("getAppFilterLevel", FilterLevel.NONE, filterLevel) } @@ -474,8 +485,8 @@ class FusedApiImplTest { isFree = false, price = "" ) - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, authData) + + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, AUTH_DATA) assertEquals("getAppFilterLevel", FilterLevel.UI, filterLevel) } @@ -491,8 +502,8 @@ class FusedApiImplTest { isFree = false, price = "" ) - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, authData) + + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, AUTH_DATA) assertEquals("getAppFilterLevel", FilterLevel.UI, filterLevel) } @@ -509,8 +520,8 @@ class FusedApiImplTest { isFree = true, price = "" ) - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - Mockito.`when`(gPlayAPIRepository.getAppDetails(fusedApp.package_name, authData)) + + Mockito.`when`(gPlayAPIRepository.getAppDetails(fusedApp.package_name, AUTH_DATA)) .thenReturn(App(fusedApp.package_name)) Mockito.`when`( @@ -518,74 +529,68 @@ class FusedApiImplTest { fusedApp.package_name, fusedApp.latest_version_code, fusedApp.offer_type, - authData + AUTH_DATA ) ).thenReturn(listOf()) - val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, authData) + + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, AUTH_DATA) assertEquals("getAppFilterLevel", FilterLevel.NONE, filterLevel) } @Test - fun `getAppFilterLevel when app is restricted and getAppDetails throws exception`() = - runTest { - val fusedApp = FusedApp( - _id = "113", - name = "Demo Three", - package_name = "foundation.e.demothree", - latest_version_code = 123, - origin = Origin.GPLAY, - restriction = Constants.Restriction.UNKNOWN, - isFree = true, - price = "" + fun `getAppFilterLevel when app is restricted and getAppDetails throws exception`() = runTest { + val fusedApp = FusedApp( + _id = "113", + name = "Demo Three", + package_name = "foundation.e.demothree", + latest_version_code = 123, + origin = Origin.GPLAY, + restriction = Constants.Restriction.UNKNOWN, + isFree = true, + price = "" + ) + + Mockito.`when`(gPlayAPIRepository.getAppDetails(fusedApp.package_name, AUTH_DATA)) + .thenThrow(RuntimeException()) + + Mockito.`when`( + gPlayAPIRepository.getDownloadInfo( + fusedApp.package_name, fusedApp.latest_version_code, fusedApp.offer_type, AUTH_DATA ) - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - Mockito.`when`(gPlayAPIRepository.getAppDetails(fusedApp.package_name, authData)) - .thenThrow(RuntimeException()) + ).thenReturn(listOf()) - Mockito.`when`( - gPlayAPIRepository.getDownloadInfo( - fusedApp.package_name, - fusedApp.latest_version_code, - fusedApp.offer_type, - authData - ) - ).thenReturn(listOf()) - val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, authData) - assertEquals("getAppFilterLevel", FilterLevel.DATA, filterLevel) - } + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, AUTH_DATA) + assertEquals("getAppFilterLevel", FilterLevel.DATA, filterLevel) + } @Test - fun `getAppFilterLevel when app is restricted and getDownoadInfo throws exception`() = - runTest { - val fusedApp = FusedApp( - _id = "113", - name = "Demo Three", - package_name = "foundation.e.demothree", - latest_version_code = 123, - origin = Origin.GPLAY, - restriction = Constants.Restriction.UNKNOWN, - isFree = true, - price = "" + fun `getAppFilterLevel when app is restricted and getDownoadInfo throws exception`() = runTest { + val fusedApp = FusedApp( + _id = "113", + name = "Demo Three", + package_name = "foundation.e.demothree", + latest_version_code = 123, + origin = Origin.GPLAY, + restriction = Constants.Restriction.UNKNOWN, + isFree = true, + price = "" + ) + + Mockito.`when`(gPlayAPIRepository.getAppDetails(fusedApp.package_name, AUTH_DATA)) + .thenReturn(App(fusedApp.package_name)) + + Mockito.`when`( + gPlayAPIRepository.getDownloadInfo( + fusedApp.package_name, fusedApp.latest_version_code, fusedApp.offer_type, AUTH_DATA ) - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - Mockito.`when`(gPlayAPIRepository.getAppDetails(fusedApp.package_name, authData)) - .thenReturn(App(fusedApp.package_name)) + ).thenThrow(RuntimeException()) - Mockito.`when`( - gPlayAPIRepository.getDownloadInfo( - fusedApp.package_name, - fusedApp.latest_version_code, - fusedApp.offer_type, - authData - ) - ).thenThrow(RuntimeException()) - val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, authData) - assertEquals("getAppFilterLevel", FilterLevel.UI, filterLevel) - } + val filterLevel = fusedAPIImpl.getAppFilterLevel(fusedApp, AUTH_DATA) + assertEquals("getAppFilterLevel", FilterLevel.UI, filterLevel) + } @Test fun `getCategory when only pwa is selected`() = runTest { - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") val categories = Categories(listOf("app one", "app two", "app three"), listOf("game 1", "game 2"), true) val response = Response.success(categories) @@ -595,21 +600,20 @@ class FusedApiImplTest { Mockito.`when`( cleanApkRepository.getCategoriesList( - eq(CleanAPKInterface.APP_TYPE_PWA), - eq(CleanAPKInterface.APP_SOURCE_ANY) + eq(CleanAPKInterface.APP_TYPE_PWA), eq(CleanAPKInterface.APP_SOURCE_ANY) ) ).thenReturn(response) Mockito.`when`(context.getString(eq(R.string.pwa))).thenReturn("PWA") val categoryListResponse = - fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, authData) + fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) + assertEquals("getCategory", 3, categoryListResponse.first.size) } @Test fun `getCategory when only open source is selected`() = runTest { - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") val categories = Categories(listOf("app one", "app two", "app three"), listOf("game 1", "game 2"), true) val response = Response.success(categories) @@ -620,20 +624,19 @@ class FusedApiImplTest { Mockito.`when`( cleanApkRepository.getCategoriesList( - eq(CleanAPKInterface.APP_TYPE_ANY), - eq(CleanAPKInterface.APP_SOURCE_FOSS) + eq(CleanAPKInterface.APP_TYPE_ANY), eq(CleanAPKInterface.APP_SOURCE_FOSS) ) ).thenReturn(response) Mockito.`when`(context.getString(eq(R.string.open_source))).thenReturn("Open source") val categoryListResponse = - fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, authData) + fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) + assertEquals("getCategory", 3, categoryListResponse.first.size) } @Test fun `getCategory when gplay source is selected`() = runTest { - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") val categories = listOf(Category(), Category(), Category(), Category()) preferenceManagerModule.isPWASelectedFake = false @@ -641,43 +644,38 @@ class FusedApiImplTest { preferenceManagerModule.isGplaySelectedFake = true Mockito.`when`( - gPlayAPIRepository.getCategoriesList(Category.Type.APPLICATION, authData) + gPlayAPIRepository.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) ).thenReturn(categories) val categoryListResponse = - fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, authData) + fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) + assertEquals("getCategory", 4, categoryListResponse.first.size) } @Test fun `getCategory when gplay source is selected return error`() = runTest { - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") - val categories = listOf(Category(), Category(), Category(), Category()) - preferenceManagerModule.isPWASelectedFake = false preferenceManagerModule.isOpenSourceelectedFake = false preferenceManagerModule.isGplaySelectedFake = true Mockito.`when`( - gPlayAPIRepository.getCategoriesList(Category.Type.APPLICATION, authData) + gPlayAPIRepository.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) ).thenThrow(RuntimeException()) val categoryListResponse = - fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, authData) + fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) + assertEquals("getCategory", 0, categoryListResponse.first.size) assertEquals("getCategory", ResultStatus.UNKNOWN, categoryListResponse.third) } @Test fun `getCategory when All source is selected`() = runTest { - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") val gplayCategories = listOf(Category(), Category(), Category(), Category()) - val openSourcecategories = - Categories( - listOf("app one", "app two", "app three", "app four"), - listOf("game 1", "game 2"), - true - ) + val openSourcecategories = Categories( + listOf("app one", "app two", "app three", "app four"), listOf("game 1", "game 2"), true + ) val openSourceResponse = Response.success(openSourcecategories) val pwaCategories = Categories(listOf("app one", "app two", "app three"), listOf("game 1", "game 2"), true) @@ -685,20 +683,18 @@ class FusedApiImplTest { Mockito.`when`( cleanApkRepository.getCategoriesList( - eq(CleanAPKInterface.APP_TYPE_ANY), - eq(CleanAPKInterface.APP_SOURCE_FOSS) + eq(CleanAPKInterface.APP_TYPE_ANY), eq(CleanAPKInterface.APP_SOURCE_FOSS) ) ).thenReturn(openSourceResponse) Mockito.`when`( cleanApkRepository.getCategoriesList( - eq(CleanAPKInterface.APP_TYPE_PWA), - eq(CleanAPKInterface.APP_SOURCE_ANY) + eq(CleanAPKInterface.APP_TYPE_PWA), eq(CleanAPKInterface.APP_SOURCE_ANY) ) ).thenReturn(pwaResponse) Mockito.`when`( - gPlayAPIRepository.getCategoriesList(Category.Type.APPLICATION, authData) + gPlayAPIRepository.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) ).thenReturn(gplayCategories) Mockito.`when`(context.getString(eq(R.string.open_source))).thenReturn("Open source") @@ -709,13 +705,13 @@ class FusedApiImplTest { preferenceManagerModule.isGplaySelectedFake = true val categoryListResponse = - fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, authData) + fusedAPIImpl.getCategoriesList(Category.Type.APPLICATION, AUTH_DATA) + assertEquals("getCategory", 11, categoryListResponse.first.size) } @Test fun `getSearchResult When all sources are selected`() = runTest { - val authData = AuthData("e@e.email", "AtadyMsIAtadyM") val appList = mutableListOf( FusedApp( _id = "111", @@ -723,15 +719,13 @@ class FusedApiImplTest { name = "Demo One", package_name = "foundation.e.demoone", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "112", status = Status.UNAVAILABLE, name = "Demo Two", package_name = "foundation.e.demotwo", latest_version_code = 123 - ), - FusedApp( + ), FusedApp( _id = "113", status = Status.UNAVAILABLE, name = "Demo Three", @@ -739,6 +733,7 @@ class FusedApiImplTest { latest_version_code = 123 ) ) + val searchResult = Search(apps = appList, numberOfResults = 1, success = true) val packageNameSearchResponse = Response.success(searchResult) val gplayPackageResult = App("com.search.package") @@ -746,12 +741,19 @@ class FusedApiImplTest { preferenceManagerModule.isPWASelectedFake = true preferenceManagerModule.isOpenSourceelectedFake = true preferenceManagerModule.isGplaySelectedFake = true - val gplayLivedata = - MutableLiveData(Pair(listOf(App("a.b.c"), App("c.d.e"), App("d.e.f"), App("d.e.g")), false)) + val gplayLivedata = MutableLiveData( + Pair( + listOf(App("a.b.c"), App("c.d.e"), App("d.e.f"), App("d.e.g")), false + ) + ) + + setupMockingSearchApp( + packageNameSearchResponse, AUTH_DATA, gplayPackageResult, gplayLivedata + ) - setupMockingSearchApp(packageNameSearchResponse, authData, gplayPackageResult, gplayLivedata) + val searchResultLiveData = + fusedAPIImpl.getSearchResults("com.search.package", AUTH_DATA).getOrAwaitValue() - val searchResultLiveData = fusedAPIImpl.getSearchResults("com.search.package", authData).getOrAwaitValue() val size = searchResultLiveData.data?.first?.size ?: -2 assertEquals("getSearchResult", 8, size) } @@ -760,22 +762,26 @@ class FusedApiImplTest { packageNameSearchResponse: Response?, authData: AuthData, gplayPackageResult: App, - gplayLivedata: MutableLiveData, Boolean>> + gplayLivedata: MutableLiveData, Boolean>>, + willThrowException: Boolean = false ) { Mockito.`when`(pwaManagerModule.getPwaStatus(any())).thenReturn(Status.UNAVAILABLE) Mockito.`when`(pkgManagerModule.getPackageStatus(any(), any())) .thenReturn(Status.UNAVAILABLE) Mockito.`when`( cleanApkRepository.searchApps( - keyword = "com.search.package", - by = "package_name" + keyword = "com.search.package", by = "package_name" ) ).thenReturn(packageNameSearchResponse) - val formatterMocked = Mockito.mockStatic(Formatter::class.java) formatterMocked.`when` { Formatter.formatFileSize(any(), any()) }.thenReturn("15MB") - Mockito.`when`(gPlayAPIRepository.getAppDetails(eq("com.search.package"), eq(authData))) - .thenReturn(gplayPackageResult) + if (willThrowException) { + Mockito.`when`(gPlayAPIRepository.getAppDetails("com.search.package", authData)) + .thenThrow(RuntimeException()) + } else { + Mockito.`when`(gPlayAPIRepository.getAppDetails(eq("com.search.package"), eq(authData))) + .thenReturn(gplayPackageResult) + } Mockito.`when`(cleanApkRepository.searchApps(keyword = "com.search.package")) .thenReturn(packageNameSearchResponse) @@ -790,4 +796,50 @@ class FusedApiImplTest { Mockito.`when`(gPlayAPIRepository.getSearchResults(eq("com.search.package"), eq(authData))) .thenReturn(gplayLivedata) } + + @Test + fun `getSearchResult When getApplicationDetailsThrowsException`() = runTest { + val appList = mutableListOf( + FusedApp( + _id = "111", + status = Status.UNAVAILABLE, + name = "Demo One", + package_name = "foundation.e.demoone", + latest_version_code = 123 + ), FusedApp( + _id = "112", + status = Status.UNAVAILABLE, + name = "Demo Two", + package_name = "foundation.e.demotwo", + latest_version_code = 123 + ), FusedApp( + _id = "113", + status = Status.UNAVAILABLE, + name = "Demo Three", + package_name = "foundation.e.demothree", + latest_version_code = 123 + ) + ) + + val searchResult = Search(apps = appList, numberOfResults = 1, success = true) + val packageNameSearchResponse = Response.success(searchResult) + val gplayPackageResult = App("com.search.package") + + val gplayLivedata = + MutableLiveData(Pair(listOf(App("a.b.c"), App("c.d.e"), App("d.e.f")), false)) + + setupMockingSearchApp( + packageNameSearchResponse, AUTH_DATA, gplayPackageResult, gplayLivedata, true + ) + + preferenceManagerModule.isPWASelectedFake = false + preferenceManagerModule.isOpenSourceelectedFake = false + preferenceManagerModule.isGplaySelectedFake = true + + val searchResultLiveData = + fusedAPIImpl.getSearchResults("com.search.package", AUTH_DATA).getOrAwaitValue() + + val size = searchResultLiveData.data?.first?.size ?: -2 + assertEquals("getSearchResult", 3, size) + } }